aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2021-01-31 20:22:48 -0800
committerGitHub <noreply@github.com>2021-01-31 23:22:48 -0500
commitd6675fee1aac1af87dc31c411d04a5bfc1f39079 (patch)
tree153f7fd38eac23720b3046c8d3b172000d84ea9a
parent[3.9] bpo-41604: Don't decrement the reference count of the previous user_ptr... (diff)
downloadcpython-d6675fee1aac1af87dc31c411d04a5bfc1f39079.tar.gz
cpython-d6675fee1aac1af87dc31c411d04a5bfc1f39079.tar.bz2
cpython-d6675fee1aac1af87dc31c411d04a5bfc1f39079.zip
bpo-42504: Ensure that get_config_var('MACOSX_DEPLOYMENT_TARGET') is a string (GH-24341) (GH-24410)
* bpo-42504: Ensure that get_config_var('MACOSX_DEPLOYMENT_TARGET') is a string (cherry picked from commit 49926cf2bcc8b44d9b8f148d81979ada191dd9d5) Co-authored-by: Ronald Oussoren <ronaldoussoren@mac.com>
-rw-r--r--Lib/distutils/spawn.py4
-rw-r--r--Lib/distutils/tests/test_build_ext.py4
-rw-r--r--Lib/sysconfig.py12
-rw-r--r--Lib/test/test_posix.py2
-rw-r--r--Misc/NEWS.d/next/macOS/2021-01-26-14-36-11.bpo-42504.ZxWt71.rst3
-rw-r--r--setup.py2
6 files changed, 21 insertions, 6 deletions
diff --git a/Lib/distutils/spawn.py b/Lib/distutils/spawn.py
index f50edd2da9..0d1bd0391e 100644
--- a/Lib/distutils/spawn.py
+++ b/Lib/distutils/spawn.py
@@ -54,8 +54,8 @@ def spawn(cmd, search_path=1, verbose=0, dry_run=0):
global _cfg_target, _cfg_target_split
if _cfg_target is None:
from distutils import sysconfig
- _cfg_target = str(sysconfig.get_config_var(
- 'MACOSX_DEPLOYMENT_TARGET') or '')
+ _cfg_target = sysconfig.get_config_var(
+ 'MACOSX_DEPLOYMENT_TARGET') or ''
if _cfg_target:
_cfg_target_split = [int(x) for x in _cfg_target.split('.')]
if _cfg_target:
diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py
index 1b034c9302..808c0dc287 100644
--- a/Lib/distutils/tests/test_build_ext.py
+++ b/Lib/distutils/tests/test_build_ext.py
@@ -455,7 +455,7 @@ class BuildExtTestCase(TempdirManager,
deptarget = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET')
if deptarget:
# increment the minor version number (i.e. 10.6 -> 10.7)
- deptarget = [int(x) for x in str(deptarget).split('.')]
+ deptarget = [int(x) for x in deptarget.split('.')]
deptarget[-1] += 1
deptarget = '.'.join(str(i) for i in deptarget)
self._try_compile_deployment_target('<', deptarget)
@@ -488,7 +488,7 @@ 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, str(target).split('.')[0:2]))
+ 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.
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
index 59da8e5290..e3f79bfde5 100644
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
@@ -18,6 +18,11 @@ __all__ = [
'parse_config_h',
]
+# Keys for get_config_var() that are never converted to Python integers.
+_ALWAYS_STR = {
+ 'MACOSX_DEPLOYMENT_TARGET',
+}
+
_INSTALL_SCHEMES = {
'posix_prefix': {
'stdlib': '{installed_base}/{platlibdir}/python{py_version_short}',
@@ -240,6 +245,9 @@ def _parse_makefile(filename, vars=None):
notdone[n] = v
else:
try:
+ if n in _ALWAYS_STR:
+ raise ValueError
+
v = int(v)
except ValueError:
# insert literal `$'
@@ -298,6 +306,8 @@ def _parse_makefile(filename, vars=None):
notdone[name] = value
else:
try:
+ if name in _ALWAYS_STR:
+ raise ValueError
value = int(value)
except ValueError:
done[name] = value.strip()
@@ -459,6 +469,8 @@ def parse_config_h(fp, vars=None):
if m:
n, v = m.group(1, 2)
try:
+ if n in _ALWAYS_STR:
+ raise ValueError
v = int(v)
except ValueError:
pass
diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py
index bfbcbab3b6..f4edb8bd95 100644
--- a/Lib/test/test_posix.py
+++ b/Lib/test/test_posix.py
@@ -1045,7 +1045,7 @@ class PosixTester(unittest.TestCase):
if sys.platform == 'darwin':
import sysconfig
dt = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') or '10.0'
- if tuple(int(n) for n in str(dt).split('.')[0:2]) < (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/Misc/NEWS.d/next/macOS/2021-01-26-14-36-11.bpo-42504.ZxWt71.rst b/Misc/NEWS.d/next/macOS/2021-01-26-14-36-11.bpo-42504.ZxWt71.rst
new file mode 100644
index 0000000000..a47776effe
--- /dev/null
+++ b/Misc/NEWS.d/next/macOS/2021-01-26-14-36-11.bpo-42504.ZxWt71.rst
@@ -0,0 +1,3 @@
+Ensure that the value of
+sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') is always a string,
+even in when the value is parsable as an integer.
diff --git a/setup.py b/setup.py
index bd5f736924..d42eb9d117 100644
--- a/setup.py
+++ b/setup.py
@@ -1013,7 +1013,7 @@ class PyBuildExt(build_ext):
os_release = int(os.uname()[2].split('.')[0])
dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET')
if (dep_target and
- (tuple(int(n) for n in str(dep_target).split('.')[0:2])
+ (tuple(int(n) for n in dep_target.split('.')[0:2])
< (10, 5) ) ):
os_release = 8
if os_release < 9: