Przeglądaj źródła

Fix compilation with XCode 4 and older versions of Python.

Daniele Sluijters 14 lat temu
rodzic
commit
abee4618eb
2 zmienionych plików z 26 dodań i 1 usunięć
  1. 3 0
      NEWS
  2. 23 1
      setup.py

+ 3 - 0
NEWS

@@ -15,6 +15,9 @@
   * write_tree_diff() now supports submodules.
     (Jelmer Vernooij)
 
+  * Fix compilation for XCode 4 and older versions of distutils.sysconfig.
+    (Daniele Sluijters)
+
  IMPROVEMENTS
 
   * Sphinxified documentation. (Lukasz Balcerzak)

+ 23 - 1
setup.py

@@ -12,6 +12,7 @@ dulwich_version_string = '0.7.1'
 
 include_dirs = []
 # Windows MSVC support
+import os
 import sys
 if sys.platform == 'win32':
     include_dirs.append('dulwich')
@@ -32,7 +33,28 @@ class DulwichDistribution(Distribution):
 
     pure = False
 
-        
+def runcmd(cmd, env):
+    import subprocess
+    p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+                         stderr=subprocess.PIPE, env=env)
+    out, err = p.communicate()
+    err = [e for e in err.splitlines()
+           if not e.startswith('Not trusting file') \
+              and not e.startswith('warning: Not importing')]
+    if err:
+        return ''
+    return out
+
+
+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
+    version = runcmd(['/usr/bin/xcodebuild', '-version'], {}).splitlines()[0]
+    # Also parse only first digit, because 3.2.1 can't be parsed nicely
+    if (version.startswith('Xcode') and
+        int(version.split()[1].split('.')[0]) >= 4):
+        os.environ['ARCHFLAGS'] = '-arch i386 -arch x86_64'
+
 setup(name='dulwich',
       description='Python Git Library',
       keywords='git',