view setup.py @ 2568:52ce0d6bc375

HTTPS: fix python2.3, persistent connections, don't explode if SSL is not available The urllib2 differences between python 2.3 and 2.4 are hidden by using keepalive.py, which also gives us support for persistent connections. Support for HTTPS is enabled only if there's a HTTPSHandler class in urllib2. It's not possible to have separate classes as handlers for HTTP and HTTPS: to support persistent HTTPS connections, we need a class that inherits from both keepalive.HTTPHandler and urllib2.HTTPSHandler. If we try to pass (an instance of) this class and (an instance of) the httphandler class to urllib2.build_opener, this function ends up getting confused, since both classes are subclasses of the HTTPHandler default handler, and raises an exception.
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Thu, 06 Jul 2006 03:14:55 -0300
parents 82cef38fea56
children 3dba9ec89164
line wrap: on
line source

#!/usr/bin/env python
#
# This is the mercurial setup script.
#
# './setup.py install', or
# './setup.py --help' for more options

import sys
if not hasattr(sys, 'version_info') or sys.version_info < (2, 3):
    raise SystemExit, "Mercurial requires python 2.3 or later."

import glob
from distutils.core import setup, Extension
from distutils.command.install_data import install_data

# mercurial.packagescan must be the first mercurial module imported
import mercurial.packagescan
import mercurial.version

# py2exe needs to be installed to work
try:
    import py2exe

    # Help py2exe to find win32com.shell
    try:
        import modulefinder
        import win32com
        for p in win32com.__path__[1:]: # Take the path to win32comext
            modulefinder.AddPackagePath("win32com", p)
        pn = "win32com.shell"
        __import__(pn)
        m = sys.modules[pn]
        for p in m.__path__[1:]:
            modulefinder.AddPackagePath(pn, p)
    except ImportError:
        pass

    # Due to the use of demandload py2exe is not finding the modules.
    # packagescan.getmodules creates a list of modules included in
    # the mercurial package plus depdent modules.
    from py2exe.build_exe import py2exe as build_exe

    class py2exe_for_demandload(build_exe):
        """ overwrites the py2exe command class for getting the build
        directory and for setting the 'includes' option."""
        def initialize_options(self):
            self.build_lib = None
            build_exe.initialize_options(self)
        def finalize_options(self):
            # Get the build directory, ie. where to search for modules.
            self.set_undefined_options('build',
                                       ('build_lib', 'build_lib'))
            # Sets the 'includes' option with the list of needed modules
            if not self.includes:
                self.includes = []
            else:
                self.includes = self.includes.split(',')
            mercurial.packagescan.scan(self.build_lib,'mercurial')
            mercurial.packagescan.scan(self.build_lib,'mercurial.hgweb')
            mercurial.packagescan.scan(self.build_lib,'hgext')
            self.includes += mercurial.packagescan.getmodules()
            build_exe.finalize_options(self)
except ImportError:
    py2exe_for_demandload = None


# specify version string, otherwise 'hg identify' will be used:
version = ''

class install_package_data(install_data):
    def finalize_options(self):
        self.set_undefined_options('install',
                                   ('install_lib', 'install_dir'))
        install_data.finalize_options(self)

mercurial.version.remember_version(version)
cmdclass = {'install_data': install_package_data}
py2exe_opts = {}
if py2exe_for_demandload is not None:
    cmdclass['py2exe'] = py2exe_for_demandload
    py2exe_opts['console'] = ['hg']
setup(name='mercurial',
        version=mercurial.version.get_version(),
        author='Matt Mackall',
        author_email='mpm@selenic.com',
        url='http://selenic.com/mercurial',
        description='Scalable distributed SCM',
        license='GNU GPL',
        packages=['mercurial', 'mercurial.hgweb', 'hgext'],
        ext_modules=[Extension('mercurial.mpatch', ['mercurial/mpatch.c']),
                    Extension('mercurial.bdiff', ['mercurial/bdiff.c'])],
        data_files=[('mercurial/templates',
                    ['templates/map'] +
                    glob.glob('templates/map-*') +
                    glob.glob('templates/*.tmpl')),
                    ('mercurial/templates/static',
                    glob.glob('templates/static/*'))],
        cmdclass=cmdclass,
        scripts=['hg', 'hgmerge'],
        options=dict(bdist_mpkg=dict(zipdist=True,
                                    license='COPYING',
                                    readme='contrib/macosx/Readme.html',
                                    welcome='contrib/macosx/Welcome.html')),
        **py2exe_opts)