From 870317825822c856490a32eee037fec8057690b1 Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Sun, 2 May 2021 20:28:43 -0400 Subject: bpo-43568: Drop support for MACOSX_DEPLOYMENT_TARGET < 10.3 (GH-25827) Only complain if the config target is >= 10.3 and the current target is < 10.3. The check was originally added to ensure that incompatible LDSHARED flags are not used, because -undefined dynamic_lookup is used when building for 10.3 and later, and is not supported on older OS versions. Apart from that, there should be no problem in general with using an older target. Authored-by: Joshua Root --- Lib/_osx_support.py | 4 ++-- Lib/distutils/spawn.py | 14 +++++++++----- Lib/test/test_posix.py | 2 +- .../next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst | 1 + configure | 14 +------------- configure.ac | 14 +------------- 6 files changed, 15 insertions(+), 34 deletions(-) create mode 100644 Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst diff --git a/Lib/_osx_support.py b/Lib/_osx_support.py index 72f4819..b7145ee 100644 --- a/Lib/_osx_support.py +++ b/Lib/_osx_support.py @@ -525,10 +525,10 @@ def get_platform_osx(_config_vars, osname, release, machine): try: macrelease = tuple(int(i) for i in macrelease.split('.')[0:2]) except ValueError: - macrelease = (10, 0) + macrelease = (10, 3) else: # assume no universal support - macrelease = (10, 0) + macrelease = (10, 3) if (macrelease >= (10, 4)) and '-arch' in cflags.strip(): # The universal build will build fat binaries, but not on diff --git a/Lib/distutils/spawn.py b/Lib/distutils/spawn.py index 0d1bd03..31df3f7 100644 --- a/Lib/distutils/spawn.py +++ b/Lib/distutils/spawn.py @@ -59,13 +59,17 @@ def spawn(cmd, search_path=1, verbose=0, dry_run=0): if _cfg_target: _cfg_target_split = [int(x) for x in _cfg_target.split('.')] if _cfg_target: - # ensure that the deployment target of build process is not less - # than that used when the interpreter was built. This ensures - # extension modules are built with correct compatibility values + # Ensure that the deployment target of the build process is not + # less than 10.3 if the interpreter was built for 10.3 or later. + # This ensures extension modules are built with correct + # compatibility values, specifically LDSHARED which can use + # '-undefined dynamic_lookup' which only works on >= 10.3. cur_target = os.environ.get('MACOSX_DEPLOYMENT_TARGET', _cfg_target) - if _cfg_target_split > [int(x) for x in cur_target.split('.')]: + cur_target_split = [int(x) for x in cur_target.split('.')] + if _cfg_target_split[:2] >= [10, 3] and cur_target_split[:2] < [10, 3]: my_msg = ('$MACOSX_DEPLOYMENT_TARGET mismatch: ' - 'now "%s" but "%s" during configure' + 'now "%s" but "%s" during configure;' + 'must use 10.3 or later' % (cur_target, _cfg_target)) raise DistutilsPlatformError(my_msg) env = dict(os.environ, diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index 93611f0..e466688 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -1070,7 +1070,7 @@ class PosixTester(unittest.TestCase): # Issues 16698: OS X ABIs prior to 10.6 have limits on getgroups() if sys.platform == 'darwin': import sysconfig - dt = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') or '10.0' + dt = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') or '10.3' if tuple(int(n) for n in dt.split('.')[0:2]) < (10, 6): raise unittest.SkipTest("getgroups(2) is broken prior to 10.6") diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst b/Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst new file mode 100644 index 0000000..3bc9b0b --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst @@ -0,0 +1 @@ +Drop support for MACOSX_DEPLOYMENT_TARGET < 10.3 diff --git a/configure b/configure index 86591e2..e3e6dad 100755 --- a/configure +++ b/configure @@ -9656,19 +9656,7 @@ then test ${dep_target_minor} -le 2 then # building for OS X 10.0 through 10.2 - LDSHARED='$(CC) -bundle' - LDCXXSHARED='$(CXX) -bundle' - if test "$enable_framework" ; then - # Link against the framework. All externals should be defined. - BLDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' - LDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' - LDCXXSHARED="$LDCXXSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' - else - # No framework, use the Python app as bundle-loader - BLDSHARED="$LDSHARED "'-bundle_loader $(BUILDPYTHON)' - LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)' - LDCXXSHARED="$LDCXXSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)' - fi + as_fn_error $? "MACOSX_DEPLOYMENT_TARGET too old ($MACOSX_DEPLOYMENT_TARGET), only 10.3 or later is supported" "$LINENO" 5 else # building for OS X 10.3 and later LDSHARED='$(CC) -bundle -undefined dynamic_lookup' diff --git a/configure.ac b/configure.ac index 0ea9ecf..366ab2c 100644 --- a/configure.ac +++ b/configure.ac @@ -2651,19 +2651,7 @@ then test ${dep_target_minor} -le 2 then # building for OS X 10.0 through 10.2 - LDSHARED='$(CC) -bundle' - LDCXXSHARED='$(CXX) -bundle' - if test "$enable_framework" ; then - # Link against the framework. All externals should be defined. - BLDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' - LDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' - LDCXXSHARED="$LDCXXSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' - else - # No framework, use the Python app as bundle-loader - BLDSHARED="$LDSHARED "'-bundle_loader $(BUILDPYTHON)' - LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)' - LDCXXSHARED="$LDCXXSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)' - fi + AC_MSG_ERROR([MACOSX_DEPLOYMENT_TARGET too old ($MACOSX_DEPLOYMENT_TARGET), only 10.3 or later is supported]) else # building for OS X 10.3 and later LDSHARED='$(CC) -bundle -undefined dynamic_lookup' -- cgit v0.12