]> granicus.if.org Git - python/commitdiff
Issue #19400: Prevent extension module build failures with Xcode 5 on OS X
authorNed Deily <nad@acm.org>
Fri, 25 Oct 2013 23:03:35 +0000 (16:03 -0700)
committerNed Deily <nad@acm.org>
Fri, 25 Oct 2013 23:03:35 +0000 (16:03 -0700)
10.8+ when using a universal Python that included a PPC architecture,
such as with a python.org 32-bit-only binary installer.

Lib/_osx_support.py
Misc/NEWS

index 66566d0dd8a7208350644caa26302fd275f4f76d..50b2d17e90af6c4e72d0fc944333f8e35a5593a1 100644 (file)
@@ -235,13 +235,19 @@ def _remove_unsupported_archs(_config_vars):
     if re.search('-arch\s+ppc', _config_vars['CFLAGS']) is not None:
         # NOTE: Cannot use subprocess here because of bootstrap
         # issues when building Python itself
-        status = os.system("'%s' -arch ppc -x c /dev/null 2>/dev/null"%(
-            _config_vars['CC'].replace("'", "'\"'\"'"),))
-        # The Apple compiler drivers return status 255 if no PPC
-        if (status >> 8) == 255:
-            # Compiler doesn't support PPC, remove the related
-            # '-arch' flags if not explicitly overridden by an
-            # environment variable
+        status = os.system(
+            """echo 'int main{};' | """
+            """'%s' -c -arch ppc -x c -o /dev/null /dev/null 2>/dev/null"""
+            %(_config_vars['CC'].replace("'", "'\"'\"'"),))
+        if status:
+            # The compile failed for some reason.  Because of differences
+            # across Xcode and compiler versions, there is no reliable way
+            # to be sure why it failed.  Assume here it was due to lack of
+            # PPC support and remove the related '-arch' flags from each
+            # config variables not explicitly overriden by an environment
+            # variable.  If the error was for some other reason, we hope the
+            # failure will show up again when trying to compile an extension
+            # module.
             for cv in _UNIVERSAL_CONFIG_VARS:
                 if cv in _config_vars and cv not in os.environ:
                     flags = _config_vars[cv]
index 80464f7f93112e002b83302d3cb49f06b7ba6f01..cc5f3a2c2e1843b330b47f5694f5ed26a88e1da4 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -411,6 +411,10 @@ Library
   existing directory caused mkstemp and related APIs to fail instead of
   retrying. Report and fix by Vlad Shcherbina.
 
+- Issue #19400: Prevent extension module build failures with Xcode 5 on OS X
+  10.8+ when using a universal Python that included a PPC architecture,
+  such as with a python.org 32-bit-only binary installer.
+
 C API
 -----