From 04cdfa1147d5aadbee190b3aa2c4ccfd2d4a122d Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Wed, 25 Jun 2014 13:36:14 -0700 Subject: [PATCH] Issue #21811: Anticipated fixes to 3.x and 2.7 for OS X 10.10 Yosemite. --- Lib/_osx_support.py | 12 ++++++++++-- Lib/distutils/tests/test_build_ext.py | 12 ++++++++++-- Lib/test/test__osx_support.py | 4 +++- Lib/test/test_posix.py | 2 +- Mac/BuildScript/build-installer.py | 24 +++++++++++++----------- setup.py | 4 +++- 6 files changed, 40 insertions(+), 18 deletions(-) diff --git a/Lib/_osx_support.py b/Lib/_osx_support.py index b6eac5f6675..b07e75d0e8c 100644 --- a/Lib/_osx_support.py +++ b/Lib/_osx_support.py @@ -450,8 +450,16 @@ def get_platform_osx(_config_vars, osname, release, machine): # case and disallow installs. cflags = _config_vars.get(_INITPRE+'CFLAGS', _config_vars.get('CFLAGS', '')) - if ((macrelease + '.') >= '10.4.' and - '-arch' in cflags.strip()): + if macrelease: + try: + macrelease = tuple(int(i) for i in macrelease.split('.')[0:2]) + except ValueError: + macrelease = (10, 0) + else: + # assume no universal support + macrelease = (10, 0) + + if (macrelease >= (10, 4)) and '-arch' in cflags.strip(): # The universal build will build fat binaries, but not on # systems before 10.4 diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py index 9853abd4c5b..e9958667a48 100644 --- a/Lib/distutils/tests/test_build_ext.py +++ b/Lib/distutils/tests/test_build_ext.py @@ -444,8 +444,16 @@ class BuildExtTestCase(TempdirManager, # get the deployment target that the interpreter was built with target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') - target = tuple(map(int, target.split('.'))) - target = '%02d%01d0' % target + target = tuple(map(int, target.split('.')[0:2])) + # format the target value as defined in the Apple + # Availability Macros. We can't use the macro names since + # at least one value we test with will not exist yet. + if target[1] < 10: + # for 10.1 through 10.9.x -> "10n0" + target = '%02d%01d0' % target + else: + # for 10.10 and beyond -> "10nn00" + target = '%02d%02d00' % target deptarget_ext = Extension( 'deptarget', [deptarget_c], diff --git a/Lib/test/test__osx_support.py b/Lib/test/test__osx_support.py index fb159ecf413..5dcadf7a409 100644 --- a/Lib/test/test__osx_support.py +++ b/Lib/test/test__osx_support.py @@ -109,7 +109,9 @@ class Test_OSXSupport(unittest.TestCase): def test__supports_universal_builds(self): import platform - self.assertEqual(platform.mac_ver()[0].split('.') >= ['10', '4'], + mac_ver_tuple = tuple(int(i) for i in + platform.mac_ver()[0].split('.')[0:2]) + self.assertEqual(mac_ver_tuple >= (10, 4), _osx_support._supports_universal_builds()) def test__find_appropriate_compiler(self): diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index 9a5ee91f66a..fdf5948d108 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -768,7 +768,7 @@ class PosixTester(unittest.TestCase): if sys.platform == 'darwin': import sysconfig dt = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') or '10.0' - if float(dt) < 10.6: + if tuple(int(n) for n in dt.split('.')[0:2]) < (10, 6): raise unittest.SkipTest("getgroups(2) is broken prior to 10.6") # 'id -G' and 'os.getgroups()' should return the same diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index 74c274646a9..199b560b654 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -150,17 +150,19 @@ SRCDIR = os.path.dirname( # $MACOSX_DEPLOYMENT_TARGET -> minimum OS X level DEPTARGET = '10.3' -target_cc_map = { +def getDeptargetTuple(): + return tuple([int(n) for n in DEPTARGET.split('.')[0:2]]) + +def getTargetCompilers(): + target_cc_map = { '10.3': ('gcc-4.0', 'g++-4.0'), '10.4': ('gcc-4.0', 'g++-4.0'), '10.5': ('gcc-4.2', 'g++-4.2'), '10.6': ('gcc-4.2', 'g++-4.2'), - '10.7': ('clang', 'clang++'), - '10.8': ('clang', 'clang++'), - '10.9': ('clang', 'clang++'), -} + } + return target_cc_map.get(DEPTARGET, ('clang', 'clang++') ) -CC, CXX = target_cc_map[DEPTARGET] +CC, CXX = getTargetCompilers() PYTHON_3 = getVersionTuple() >= (3, 0) @@ -193,10 +195,10 @@ EXPECTED_SHARED_LIBS = {} def library_recipes(): result = [] - LT_10_5 = bool(DEPTARGET < '10.5') + LT_10_5 = bool(getDeptargetTuple() < (10, 5)) # Disable for now - if False: # if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 5)): + if False: # if (getDeptargetTuple() > (10, 5)) and (getVersionTuple() >= (3, 5)): result.extend([ dict( name="Tcl 8.5.15", @@ -304,7 +306,7 @@ def library_recipes(): ), ]) - if DEPTARGET < '10.5': + if getDeptargetTuple() < (10, 5): result.extend([ dict( name="Bzip2 1.0.6", @@ -458,7 +460,7 @@ def pkg_recipes(): ) ) - if DEPTARGET < '10.4' and not PYTHON_3: + if getDeptargetTuple() < (10, 4) and not PYTHON_3: result.append( dict( name="PythonSystemFixes", @@ -679,7 +681,7 @@ def parseOptions(args=None): SDKPATH=os.path.abspath(SDKPATH) DEPSRC=os.path.abspath(DEPSRC) - CC, CXX=target_cc_map[DEPTARGET] + CC, CXX = getTargetCompilers() print("Settings:") print(" * Source directory:", SRCDIR) diff --git a/setup.py b/setup.py index c0bb513296e..c909261cbd1 100644 --- a/setup.py +++ b/setup.py @@ -697,7 +697,9 @@ class PyBuildExt(build_ext): if host_platform == 'darwin': os_release = int(os.uname()[2].split('.')[0]) dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') - if dep_target and dep_target.split('.') < ['10', '5']: + if (dep_target and + (tuple(int(n) for n in dep_target.split('.')[0:2]) + < (10, 5) ) ): os_release = 8 if os_release < 9: # MacOSX 10.4 has a broken readline. Don't try to build