comparison setup.py @ 1283:f5faab34f32e

Support for the distutils extention 'py2exe' added. Description: - If the py2exe distutils extention is installed this patch allows building standalone exe for windows - example: > python setup.py build --compiler=mingw32 py2exe - The 'out of the box' py2exe is not able to resolve the dependencies due to 'demandload'. A new helper module of scanning the mercurial package has been added. Changed: - setup.py: importing py2exe and sub classing its command class to fetch the build directory and insert the needed includes - packagescan.py: new helper module added, that scans the distutil build directory for modules to be included.
author Volker.Kleinfeld@gmx.de
date Tue, 20 Sep 2005 19:25:14 -0700
parents 7f5ce4bbdd7b
children 59d07a6bd513
comparison
equal deleted inserted replaced
1282:c1a507ba398b 1283:f5faab34f32e
8 import glob 8 import glob
9 from distutils.core import setup, Extension 9 from distutils.core import setup, Extension
10 from distutils.command.install_data import install_data 10 from distutils.command.install_data import install_data
11 11
12 import mercurial.version 12 import mercurial.version
13
14 # py2exe needs to be installed to work
15 try:
16 import py2exe
17
18 # Due to the use of demandload py2exe is not finding the modules.
19 # packagescan.getmodules creates a list of modules included in
20 # the mercurial package plus depdent modules.
21 import mercurial.packagescan
22 from py2exe.build_exe import py2exe as build_exe
23
24 class py2exe_for_demandload(build_exe):
25 """ overwrites the py2exe command class for getting the build
26 directory and for setting the 'includes' option."""
27 def initialize_options(self):
28 self.build_lib = None
29 build_exe.initialize_options(self)
30 def finalize_options(self):
31 # Get the build directory, ie. where to search for modules.
32 self.set_undefined_options('build',
33 ('build_lib', 'build_lib'))
34 # Sets the 'includes' option with the list of needed modules
35 if not self.includes:
36 self.includes = []
37 self.includes += mercurial.packagescan.getmodules(self.build_lib,'mercurial')
38 build_exe.finalize_options(self)
39 except ImportError: pass
40
13 41
14 # specify version string, otherwise 'hg identify' will be used: 42 # specify version string, otherwise 'hg identify' will be used:
15 version = '' 43 version = ''
16 44
17 class install_package_data(install_data): 45 class install_package_data(install_data):
34 Extension('mercurial.bdiff', ['mercurial/bdiff.c'])], 62 Extension('mercurial.bdiff', ['mercurial/bdiff.c'])],
35 data_files=[('mercurial/templates', 63 data_files=[('mercurial/templates',
36 ['templates/map'] + 64 ['templates/map'] +
37 glob.glob('templates/map-*') + 65 glob.glob('templates/map-*') +
38 glob.glob('templates/*.tmpl'))], 66 glob.glob('templates/*.tmpl'))],
39 cmdclass = { 'install_data' : install_package_data }, 67 cmdclass = { 'install_data' : install_package_data,
40 scripts=['hg', 'hgmerge']) 68 'py2exe' : py2exe_for_demandload},
69 scripts=['hg', 'hgmerge'],
70 console = ['hg'])
41 finally: 71 finally:
42 mercurial.version.forget_version() 72 mercurial.version.forget_version()