summaryrefslogtreecommitdiffstats
path: root/Lib/distutils
diff options
context:
space:
mode:
authorPaul Monson <paulmon@users.noreply.github.com>2019-04-25 18:36:45 (GMT)
committerSteve Dower <steve.dower@python.org>2019-04-25 18:36:45 (GMT)
commit62dfd7d6fe11bfa0cd1d7376382c8e7b1275e38c (patch)
treef59fcebb25702acbde504865f1a483ab7ac80954 /Lib/distutils
parent8c3ecc6bacc8d0cd534f2b5b53ed962dd1368c7b (diff)
downloadcpython-62dfd7d6fe11bfa0cd1d7376382c8e7b1275e38c.zip
cpython-62dfd7d6fe11bfa0cd1d7376382c8e7b1275e38c.tar.gz
cpython-62dfd7d6fe11bfa0cd1d7376382c8e7b1275e38c.tar.bz2
bpo-35920: Windows 10 ARM32 platform support (GH-11774)
Diffstat (limited to 'Lib/distutils')
-rw-r--r--Lib/distutils/_msvccompiler.py16
-rw-r--r--Lib/distutils/spawn.py2
-rw-r--r--Lib/distutils/sysconfig.py1
-rw-r--r--Lib/distutils/util.py16
4 files changed, 29 insertions, 6 deletions
diff --git a/Lib/distutils/_msvccompiler.py b/Lib/distutils/_msvccompiler.py
index 58b20a2..c7ac3f0 100644
--- a/Lib/distutils/_msvccompiler.py
+++ b/Lib/distutils/_msvccompiler.py
@@ -89,13 +89,24 @@ def _find_vc2017():
return None, None
+PLAT_SPEC_TO_RUNTIME = {
+ 'x86' : 'x86',
+ 'x86_amd64' : 'x64',
+ 'x86_arm' : 'arm',
+}
+
def _find_vcvarsall(plat_spec):
_, best_dir = _find_vc2017()
vcruntime = None
- vcruntime_plat = 'x64' if 'amd64' in plat_spec else 'x86'
+
+ if plat_spec in PLAT_SPEC_TO_RUNTIME:
+ vcruntime_plat = PLAT_SPEC_TO_RUNTIME[plat_spec]
+ else:
+ vcruntime_plat = 'x64' if 'amd64' in plat_spec else 'x86'
+
if best_dir:
vcredist = os.path.join(best_dir, "..", "..", "redist", "MSVC", "**",
- "Microsoft.VC141.CRT", "vcruntime140.dll")
+ vcruntime_plat, "Microsoft.VC141.CRT", "vcruntime140.dll")
try:
import glob
vcruntime = glob.glob(vcredist, recursive=True)[-1]
@@ -178,6 +189,7 @@ def _find_exe(exe, paths=None):
PLAT_TO_VCVARS = {
'win32' : 'x86',
'win-amd64' : 'x86_amd64',
+ 'win-arm32' : 'x86_arm',
}
# A set containing the DLLs that are guaranteed to be available for
diff --git a/Lib/distutils/spawn.py b/Lib/distutils/spawn.py
index d3a12c2..ceb9494 100644
--- a/Lib/distutils/spawn.py
+++ b/Lib/distutils/spawn.py
@@ -81,7 +81,6 @@ def _spawn_nt(cmd, search_path=1, verbose=0, dry_run=0):
"command %r failed with exit status %d" % (cmd, rc))
if sys.platform == 'darwin':
- from distutils import sysconfig
_cfg_target = None
_cfg_target_split = None
@@ -95,6 +94,7 @@ def _spawn_posix(cmd, search_path=1, verbose=0, dry_run=0):
if sys.platform == 'darwin':
global _cfg_target, _cfg_target_split
if _cfg_target is None:
+ from distutils import sysconfig
_cfg_target = sysconfig.get_config_var(
'MACOSX_DEPLOYMENT_TARGET') or ''
if _cfg_target:
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
index 570a612..b51629e 100644
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
@@ -15,6 +15,7 @@ import re
import sys
from .errors import DistutilsPlatformError
+from .util import get_platform, get_host_platform
# These are needed in a couple of spots, so just compute them once.
PREFIX = os.path.normpath(sys.prefix)
diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py
index 15cd2ad..50550e1 100644
--- a/Lib/distutils/util.py
+++ b/Lib/distutils/util.py
@@ -15,7 +15,7 @@ from distutils.spawn import spawn
from distutils import log
from distutils.errors import DistutilsByteCompileError
-def get_platform ():
+def get_host_platform():
"""Return a string that identifies the current platform. This is used mainly to
distinguish platform-specific build directories and platform-specific built
distributions. Typically includes the OS name and version and the
@@ -38,6 +38,8 @@ def get_platform ():
if os.name == 'nt':
if 'amd64' in sys.version.lower():
return 'win-amd64'
+ if '(arm)' in sys.version.lower():
+ return 'win-arm32'
return sys.platform
# Set for cross builds explicitly
@@ -90,8 +92,16 @@ def get_platform ():
return "%s-%s-%s" % (osname, release, machine)
-# get_platform ()
-
+def get_platform():
+ if os.name == 'nt':
+ TARGET_TO_PLAT = {
+ 'x86' : 'win32',
+ 'x64' : 'win-amd64',
+ 'arm' : 'win-arm32',
+ }
+ return TARGET_TO_PLAT.get(os.environ.get('VSCMD_ARG_TGT_ARCH')) or get_host_platform()
+ else:
+ return get_host_platform()
def convert_path (pathname):
"""Return 'pathname' as a name that will work on the native filesystem,