diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst index a7db455d685..995b76748e1 100644 --- a/Doc/distutils/apiref.rst +++ b/Doc/distutils/apiref.rst @@ -1112,7 +1112,10 @@ other utility module. the univeral binary status instead of the architecture of the current processor. For 32-bit universal binaries the architecture is ``fat``, for 64-bit universal binaries the architecture is ``fat64``, and - for 4-way universal binaries the architecture is ``universal``. + for 4-way universal binaries the architecture is ``universal``. Starting + from Python 2.7 and Python 3.2 the architecture ``fat3`` is used for + a 3-way universal build (ppc, i386, x86_64) and ``intel`` is used for + a univeral build with the i386 and x86_64 architectures Examples of returned values on Mac OS X: @@ -1122,6 +1125,8 @@ other utility module. * ``macosx-10.5-universal`` + * ``macosx-10.6-intel`` + .. % XXX isn't this also provided by some other non-distutils module? diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py index e9d29ff49c0..ee5829b0775 100644 --- a/Lib/distutils/util.py +++ b/Lib/distutils/util.py @@ -142,11 +142,26 @@ def get_platform (): machine = 'fat' cflags = get_config_vars().get('CFLAGS') - if '-arch x86_64' in cflags: - if '-arch i386' in cflags: - machine = 'universal' - else: - machine = 'fat64' + archs = re.findall('-arch\s+(\S+)', cflags) + archs.sort() + archs = tuple(archs) + + if len(archs) == 1: + machine = archs[0] + elif archs == ('i386', 'ppc'): + machine = 'fat' + elif archs == ('i386', 'x86_64'): + machine = 'intel' + elif archs == ('i386', 'ppc', 'x86_64'): + machine = 'fat3' + elif archs == ('ppc64', 'x86_64'): + machine = 'fat64' + elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'): + machine = 'universal' + else: + raise ValueError( + "Don't know machine value for archs=%r"%(archs,)) + elif machine in ('PowerPC', 'Power_Macintosh'): # Pick a sane name for the PPC architecture.