59 except ImportError: |
59 except ImportError: |
60 raise SystemExit( |
60 raise SystemExit( |
61 "Couldn't import standard bz2 (incomplete Python install).") |
61 "Couldn't import standard bz2 (incomplete Python install).") |
62 |
62 |
63 import os, subprocess, time |
63 import os, subprocess, time |
|
64 import re |
64 import shutil |
65 import shutil |
65 import tempfile |
66 import tempfile |
66 from distutils import log |
67 from distutils import log |
67 from distutils.core import setup, Command, Extension |
68 from distutils.core import setup, Command, Extension |
68 from distutils.dist import Distribution |
69 from distutils.dist import Distribution |
71 from distutils.command.build_py import build_py |
72 from distutils.command.build_py import build_py |
72 from distutils.command.install_scripts import install_scripts |
73 from distutils.command.install_scripts import install_scripts |
73 from distutils.spawn import spawn, find_executable |
74 from distutils.spawn import spawn, find_executable |
74 from distutils import cygwinccompiler |
75 from distutils import cygwinccompiler |
75 from distutils.errors import CCompilerError, DistutilsExecError |
76 from distutils.errors import CCompilerError, DistutilsExecError |
76 from distutils.sysconfig import get_python_inc |
77 from distutils.sysconfig import get_python_inc, get_config_var |
77 from distutils.version import StrictVersion |
78 from distutils.version import StrictVersion |
78 |
79 |
79 convert2to3 = '--c2to3' in sys.argv |
80 convert2to3 = '--c2to3' in sys.argv |
80 if convert2to3: |
81 if convert2to3: |
81 try: |
82 try: |
503 # Windows binary file versions for exe/dll files must have the |
504 # Windows binary file versions for exe/dll files must have the |
504 # form W.X.Y.Z, where W,X,Y,Z are numbers in the range 0..65535 |
505 # form W.X.Y.Z, where W,X,Y,Z are numbers in the range 0..65535 |
505 setupversion = version.split('+', 1)[0] |
506 setupversion = version.split('+', 1)[0] |
506 |
507 |
507 if sys.platform == 'darwin' and os.path.exists('/usr/bin/xcodebuild'): |
508 if sys.platform == 'darwin' and os.path.exists('/usr/bin/xcodebuild'): |
508 # XCode 4.0 dropped support for ppc architecture, which is hardcoded in |
|
509 # distutils.sysconfig |
|
510 version = runcmd(['/usr/bin/xcodebuild', '-version'], {})[0].splitlines() |
509 version = runcmd(['/usr/bin/xcodebuild', '-version'], {})[0].splitlines() |
511 if version: |
510 if version: |
512 version = version[0] |
511 version = version[0] |
513 xcode4 = (version.startswith('Xcode') and |
512 xcode4 = (version.startswith('Xcode') and |
514 StrictVersion(version.split()[1]) >= StrictVersion('4.0')) |
513 StrictVersion(version.split()[1]) >= StrictVersion('4.0')) |
|
514 xcode51 = re.match(r'^Xcode\s+5\.1\.', version) is not None |
515 else: |
515 else: |
516 # xcodebuild returns empty on OS X Lion with XCode 4.3 not |
516 # xcodebuild returns empty on OS X Lion with XCode 4.3 not |
517 # installed, but instead with only command-line tools. Assume |
517 # installed, but instead with only command-line tools. Assume |
518 # that only happens on >= Lion, thus no PPC support. |
518 # that only happens on >= Lion, thus no PPC support. |
519 xcode4 = True |
519 xcode4 = True |
520 |
520 xcode51 = False |
|
521 |
|
522 # XCode 4.0 dropped support for ppc architecture, which is hardcoded in |
|
523 # distutils.sysconfig |
521 if xcode4: |
524 if xcode4: |
522 os.environ['ARCHFLAGS'] = '' |
525 os.environ['ARCHFLAGS'] = '' |
|
526 |
|
527 # XCode 5.1 changes clang such that it now fails to compile if the |
|
528 # -mno-fused-madd flag is passed, but the version of Python shipped with |
|
529 # OS X 10.9 Mavericks includes this flag. This causes problems in all |
|
530 # C extension modules, and a bug has been filed upstream at |
|
531 # http://bugs.python.org/issue21244. We also need to patch this here |
|
532 # so Mercurial can continue to compile in the meantime. |
|
533 if xcode51: |
|
534 cflags = get_config_var('CFLAGS') |
|
535 if re.search(r'-mno-fused-madd\b', cflags) is not None: |
|
536 os.environ['CFLAGS'] = ( |
|
537 os.environ.get('CFLAGS', '') + ' -Qunused-arguments') |
523 |
538 |
524 setup(name='mercurial', |
539 setup(name='mercurial', |
525 version=setupversion, |
540 version=setupversion, |
526 author='Matt Mackall and many others', |
541 author='Matt Mackall and many others', |
527 author_email='mercurial@selenic.com', |
542 author_email='mercurial@selenic.com', |