From c39d76278334a0838f79655ba27bbe68bfec7f8f Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 30 Dec 2008 17:56:45 +0000 Subject: [PATCH] Merged revisions 67982,67988,67990 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r67982 | benjamin.peterson | 2008-12-28 09:37:31 -0600 (Sun, 28 Dec 2008) | 1 line fix WORD_BIGEDIAN declaration in Universal builds; fixes #4060 and #4728 ........ r67988 | ronald.oussoren | 2008-12-28 13:40:56 -0600 (Sun, 28 Dec 2008) | 1 line Issue4064: architecture string for universal builds on OSX ........ r67990 | ronald.oussoren | 2008-12-28 13:50:40 -0600 (Sun, 28 Dec 2008) | 3 lines Update the fix for issue4064 to deal correctly with all three variants of universal builds that are presented by the configure script. ........ --- Doc/distutils/apiref.rst | 18 ++++++++++++++++++ Include/pymacconfig.h | 14 ++++++++++++++ Lib/distutils/util.py | 22 ++++++++++++++++------ 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst index f2d863c79c5..c3148a647cc 100644 --- a/Doc/distutils/apiref.rst +++ b/Doc/distutils/apiref.rst @@ -1100,6 +1100,24 @@ other utility module. For non-POSIX platforms, currently just returns ``sys.platform``. + For MacOS X systems the OS version reflects the minimal version on which + binaries will run (that is, the value of ``MACOSX_DEPLOYMENT_TARGET`` + during the build of Python), not the OS version of the current system. + + For universal binary builds on MacOS X the architecture value reflects + 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``. + + Examples of returned values on MacOS X: + + * ``macosx-10.3-ppc`` + + * ``macosx-10.3-fat`` + + * ``macosx-10.5-universal`` + .. % XXX isn't this also provided by some other non-distutils module? diff --git a/Include/pymacconfig.h b/Include/pymacconfig.h index e864e72eb25..a8679af498f 100644 --- a/Include/pymacconfig.h +++ b/Include/pymacconfig.h @@ -15,6 +15,8 @@ # undef SIZEOF_SIZE_T # undef SIZEOF_TIME_T # undef SIZEOF_VOID_P +# undef SIZEOF__BOOL +# undef WORDS_BIGENDIAN # undef VA_LIST_IS_ARRAY # if defined(__LP64__) && defined(__x86_64__) @@ -28,12 +30,19 @@ # undef SIZEOF_LONG # ifdef __LP64__ +# define SIZEOF__BOOL 1 +# define SIZEOF__BOOL 1 # define SIZEOF_LONG 8 # define SIZEOF_PTHREAD_T 8 # define SIZEOF_SIZE_T 8 # define SIZEOF_TIME_T 8 # define SIZEOF_VOID_P 8 # else +# ifdef __ppc__ +# define SIZEOF__BOOL 4 +# else +# define SIZEOF__BOOL 1 +# endif # define SIZEOF_LONG 4 # define SIZEOF_PTHREAD_T 4 # define SIZEOF_SIZE_T 4 @@ -54,6 +63,11 @@ # endif +#ifdef __BIG_ENDIAN__ +#define WORDS_BIGENDIAN 1 +#endif /* __BIG_ENDIAN */ + + #endif /* defined(_APPLE__) */ #endif /* PYMACCONFIG_H */ diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py index 28337fa9a04..042306e9136 100644 --- a/Lib/distutils/util.py +++ b/Lib/distutils/util.py @@ -99,7 +99,11 @@ def get_platform (): if not macver: macver = cfgvars.get('MACOSX_DEPLOYMENT_TARGET') - if not macver: + if 1: + # Always calculate the release of the running machine, + # needed to determine if we can build fat binaries or not. + + macrelease = macver # Get the system version. Reading this plist is a documented # way to get the system version (see the documentation for # the Gestalt Manager) @@ -115,16 +119,18 @@ def get_platform (): r'(.*?)', f.read()) f.close() if m is not None: - macver = '.'.join(m.group(1).split('.')[:2]) + macrelease = '.'.join(m.group(1).split('.')[:2]) # else: fall back to the default behaviour + if not macver: + macver = macrelease + if macver: from distutils.sysconfig import get_config_vars release = macver osname = "macosx" - - if (release + '.') >= '10.4.' and \ + if (macrelease + '.') >= '10.4.' and \ '-arch' in get_config_vars().get('CFLAGS', '').strip(): # The universal build will build fat binaries, but not on # systems before 10.4 @@ -133,9 +139,13 @@ def get_platform (): # 'universal' instead of 'fat'. machine = 'fat' + cflags = get_config_vars().get('CFLAGS') - if '-arch x86_64' in get_config_vars().get('CFLAGS'): - machine = 'universal' + if '-arch x86_64' in cflags: + if '-arch i386' in cflags: + machine = 'universal' + else: + machine = 'fat64' elif machine in ('PowerPC', 'Power_Macintosh'): # Pick a sane name for the PPC architecture.