##// END OF EJS Templates
setup.py: install packagescan before any mercurial modules is imported...
setup.py: install packagescan before any mercurial modules is imported Further the installation of packagescan over demandload is moved to the packagescan module. I added as well few more comments in the packagescan module to avoid the wrong use of package scan in the future. Reason: mercurial.packagescan acts as fake mercurial.demandload during a py2exe run. Unfortunatly the import of mercurial.version in setup.py is done before mercurial.packagescan is installed. This results in few imports without mercurial.packagescan in charge and therefore not all dependend modules are detected when running mercurial.packagescan.getmodules later e.g. winerror is missed.

File last commit:

r2323:c58a403a default
r2323:c58a403a default
Show More
setup.py
103 lines | 3.8 KiB | text/x-python | PythonLexer
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 #!/usr/bin/env python
mpm@selenic.com
More whitespace cleanups...
r575 #
# This is the mercurial setup script.
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 #
# './setup.py install', or
# './setup.py --help' for more options
Thomas Arendsen Hein
Added check for minimal python version to setup.py
r1873 import sys
if not hasattr(sys, 'version_info') or sys.version_info < (2, 3):
raise SystemExit, "Mercurial requires python 2.3 or later."
mpm@selenic.com
Install the templates where they can be found by hgweb.py...
r157 import glob
mpm@selenic.com
Add an O(m + nlog n) patching extension
r72 from distutils.core import setup, Extension
mpm@selenic.com
Install the templates where they can be found by hgweb.py...
r157 from distutils.command.install_data import install_data
Volker Kleinfeld
setup.py: install packagescan before any mercurial modules is imported...
r2323 # mercurial.packagescan must be the first mercurial module imported
import mercurial.packagescan
Thomas Arendsen Hein
Support for 'hg --version'. setup.py stores version from hg repository....
r423 import mercurial.version
Volker.Kleinfeld@gmx.de
Support for the distutils extention 'py2exe' added....
r1283 # py2exe needs to be installed to work
try:
Bryan O'Sullivan
Clean up whitespace damage.
r1294 import py2exe
Volker.Kleinfeld@gmx.de
Support for the distutils extention 'py2exe' added....
r1283
Volker Kleinfeld
py2exe is not able to handle win32com.shell...
r1422 # 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
Volker.Kleinfeld@gmx.de
Support for the distutils extention 'py2exe' added....
r1283 # Due to the use of demandload py2exe is not finding the modules.
Bryan O'Sullivan
Clean up whitespace damage.
r1294 # packagescan.getmodules creates a list of modules included in
Volker.Kleinfeld@gmx.de
Support for the distutils extention 'py2exe' added....
r1283 # the mercurial package plus depdent modules.
Bryan O'Sullivan
Clean up whitespace damage.
r1294 from py2exe.build_exe import py2exe as build_exe
Volker.Kleinfeld@gmx.de
Support for the distutils extention 'py2exe' added....
r1283
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 = []
Volker Kleinfeld
Option -i broken in py2exe_for_demandload...
r1421 else:
self.includes = self.includes.split(',')
Volker Kleinfeld
setup.py: install packagescan before any mercurial modules is imported...
r2323 mercurial.packagescan.scan(self.build_lib,'mercurial')
mercurial.packagescan.scan(self.build_lib,'hgext')
self.includes += mercurial.packagescan.getmodules()
Volker.Kleinfeld@gmx.de
Support for the distutils extention 'py2exe' added....
r1283 build_exe.finalize_options(self)
Bryan O'Sullivan
Fix Volker's modifications to setup.py for non-Windows systems.
r1284 except ImportError:
py2exe_for_demandload = None
Volker.Kleinfeld@gmx.de
Support for the distutils extention 'py2exe' added....
r1283
Thomas Arendsen Hein
Make it possible to specify a version number in setup.py....
r427 # specify version string, otherwise 'hg identify' will be used:
version = ''
mpm@selenic.com
Install the templates where they can be found by hgweb.py...
r157 class install_package_data(install_data):
def finalize_options(self):
self.set_undefined_options('install',
('install_lib', 'install_dir'))
install_data.finalize_options(self)
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
Thomas Arendsen Hein
Don't forget version at the end of setup.py, write it only if changed....
r1977 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', '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)