setup.py
97 lines
| 3.5 KiB
| text/x-python
|
PythonLexer
mpm@selenic.com
|
r0 | #!/usr/bin/env python | ||
mpm@selenic.com
|
r575 | # | ||
# This is the mercurial setup script. | ||||
mpm@selenic.com
|
r0 | # | ||
# './setup.py install', or | ||||
# './setup.py --help' for more options | ||||
mpm@selenic.com
|
r157 | import glob | ||
Volker Kleinfeld
|
r1422 | import sys | ||
mpm@selenic.com
|
r72 | from distutils.core import setup, Extension | ||
mpm@selenic.com
|
r157 | from distutils.command.install_data import install_data | ||
Thomas Arendsen Hein
|
r423 | import mercurial.version | ||
Volker.Kleinfeld@gmx.de
|
r1283 | # py2exe needs to be installed to work | ||
try: | ||||
Bryan O'Sullivan
|
r1294 | import py2exe | ||
Volker.Kleinfeld@gmx.de
|
r1283 | |||
Volker Kleinfeld
|
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
|
r1283 | # Due to the use of demandload py2exe is not finding the modules. | ||
Bryan O'Sullivan
|
r1294 | # packagescan.getmodules creates a list of modules included in | ||
Volker.Kleinfeld@gmx.de
|
r1283 | # the mercurial package plus depdent modules. | ||
Bryan O'Sullivan
|
r1294 | import mercurial.packagescan | ||
from py2exe.build_exe import py2exe as build_exe | ||||
Volker.Kleinfeld@gmx.de
|
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
|
r1421 | else: | ||
self.includes = self.includes.split(',') | ||||
Bryan O'Sullivan
|
r1294 | self.includes += mercurial.packagescan.getmodules(self.build_lib, | ||
'mercurial') | ||||
Bryan O'Sullivan
|
r1300 | self.includes += mercurial.packagescan.getmodules(self.build_lib, | ||
'hgext') | ||||
Volker.Kleinfeld@gmx.de
|
r1283 | build_exe.finalize_options(self) | ||
Bryan O'Sullivan
|
r1284 | except ImportError: | ||
py2exe_for_demandload = None | ||||
Volker.Kleinfeld@gmx.de
|
r1283 | |||
Thomas Arendsen Hein
|
r427 | # specify version string, otherwise 'hg identify' will be used: | ||
version = '' | ||||
mpm@selenic.com
|
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
|
r0 | |||
Thomas Arendsen Hein
|
r423 | try: | ||
Thomas Arendsen Hein
|
r427 | mercurial.version.remember_version(version) | ||
Bryan O'Sullivan
|
r1284 | cmdclass = {'install_data': install_package_data} | ||
Benoit Boissinot
|
r1508 | py2exe_opts = {} | ||
Bryan O'Sullivan
|
r1284 | if py2exe_for_demandload is not None: | ||
cmdclass['py2exe'] = py2exe_for_demandload | ||||
Benoit Boissinot
|
r1508 | py2exe_opts['console'] = 'hg' | ||
Thomas Arendsen Hein
|
r423 | setup(name='mercurial', | ||
mpm@selenic.com
|
r429 | 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', | ||||
Bryan O'Sullivan
|
r1301 | packages=['mercurial', 'hgext'], | ||
mpm@selenic.com
|
r429 | ext_modules=[Extension('mercurial.mpatch', ['mercurial/mpatch.c']), | ||
Extension('mercurial.bdiff', ['mercurial/bdiff.c'])], | ||||
data_files=[('mercurial/templates', | ||||
['templates/map'] + | ||||
glob.glob('templates/map-*') + | ||||
mpm@selenic.com
|
r575 | glob.glob('templates/*.tmpl'))], | ||
Bryan O'Sullivan
|
r1284 | cmdclass=cmdclass, | ||
Volker.Kleinfeld@gmx.de
|
r1283 | scripts=['hg', 'hgmerge'], | ||
Benoit Boissinot
|
r1508 | **py2exe_opts) | ||
Thomas Arendsen Hein
|
r423 | finally: | ||
mercurial.version.forget_version() | ||||