##// END OF EJS Templates
Added check for minimal python version to setup.py
Thomas Arendsen Hein -
r1873:205f04b0 default
parent child Browse files
Show More
@@ -1,103 +1,106 b''
1 1 #!/usr/bin/env python
2 2 #
3 3 # This is the mercurial setup script.
4 4 #
5 5 # './setup.py install', or
6 6 # './setup.py --help' for more options
7 7
8 import sys
9 if not hasattr(sys, 'version_info') or sys.version_info < (2, 3):
10 raise SystemExit, "Mercurial requires python 2.3 or later."
11
8 12 import glob
9 import sys
10 13 from distutils.core import setup, Extension
11 14 from distutils.command.install_data import install_data
12 15
13 16 import mercurial.version
14 17
15 18 # py2exe needs to be installed to work
16 19 try:
17 20 import py2exe
18 21
19 22 # Help py2exe to find win32com.shell
20 23 try:
21 24 import modulefinder
22 25 import win32com
23 26 for p in win32com.__path__[1:]: # Take the path to win32comext
24 27 modulefinder.AddPackagePath("win32com", p)
25 28 pn = "win32com.shell"
26 29 __import__(pn)
27 30 m = sys.modules[pn]
28 31 for p in m.__path__[1:]:
29 32 modulefinder.AddPackagePath(pn, p)
30 33 except ImportError:
31 34 pass
32 35
33 36 # Due to the use of demandload py2exe is not finding the modules.
34 37 # packagescan.getmodules creates a list of modules included in
35 38 # the mercurial package plus depdent modules.
36 39 import mercurial.packagescan
37 40 from py2exe.build_exe import py2exe as build_exe
38 41
39 42 class py2exe_for_demandload(build_exe):
40 43 """ overwrites the py2exe command class for getting the build
41 44 directory and for setting the 'includes' option."""
42 45 def initialize_options(self):
43 46 self.build_lib = None
44 47 build_exe.initialize_options(self)
45 48 def finalize_options(self):
46 49 # Get the build directory, ie. where to search for modules.
47 50 self.set_undefined_options('build',
48 51 ('build_lib', 'build_lib'))
49 52 # Sets the 'includes' option with the list of needed modules
50 53 if not self.includes:
51 54 self.includes = []
52 55 else:
53 56 self.includes = self.includes.split(',')
54 57 self.includes += mercurial.packagescan.getmodules(self.build_lib,
55 58 'mercurial')
56 59 self.includes += mercurial.packagescan.getmodules(self.build_lib,
57 60 'hgext')
58 61 build_exe.finalize_options(self)
59 62 except ImportError:
60 63 py2exe_for_demandload = None
61 64
62 65
63 66 # specify version string, otherwise 'hg identify' will be used:
64 67 version = ''
65 68
66 69 class install_package_data(install_data):
67 70 def finalize_options(self):
68 71 self.set_undefined_options('install',
69 72 ('install_lib', 'install_dir'))
70 73 install_data.finalize_options(self)
71 74
72 75 try:
73 76 mercurial.version.remember_version(version)
74 77 cmdclass = {'install_data': install_package_data}
75 78 py2exe_opts = {}
76 79 if py2exe_for_demandload is not None:
77 80 cmdclass['py2exe'] = py2exe_for_demandload
78 81 py2exe_opts['console'] = ['hg']
79 82 setup(name='mercurial',
80 83 version=mercurial.version.get_version(),
81 84 author='Matt Mackall',
82 85 author_email='mpm@selenic.com',
83 86 url='http://selenic.com/mercurial',
84 87 description='Scalable distributed SCM',
85 88 license='GNU GPL',
86 89 packages=['mercurial', 'hgext'],
87 90 ext_modules=[Extension('mercurial.mpatch', ['mercurial/mpatch.c']),
88 91 Extension('mercurial.bdiff', ['mercurial/bdiff.c'])],
89 92 data_files=[('mercurial/templates',
90 93 ['templates/map'] +
91 94 glob.glob('templates/map-*') +
92 95 glob.glob('templates/*.tmpl')),
93 96 ('mercurial/templates/static',
94 97 glob.glob('templates/static/*'))],
95 98 cmdclass=cmdclass,
96 99 scripts=['hg', 'hgmerge'],
97 100 options=dict(bdist_mpkg=dict(zipdist=True,
98 101 license='COPYING',
99 102 readme='contrib/macosx/Readme.html',
100 103 welcome='contrib/macosx/Welcome.html')),
101 104 **py2exe_opts)
102 105 finally:
103 106 mercurial.version.forget_version()
General Comments 0
You need to be logged in to leave comments. Login now