##// END OF EJS Templates
hgweb: show correct error message for i18n environment...
hgweb: show correct error message for i18n environment If exception is error.LookupError and running in i18n environment, below condition is always true. Because msg is translated and dosen't contain 'manifest'. if util.safehasattr(err, 'name') and 'manifest' not in msg: This patch creates a new exception class and uses it instead of string match.

File last commit:

r18754:d420ac09 stable
r18855:50c922c1 2.5.3 stable
Show More
setup.py
566 lines | 20.3 KiB | text/x-python | PythonLexer
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 #
Christian Ebert
setup.py not executable: change instructions at beginning of file
r4816 # 'python setup.py install', or
# 'python setup.py --help' for more options
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
Zachary Gramana
setup.py: workaround for missing bz2 module in IronPython...
r14295 import sys, platform
Augie Fackler
setup.py: use getattr instead of hasdattr
r14973 if getattr(sys, 'version_info', (0, 0, 0)) < (2, 4, 0, 'final'):
Martin Geisler
setup: require Python 2.4
r8286 raise SystemExit("Mercurial requires Python 2.4 or later.")
Thomas Arendsen Hein
Added check for minimal python version to setup.py
r1873
Renato Cunha
setup.py: Adjustments to make setup.py run in py3k....
r11532 if sys.version_info[0] >= 3:
def b(s):
'''A helper function to emulate 2.6+ bytes literals using string
literals.'''
return s.encode('latin1')
else:
def b(s):
'''A helper function to emulate 2.6+ bytes literals using string
literals.'''
return s
Matt Mackall
setup: warn about missing standard Python components
r7558 # Solaris Python packaging brain damage
try:
import hashlib
sha = hashlib.sha1()
Brodie Rao
cleanup: replace naked excepts with more specific ones
r16688 except ImportError:
Matt Mackall
setup: warn about missing standard Python components
r7558 try:
import sha
Brodie Rao
cleanup: replace naked excepts with more specific ones
r16688 except ImportError:
Matt Mackall
setup: warn about missing standard Python components
r7558 raise SystemExit(
"Couldn't import standard hashlib (incomplete Python install).")
try:
import zlib
Brodie Rao
cleanup: replace naked excepts with more specific ones
r16688 except ImportError:
Matt Mackall
setup: warn about missing standard Python components
r7558 raise SystemExit(
"Couldn't import standard zlib (incomplete Python install).")
Zachary Gramana
setup.py: workaround for missing bz2 module in IronPython...
r14295 # The base IronPython distribution (as of 2.7.1) doesn't support bz2
isironpython = False
Dirkjan Ochtman
setup: fail if bz2 is not available
r10761 try:
Brodie Rao
cleanup: eradicate long lines
r16683 isironpython = (platform.python_implementation()
.lower().find("ironpython") != -1)
Brodie Rao
cleanup: replace naked excepts with more specific ones
r16688 except AttributeError:
Zachary Gramana
setup.py: workaround for missing bz2 module in IronPython...
r14295 pass
if isironpython:
Simon Heimberg
setup: make script executable with python3...
r15492 sys.stderr.write("warning: IronPython detected (no bz2 support)\n")
Zachary Gramana
setup.py: workaround for missing bz2 module in IronPython...
r14295 else:
try:
import bz2
Brodie Rao
cleanup: replace naked excepts with more specific ones
r16688 except ImportError:
Zachary Gramana
setup.py: workaround for missing bz2 module in IronPython...
r14295 raise SystemExit(
"Couldn't import standard bz2 (incomplete Python install).")
Dirkjan Ochtman
setup: fail if bz2 is not available
r10761
Christian Ebert
setup.py: subprocess instead of os.popen, sys.stderr.write instead of print...
r8547 import os, subprocess, time
Alexis S. L. Carvalho
setup.py: use a simplified custom version of CCompiler.has_function...
r6251 import shutil
import tempfile
Christian Boos
setup: ignore failures to build optional inotify extension
r11468 from distutils import log
Yuya Nishihara
setup: add command to generate index of extensions...
r14538 from distutils.core import setup, Command, Extension
Martin Geisler
add --pure flag to setup.py...
r7722 from distutils.dist import Distribution
Martin Geisler
i18n: new build_mo command for setup.py...
r7649 from distutils.command.build import build
Christian Boos
setup: ignore failures to build optional inotify extension
r11468 from distutils.command.build_ext import build_ext
Martin Geisler
add --pure flag to setup.py...
r7722 from distutils.command.build_py import build_py
Dan Villiom Podlaski Christiansen
setup/hg: always load Mercurial from where it was installed....
r12661 from distutils.command.install_scripts import install_scripts
Martin Geisler
i18n: new build_mo command for setup.py...
r7649 from distutils.spawn import spawn, find_executable
Alexis S. L. Carvalho
setup.py: skip inotify if there's no inotify_add_watch...
r6245 from distutils.ccompiler import new_compiler
Bryan O'Sullivan
setup: disable -mno-cygwin if building under mingw32...
r17121 from distutils import cygwinccompiler
Yuya Nishihara
setup: add command to generate index of extensions...
r14538 from distutils.errors import CCompilerError, DistutilsExecError
Nicolas Dumazet
setup: user-friendly error message if Python headers are missing
r12649 from distutils.sysconfig import get_python_inc
Dirkjan Ochtman
setup.py: use StrictVersion instead of manual comparison
r13594 from distutils.version import StrictVersion
mpm@selenic.com
Install the templates where they can be found by hgweb.py...
r157
Simon Heimberg
setup: support executing with python3 including 2to3...
r15494 convert2to3 = '--c2to3' in sys.argv
if convert2to3:
try:
from distutils.command.build_py import build_py_2to3 as build_py
from lib2to3.refactor import get_fixers_from_package as getfixers
except ImportError:
if sys.version_info[0] < 3:
raise SystemExit("--c2to3 is only compatible with python3.")
raise
sys.path.append('contrib')
Simon Heimberg
setup: raise when executing with python3 without c2to3 argument
r15500 elif sys.version_info[0] >= 3:
raise SystemExit("setup.py with python3 needs --c2to3 (experimental)")
Simon Heimberg
setup: support executing with python3 including 2to3...
r15494
Paul Moore
Add a batch file driver for Windows
r6513 scripts = ['hg']
if os.name == 'nt':
scripts.append('contrib/win32/hg.bat')
Matt Mackall
Fix setup.py warning
r3893
Alexis S. L. Carvalho
setup.py: use a simplified custom version of CCompiler.has_function...
r6251 # simplified version of distutils.ccompiler.CCompiler.has_function
# that actually removes its temporary files.
Martin Geisler
setup: cleanup coding style
r10000 def hasfunction(cc, funcname):
Alexis S. L. Carvalho
setup.py: use a simplified custom version of CCompiler.has_function...
r6251 tmpdir = tempfile.mkdtemp(prefix='hg-install-')
Alexis S. L. Carvalho
setup.py: hide compiler error messages while searching for inotify
r6373 devnull = oldstderr = None
Alexis S. L. Carvalho
setup.py: use a simplified custom version of CCompiler.has_function...
r6251 try:
try:
Alexis S. L. Carvalho
setup.py: hide compiler error messages while searching for inotify
r6373 fname = os.path.join(tmpdir, 'funcname.c')
f = open(fname, 'w')
f.write('int main(void) {\n')
f.write(' %s();\n' % funcname)
f.write('}\n')
f.close()
# Redirect stderr to /dev/null to hide any error messages
# from the compiler.
# This will have to be changed if we ever have to check
# for a function on Windows.
devnull = open('/dev/null', 'w')
oldstderr = os.dup(sys.stderr.fileno())
os.dup2(devnull.fileno(), sys.stderr.fileno())
Bryan O'Sullivan
setup.py: don't pollute the current directory with temporary files
r9124 objects = cc.compile([fname], output_dir=tmpdir)
Alexis S. L. Carvalho
setup.py: use a simplified custom version of CCompiler.has_function...
r6251 cc.link_executable(objects, os.path.join(tmpdir, "a.out"))
Brodie Rao
cleanup: replace naked excepts with except Exception: ...
r16689 except Exception:
Alexis S. L. Carvalho
setup.py: use a simplified custom version of CCompiler.has_function...
r6251 return False
return True
finally:
Alexis S. L. Carvalho
setup.py: hide compiler error messages while searching for inotify
r6373 if oldstderr is not None:
os.dup2(oldstderr, sys.stderr.fileno())
if devnull is not None:
devnull.close()
Alexis S. L. Carvalho
setup.py: use a simplified custom version of CCompiler.has_function...
r6251 shutil.rmtree(tmpdir)
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
Adrian Buehlmann
setup.py: fixing version info for Windows hg.exe (py2exe)...
r10400 py2exeloaded = True
Pascal Quantin
setup: fix py2exe generation broken by c3a6ec304055 (issue3116)...
r15527 # import py2exe's patched Distribution class
from distutils.core import Distribution
Bryan O'Sullivan
Fix Volker's modifications to setup.py for non-Windows systems.
r1284 except ImportError:
Adrian Buehlmann
setup.py: fixing version info for Windows hg.exe (py2exe)...
r10400 py2exeloaded = False
Volker.Kleinfeld@gmx.de
Support for the distutils extention 'py2exe' added....
r1283
Christian Boos
setup: fix f51d1822d6fd refactoring, propagate env to runcmd
r9807 def runcmd(cmd, env):
Steven Stallion
plan9: initial support for plan 9 from bell labs...
r16383 if sys.platform == 'plan9':
# subprocess kludge to work around issues in half-baked Python
# ports, notably bichued/python:
_, out, err = os.popen3(cmd)
return str(out), str(err)
else:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, env=env)
out, err = p.communicate()
return out, err
Jon M. Dugan
setup: fix mac build broken by e42d18538e1d...
r13636
def runhg(cmd, env):
out, err = runcmd(cmd, env)
Gilles Moris
setup: refactor the version string to a subset of tag+tagdist-hash+date...
r9615 # If root is executing setup.py, but the repository is owned by
# another user (as in "sudo python setup.py install") we will get
# trust warnings since the .hg/hgrc file is untrusted. That is
Steve Borho
setup: ignore 'not importing' warnings during version detection...
r10120 # fine, we don't want to load it anyway. Python may warn about
# a missing __init__.py in mercurial/locale, we also ignore that.
Gilles Moris
setup: refactor the version string to a subset of tag+tagdist-hash+date...
r9615 err = [e for e in err.splitlines()
Renato Cunha
setup.py: Adjustments to make setup.py run in py3k....
r11532 if not e.startswith(b('Not trusting file')) \
Benoit Boissinot
setup.py: ignore warnings from obsolete...
r18754 and not e.startswith(b('warning: Not importing')) \
and not e.startswith(b('obsolete feature not enabled'))]
Gilles Moris
setup: refactor the version string to a subset of tag+tagdist-hash+date...
r9615 if err:
Bryan O'Sullivan
setup: print subprocess stderr if there is any...
r17926 print >> sys.stderr, "stderr from '%s':" % (' '.join(cmd))
print >> sys.stderr, '\n'.join([' ' + e for e in err])
Gilles Moris
setup: refactor the version string to a subset of tag+tagdist-hash+date...
r9615 return ''
return out
version = ''
Jeremy Whitlock
setup: read .hg_archival.txt for version info (issue1670)...
r8548
Yuya Nishihara
setup: set whole env for running hg even if .hg doesn't exist (issue3073)...
r15388 # Execute hg out of this directory with a custom environment which
# includes the pure Python modules in mercurial/pure. We also take
# care to not use any hgrc files and do no localization.
pypath = ['mercurial', os.path.join('mercurial', 'pure')]
env = {'PYTHONPATH': os.pathsep.join(pypath),
'HGRCPATH': '',
'LANGUAGE': 'C'}
if 'LD_LIBRARY_PATH' in os.environ:
env['LD_LIBRARY_PATH'] = os.environ['LD_LIBRARY_PATH']
if 'SystemRoot' in os.environ:
# Copy SystemRoot into the custom environment for Python 2.6
# under Windows. Otherwise, the subprocess will fail with
# error 0xc0150004. See: http://bugs.python.org/issue3440
env['SystemRoot'] = os.environ['SystemRoot']
Matt Mackall
setup: set env global earlier (3073)
r15367
Christian Ebert
setup.py: subprocess instead of os.popen, sys.stderr.write instead of print...
r8547 if os.path.isdir('.hg'):
Bryan O'Sullivan
setup: calculate version more correctly...
r17709 cmd = [sys.executable, 'hg', 'log', '-r', '.', '--template', '{tags}\n']
numerictags = [t for t in runhg(cmd, env).split() if t[0].isdigit()]
hgid = runhg([sys.executable, 'hg', 'id', '-i'], env).strip()
if numerictags: # tag(s) found
version = numerictags[-1]
if hgid.endswith('+'): # propagate the dirty status to the tag
Gilles Moris
setup: refactor the version string to a subset of tag+tagdist-hash+date...
r9615 version += '+'
Bryan O'Sullivan
setup: calculate version more correctly...
r17709 else: # no tag found
Gilles Moris
setup: refactor the version string to a subset of tag+tagdist-hash+date...
r9615 cmd = [sys.executable, 'hg', 'parents', '--template',
'{latesttag}+{latesttagdistance}-']
Bryan O'Sullivan
setup: calculate version more correctly...
r17709 version = runhg(cmd, env) + hgid
Gilles Moris
setup: refactor the version string to a subset of tag+tagdist-hash+date...
r9615 if version.endswith('+'):
version += time.strftime('%Y%m%d')
elif os.path.exists('.hg_archival.txt'):
Martin Geisler
setup.py: keep Python 2.3 compatibility...
r10124 kw = dict([[t.strip() for t in l.split(':', 1)]
for l in open('.hg_archival.txt')])
Gilles Moris
setup: refactor the version string to a subset of tag+tagdist-hash+date...
r9615 if 'tag' in kw:
version = kw['tag']
elif 'latesttag' in kw:
version = '%(latesttag)s+%(latesttagdistance)s-%(node).12s' % kw
Christian Ebert
setup.py: subprocess instead of os.popen, sys.stderr.write instead of print...
r8547 else:
Gilles Moris
setup: refactor the version string to a subset of tag+tagdist-hash+date...
r9615 version = kw.get('node', '')[:12]
Matt Mackall
refactor version code...
r7632
Jeremy Whitlock
setup: read .hg_archival.txt for version info (issue1670)...
r8548 if version:
Alejandro Santos
compat: use open() instead of file() everywhere
r9031 f = open("mercurial/__version__.py", "w")
Jeremy Whitlock
setup: read .hg_archival.txt for version info (issue1670)...
r8548 f.write('# this file is autogenerated by setup.py\n')
f.write('version = "%s"\n' % version)
f.close()
Jeremy Whitlock
Fix how setup.py identifies the Mercurial version....
r8493
try:
from mercurial import __version__
version = __version__.version
except ImportError:
version = 'unknown'
Matt Mackall
refactor version code...
r7632
Simon Heimberg
setup: subclass build command
r15460 class hgbuild(build):
# Insert hgbuildmo first so that files in mercurial/locale/ are found
# when build_py is run next.
sub_commands = [('build_mo', None),
Brodie Rao
cleanup: eradicate long lines
r16683
# We also need build_ext before build_py. Otherwise, when 2to3 is
# called (in build_py), it will not find osutil & friends,
# thinking that those modules are global and, consequently, making
# a mess, now that all module imports are global.
Simon Heimberg
setup: support executing with python3 including 2to3...
r15494 ('build_ext', build.has_ext_modules),
Simon Heimberg
setup: subclass build command
r15460 ] + build.sub_commands
Matt Mackall
setup: backout 8504699d1aa6...
r15523 class hgbuildmo(build):
Martin Geisler
i18n: new build_mo command for setup.py...
r7649
description = "build translations (.mo files)"
def run(self):
if not find_executable('msgfmt'):
self.warn("could not find msgfmt executable, no translations "
"will be built")
return
podir = 'i18n'
if not os.path.isdir(podir):
self.warn("could not find %s/ directory" % podir)
return
join = os.path.join
for po in os.listdir(podir):
if not po.endswith('.po'):
continue
pofile = join(podir, po)
modir = join('locale', po[:-3], 'LC_MESSAGES')
mofile = join(modir, 'hg.mo')
Dan Villiom Podlaski Christiansen
setup: install translation files as package data...
r9999 mobuildfile = join('mercurial', mofile)
cmd = ['msgfmt', '-v', '-o', mobuildfile, pofile]
Martin Geisler
setup: do not use -c with msgfmt on Solaris (issue1489)
r7720 if sys.platform != 'sunos5':
# msgfmt on Solaris does not know about -c
cmd.append('-c')
Dan Villiom Podlaski Christiansen
setup: install translation files as package data...
r9999 self.mkpath(join('mercurial', modir))
self.make_file([pofile], mobuildfile, spawn, (cmd,))
Martin Geisler
i18n: new build_mo command for setup.py...
r7649
Dan Villiom Podlaski Christiansen
setup/hg: always load Mercurial from where it was installed....
r12661
Simon Heimberg
setup: subclass distribution instead of overwriting original
r15458 class hgdist(Distribution):
pure = 0
global_options = Distribution.global_options + \
[('pure', None, "use pure (slow) Python "
"code instead of C extensions"),
Simon Heimberg
setup: support executing with python3 including 2to3...
r15494 ('c2to3', None, "(experimental!) convert "
"code with 2to3"),
Simon Heimberg
setup: subclass distribution instead of overwriting original
r15458 ]
Martin Geisler
add --pure flag to setup.py...
r7722
Simon Heimberg
setup: has_ext_modules always returns false when pure is specified...
r15459 def has_ext_modules(self):
# self.ext_modules is emptied in hgbuildpy.finalize_options which is
# too late for some cases
return not self.pure and Distribution.has_ext_modules(self)
Christian Boos
setup: ignore failures to build optional inotify extension
r11468 class hgbuildext(build_ext):
def build_extension(self, ext):
try:
build_ext.build_extension(self, ext)
except CCompilerError:
Martin Geisler
setup: slight simplification
r12501 if not getattr(ext, 'optional', False):
Christian Boos
setup: ignore failures to build optional inotify extension
r11468 raise
log.warn("Failed to build optional extension '%s' (skipping)",
ext.name)
Martin Geisler
setup: cleanup coding style
r10000 class hgbuildpy(build_py):
Simon Heimberg
setup: support executing with python3 including 2to3...
r15494 if convert2to3:
fixer_names = sorted(set(getfixers("lib2to3.fixes") +
getfixers("hgfixes")))
Martin Geisler
add --pure flag to setup.py...
r7722
def finalize_options(self):
build_py.finalize_options(self)
if self.distribution.pure:
if self.py_modules is None:
self.py_modules = []
for ext in self.distribution.ext_modules:
if ext.name.startswith("mercurial."):
self.py_modules.append("mercurial.pure.%s" % ext.name[10:])
self.distribution.ext_modules = []
Nicolas Dumazet
setup: user-friendly error message if Python headers are missing
r12649 else:
if not os.path.exists(os.path.join(get_python_inc(), 'Python.h')):
Brodie Rao
cleanup: eradicate long lines
r16683 raise SystemExit('Python headers are required to build '
'Mercurial')
Martin Geisler
add --pure flag to setup.py...
r7722
def find_modules(self):
modules = build_py.find_modules(self)
for module in modules:
if module[0] == "mercurial.pure":
if module[1] != "__init__":
yield ("mercurial", module[1], module[2])
else:
yield module
Yuya Nishihara
setup: add command to generate index of extensions...
r14538 class buildhgextindex(Command):
description = 'generate prebuilt index of hgext (for frozen package)'
user_options = []
_indexfilename = 'hgext/__index__.py'
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
if os.path.exists(self._indexfilename):
os.unlink(self._indexfilename)
# here no extension enabled, disabled() lists up everything
code = ('import pprint; from mercurial import extensions; '
'pprint.pprint(extensions.disabled())')
out, err = runcmd([sys.executable, '-c', code], env)
if err:
raise DistutilsExecError(err)
f = open(self._indexfilename, 'w')
f.write('# this file is autogenerated by setup.py\n')
f.write('docs = ')
f.write(out)
f.close()
Adrian Buehlmann
setup: compile hg.exe...
r17061 class buildhgexe(build_ext):
description = 'compile hg.exe from mercurial/exewrapper.c'
def build_extensions(self):
if os.name != 'nt':
return
Adrian Buehlmann
setup: fix build_hgexe for mingw32 compiler...
r17246 if isinstance(self.compiler, HackedMingw32CCompiler):
self.compiler.compiler_so = self.compiler.compiler # no -mdll
self.compiler.dll_libraries = [] # no -lmsrvc90
Adrian Buehlmann
exewrapper: adapt for legacy HackableMercurial...
r17732 hv = sys.hexversion
pythonlib = 'python%d%d' % (hv >> 24, (hv >> 16) & 0xff)
f = open('mercurial/hgpythonlib.h', 'wb')
f.write('/* this file is autogenerated by setup.py */\n')
f.write('#define HGPYTHONLIB "%s"\n' % pythonlib)
f.close()
Adrian Buehlmann
setup: compile hg.exe...
r17061 objects = self.compiler.compile(['mercurial/exewrapper.c'],
output_dir=self.build_temp)
dir = os.path.dirname(self.get_ext_fullpath('dummy'))
target = os.path.join(dir, 'hg')
self.compiler.link_executable(objects, target,
Adrian Buehlmann
exewrapper: adapt for legacy HackableMercurial...
r17732 libraries=[],
Adrian Buehlmann
setup: compile hg.exe...
r17061 output_dir=self.build_temp)
Dan Villiom Podlaski Christiansen
setup/hg: always load Mercurial from where it was installed....
r12661 class hginstallscripts(install_scripts):
'''
This is a specialization of install_scripts that replaces the @LIBDIR@ with
the configured directory for modules. If possible, the path is made relative
to the directory for scripts.
'''
def initialize_options(self):
install_scripts.initialize_options(self)
self.install_lib = None
def finalize_options(self):
install_scripts.finalize_options(self)
self.set_undefined_options('install',
('install_lib', 'install_lib'))
def run(self):
install_scripts.run(self)
if (os.path.splitdrive(self.install_dir)[0] !=
os.path.splitdrive(self.install_lib)[0]):
# can't make relative paths from one drive to another, so use an
# absolute path instead
libdir = self.install_lib
else:
common = os.path.commonprefix((self.install_dir, self.install_lib))
rest = self.install_dir[len(common):]
uplevel = len([n for n in os.path.split(rest) if n])
libdir = uplevel * ('..' + os.sep) + self.install_lib[len(common):]
for outfile in self.outfiles:
Dan Villiom Podlaski Christiansen
explicitly close files...
r13400 fp = open(outfile, 'rb')
data = fp.read()
fp.close()
Dan Villiom Podlaski Christiansen
setup/hg: always load Mercurial from where it was installed....
r12661
# skip binary files
Simon Heimberg
setup: support executing with python3 including 2to3...
r15494 if b('\0') in data:
Dan Villiom Podlaski Christiansen
setup/hg: always load Mercurial from where it was installed....
r12661 continue
Patrick Mezard
setup.py: write libdir as a python string literal
r12676 data = data.replace('@LIBDIR@', libdir.encode('string_escape'))
Dan Villiom Podlaski Christiansen
explicitly close files...
r13400 fp = open(outfile, 'wb')
fp.write(data)
fp.close()
Dan Villiom Podlaski Christiansen
setup/hg: always load Mercurial from where it was installed....
r12661
Simon Heimberg
setup: subclass build command
r15460 cmdclass = {'build': hgbuild,
'build_mo': hgbuildmo,
Christian Boos
setup: ignore failures to build optional inotify extension
r11468 'build_ext': hgbuildext,
Dan Villiom Podlaski Christiansen
setup/hg: always load Mercurial from where it was installed....
r12661 'build_py': hgbuildpy,
Yuya Nishihara
setup: add command to generate index of extensions...
r14538 'build_hgextindex': buildhgextindex,
Adrian Buehlmann
setup: compile hg.exe...
r17061 'install_scripts': hginstallscripts,
'build_hgexe': buildhgexe,
}
Thomas Arendsen Hein
Applied coding style to setup.py
r3238
Augie Fackler
httpclient: omit tests for the client since we don't run them anyway
r16775 packages = ['mercurial', 'mercurial.hgweb', 'mercurial.httpclient',
Na'Tosha Bard
setup: add largefiles to list of packages
r15215 'hgext', 'hgext.convert', 'hgext.highlight', 'hgext.zeroconf',
'hgext.largefiles']
Benoit Boissinot
Do not use osutil.c with python 2.4 and Windows (issue1364)...
r10521
pymodules = []
Martin Geisler
setup: cleanup coding style
r10000 extmodules = [
Bryan O'Sullivan
manifest: improve parsing performance by 8x via a new C extension
r6389 Extension('mercurial.base85', ['mercurial/base85.c']),
Bryan O'Sullivan
Add osutil module, containing a listdir function....
r5396 Extension('mercurial.bdiff', ['mercurial/bdiff.c']),
Bryan O'Sullivan
manifest: improve parsing performance by 8x via a new C extension
r6389 Extension('mercurial.diffhelpers', ['mercurial/diffhelpers.c']),
Extension('mercurial.mpatch', ['mercurial/mpatch.c']),
Adrian Buehlmann
pathencode: new C module with fast encodedir() function...
r17606 Extension('mercurial.parsers', ['mercurial/parsers.c',
'mercurial/pathencode.c']),
Bryan O'Sullivan
Add osutil module, containing a listdir function....
r5396 ]
Dan Villiom Podlaski Christiansen
util: add Mac-specific check whether we're in a GUI session (issue2553)...
r13734 osutil_ldflags = []
if sys.platform == 'darwin':
osutil_ldflags += ['-framework', 'ApplicationServices']
Benoit Boissinot
Do not use osutil.c with python 2.4 and Windows (issue1364)...
r10521 # disable osutil.c under windows + python 2.4 (issue1364)
if sys.platform == 'win32' and sys.version_info < (2, 5, 0, 'final'):
pymodules.append('mercurial.pure.osutil')
else:
Dan Villiom Podlaski Christiansen
util: add Mac-specific check whether we're in a GUI session (issue2553)...
r13734 extmodules.append(Extension('mercurial.osutil', ['mercurial/osutil.c'],
extra_link_args=osutil_ldflags))
Bryan O'Sullivan
Add inotify extension
r6239
Bryan O'Sullivan
setup: disable -mno-cygwin if building under mingw32...
r17121 # the -mno-cygwin option has been deprecated for years
Mingw32CCompiler = cygwinccompiler.Mingw32CCompiler
class HackedMingw32CCompiler(cygwinccompiler.Mingw32CCompiler):
def __init__(self, *args, **kwargs):
Mingw32CCompiler.__init__(self, *args, **kwargs)
for i in 'compiler compiler_so linker_exe linker_so'.split():
try:
getattr(self, i).remove('-mno-cygwin')
except ValueError:
pass
cygwinccompiler.Mingw32CCompiler = HackedMingw32CCompiler
Nikolaj Sjujskij
building: build inotify for sys.platform='linux*'...
r15163 if sys.platform.startswith('linux') and os.uname()[2] > '2.6':
Martin Geisler
setup: cleanup old left-over code
r8283 # The inotify extension is only usable with Linux 2.6 kernels.
# You also need a reasonably recent C library.
Christian Boos
setup: ignore failures to build optional inotify extension
r11468 # In any case, if it fails to build the error will be skipped ('optional').
Martin Geisler
setup: cleanup old left-over code
r8283 cc = new_compiler()
Martin Geisler
setup: cleanup coding style
r10000 if hasfunction(cc, 'inotify_add_watch'):
Christian Boos
setup: ignore failures to build optional inotify extension
r11468 inotify = Extension('hgext.inotify.linux._inotify',
Renato Cunha
setup.py: Add 'mercurial' as include dir for the inotify compiler....
r11533 ['hgext/inotify/linux/_inotify.c'],
['mercurial'])
Christian Boos
setup: ignore failures to build optional inotify extension
r11468 inotify.optional = True
extmodules.append(inotify)
Martin Geisler
setup: cleanup old left-over code
r8283 packages.extend(['hgext.inotify', 'hgext.inotify.linux'])
Bryan O'Sullivan
Add osutil module, containing a listdir function....
r5396
Dan Villiom Podlaski Christiansen
setup: install translation files as package data...
r9999 packagedata = {'mercurial': ['locale/*/LC_MESSAGES/hg.mo',
'help/*.txt']}
def ordinarypath(p):
return p and p[0] != '.' and p[-1] != '~'
Matt Mackall
many, many trivial check-code fixups
r10282 for root in ('templates',):
Dan Villiom Podlaski Christiansen
setup: install translation files as package data...
r9999 for curdir, dirs, files in os.walk(os.path.join('mercurial', root)):
curdir = curdir.split(os.sep, 1)[1]
dirs[:] = filter(ordinarypath, dirs)
for f in filter(ordinarypath, files):
f = os.path.join(curdir, f)
packagedata['mercurial'].append(f)
Martin Geisler
i18n: let Makefile generate i18n/hg.pot...
r7648 datafiles = []
Adrian Buehlmann
setup.py: fixing version info for Windows hg.exe (py2exe)...
r10400 setupversion = version
extra = {}
if py2exeloaded:
extra['console'] = [
{'script':'hg',
'copyright':'Copyright (C) 2005-2010 Matt Mackall and others',
'product_version':version}]
Yuya Nishihara
setup: add command to generate index of extensions...
r14538 # sub command of 'build' because 'py2exe' does not handle sub_commands
build.sub_commands.insert(0, ('build_hgextindex', None))
Adrian Buehlmann
setup.py: fixing version info for Windows hg.exe (py2exe)...
r10400
if os.name == 'nt':
# Windows binary file versions for exe/dll files must have the
# form W.X.Y.Z, where W,X,Y,Z are numbers in the range 0..65535
setupversion = version.split('+', 1)[0]
Martin Geisler
i18n: let Makefile generate i18n/hg.pot...
r7648
Alexander Solovyov
fix compiling of extensions for OS X and XCode 4.0
r13583 if sys.platform == 'darwin' and os.path.exists('/usr/bin/xcodebuild'):
# XCode 4.0 dropped support for ppc architecture, which is hardcoded in
# distutils.sysconfig
Greg Ward
setup: handle output from Apple's Xcode 4.3 better (issue3277)...
r16187 version = runcmd(['/usr/bin/xcodebuild', '-version'], {})[0].splitlines()
if version:
Brendan Cully
setup.py: don't call splitlines twice on the output of xcodebuild (issue3277)
r16209 version = version[0]
Greg Ward
setup: handle output from Apple's Xcode 4.3 better (issue3277)...
r16187 xcode4 = (version.startswith('Xcode') and
StrictVersion(version.split()[1]) >= StrictVersion('4.0'))
else:
# xcodebuild returns empty on OS X Lion with XCode 4.3 not
# installed, but instead with only command-line tools. Assume
# that only happens on >= Lion, thus no PPC support.
xcode4 = True
if xcode4:
Brendan Cully
Hardcoding ARCHFLAGS breaks the build against fink's python...
r14324 os.environ['ARCHFLAGS'] = ''
Alexander Solovyov
fix compiling of extensions for OS X and XCode 4.0
r13583
Thomas Arendsen Hein
Don't forget version at the end of setup.py, write it only if changed....
r1977 setup(name='mercurial',
Adrian Buehlmann
setup.py: fixing version info for Windows hg.exe (py2exe)...
r10400 version=setupversion,
Benoit Boissinot
setup.py: add metadata to register package to PyPI...
r18753 author='Matt Mackall and many others',
author_email='mercurial@selenic.com',
Dirkjan Ochtman
change wiki/bts URLs to point to new hostname
r8936 url='http://mercurial.selenic.com/',
Benoit Boissinot
setup.py: add metadata to register package to PyPI...
r18753 download_url='http://mercurial.selenic.com/release/',
description=('Fast scalable distributed SCM (revision control, version '
'control) system'),
long_description=('Mercurial is a distributed SCM tool written in Python.'
' It is used by a number of large projects that require'
' fast, reliable distributed revision control, such as '
'Mozilla.'),
license='GNU GPLv2 or any later version',
classifiers=[
'Development Status :: 6 - Mature',
'Environment :: Console',
'Intended Audience :: Developers',
'Intended Audience :: System Administrators',
'License :: OSI Approved :: GNU General Public License (GPL)',
'Natural Language :: Danish',
'Natural Language :: English',
'Natural Language :: German',
'Natural Language :: Italian',
'Natural Language :: Japanese',
'Natural Language :: Portuguese (Brazilian)',
'Operating System :: Microsoft :: Windows',
'Operating System :: OS Independent',
'Operating System :: POSIX',
'Programming Language :: C',
'Programming Language :: Python',
'Topic :: Software Development :: Version Control',
],
Paul Moore
Add a batch file driver for Windows
r6513 scripts=scripts,
Bryan O'Sullivan
Add inotify extension
r6239 packages=packages,
Benoit Boissinot
Do not use osutil.c with python 2.4 and Windows (issue1364)...
r10521 py_modules=pymodules,
Martin Geisler
setup: cleanup coding style
r10000 ext_modules=extmodules,
Martin Geisler
i18n: let Makefile generate i18n/hg.pot...
r7648 data_files=datafiles,
Dan Villiom Podlaski Christiansen
setup: install translation files as package data...
r9999 package_data=packagedata,
Thomas Arendsen Hein
Applied coding style to setup.py
r3238 cmdclass=cmdclass,
Simon Heimberg
setup: subclass distribution instead of overwriting original
r15458 distclass=hgdist,
Paul Moore
Force email package to be loaded in py2exe...
r6789 options=dict(py2exe=dict(packages=['hgext', 'email']),
Lee Cantey
Fix for including hgext in Windows compiled version....
r4628 bdist_mpkg=dict(zipdist=True,
Thomas Arendsen Hein
Applied coding style to setup.py
r3238 license='COPYING',
readme='contrib/macosx/Readme.html',
welcome='contrib/macosx/Welcome.html')),
Matt Mackall
Fix setup.py warning
r3893 **extra)