parts/django/setup.py
changeset 69 c6bca38c1cbf
equal deleted inserted replaced
68:5ff1fc726848 69:c6bca38c1cbf
       
     1 from distutils.core import setup
       
     2 from distutils.command.install_data import install_data
       
     3 from distutils.command.install import INSTALL_SCHEMES
       
     4 import os
       
     5 import sys
       
     6 
       
     7 class osx_install_data(install_data):
       
     8     # On MacOS, the platform-specific lib dir is /System/Library/Framework/Python/.../
       
     9     # which is wrong. Python 2.5 supplied with MacOS 10.5 has an Apple-specific fix
       
    10     # for this in distutils.command.install_data#306. It fixes install_lib but not
       
    11     # install_data, which is why we roll our own install_data class.
       
    12 
       
    13     def finalize_options(self):
       
    14         # By the time finalize_options is called, install.install_lib is set to the
       
    15         # fixed directory, so we set the installdir to install_lib. The
       
    16         # install_data class uses ('install_data', 'install_dir') instead.
       
    17         self.set_undefined_options('install', ('install_lib', 'install_dir'))
       
    18         install_data.finalize_options(self)
       
    19 
       
    20 if sys.platform == "darwin": 
       
    21     cmdclasses = {'install_data': osx_install_data} 
       
    22 else: 
       
    23     cmdclasses = {'install_data': install_data} 
       
    24 
       
    25 def fullsplit(path, result=None):
       
    26     """
       
    27     Split a pathname into components (the opposite of os.path.join) in a
       
    28     platform-neutral way.
       
    29     """
       
    30     if result is None:
       
    31         result = []
       
    32     head, tail = os.path.split(path)
       
    33     if head == '':
       
    34         return [tail] + result
       
    35     if head == path:
       
    36         return result
       
    37     return fullsplit(head, [tail] + result)
       
    38 
       
    39 # Tell distutils to put the data_files in platform-specific installation
       
    40 # locations. See here for an explanation:
       
    41 # http://groups.google.com/group/comp.lang.python/browse_thread/thread/35ec7b2fed36eaec/2105ee4d9e8042cb
       
    42 for scheme in INSTALL_SCHEMES.values():
       
    43     scheme['data'] = scheme['purelib']
       
    44 
       
    45 # Compile the list of packages available, because distutils doesn't have
       
    46 # an easy way to do this.
       
    47 packages, data_files = [], []
       
    48 root_dir = os.path.dirname(__file__)
       
    49 if root_dir != '':
       
    50     os.chdir(root_dir)
       
    51 django_dir = 'django'
       
    52 
       
    53 for dirpath, dirnames, filenames in os.walk(django_dir):
       
    54     # Ignore dirnames that start with '.'
       
    55     for i, dirname in enumerate(dirnames):
       
    56         if dirname.startswith('.'): del dirnames[i]
       
    57     if '__init__.py' in filenames:
       
    58         packages.append('.'.join(fullsplit(dirpath)))
       
    59     elif filenames:
       
    60         data_files.append([dirpath, [os.path.join(dirpath, f) for f in filenames]])
       
    61 
       
    62 # Small hack for working with bdist_wininst.
       
    63 # See http://mail.python.org/pipermail/distutils-sig/2004-August/004134.html
       
    64 if len(sys.argv) > 1 and sys.argv[1] == 'bdist_wininst':
       
    65     for file_info in data_files:
       
    66         file_info[0] = '\\PURELIB\\%s' % file_info[0]
       
    67 
       
    68 # Dynamically calculate the version based on django.VERSION.
       
    69 version = __import__('django').get_version()
       
    70 if u'SVN' in version:
       
    71     version = ' '.join(version.split(' ')[:-1])
       
    72 
       
    73 setup(
       
    74     name = "Django",
       
    75     version = version.replace(' ', '-'),
       
    76     url = 'http://www.djangoproject.com/',
       
    77     author = 'Django Software Foundation',
       
    78     author_email = 'foundation@djangoproject.com',
       
    79     description = 'A high-level Python Web framework that encourages rapid development and clean, pragmatic design.',
       
    80     download_url = 'http://media.djangoproject.com/releases/1.2/Django-1.2.4.tar.gz',
       
    81     packages = packages,
       
    82     cmdclass = cmdclasses,
       
    83     data_files = data_files,
       
    84     scripts = ['django/bin/django-admin.py'],
       
    85     classifiers = ['Development Status :: 5 - Production/Stable',
       
    86                    'Environment :: Web Environment',
       
    87                    'Framework :: Django',
       
    88                    'Intended Audience :: Developers',
       
    89                    'License :: OSI Approved :: BSD License',
       
    90                    'Operating System :: OS Independent',
       
    91                    'Programming Language :: Python',
       
    92                    'Topic :: Internet :: WWW/HTTP',
       
    93                    'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
       
    94                    'Topic :: Internet :: WWW/HTTP :: WSGI',
       
    95                    'Topic :: Software Development :: Libraries :: Application Frameworks',
       
    96                    'Topic :: Software Development :: Libraries :: Python Modules',
       
    97                    ],
       
    98 )