diff --git a/distutils/_msvccompiler.py b/distutils/_msvccompiler.py index e7652218..97b067c6 100644 --- a/distutils/_msvccompiler.py +++ b/distutils/_msvccompiler.py @@ -284,7 +284,7 @@ def initialize(self, plat_name=None): f"--plat-name must be one of {tuple(_vcvars_names)}" ) - plat_spec = _get_vcvars_spec(get_host_platform(), get_platform()) + plat_spec = _get_vcvars_spec(get_host_platform(), plat_name) vc_env = _get_vc_env(plat_spec) if not vc_env: diff --git a/distutils/tests/test_msvccompiler.py b/distutils/tests/test_msvccompiler.py index 71129cae..028dcdf5 100644 --- a/distutils/tests/test_msvccompiler.py +++ b/distutils/tests/test_msvccompiler.py @@ -2,11 +2,13 @@ import os import sys +import sysconfig import threading import unittest.mock as mock from distutils import _msvccompiler from distutils.errors import DistutilsPlatformError from distutils.tests import support +from distutils.util import get_platform import pytest @@ -28,6 +30,28 @@ def _find_vcvarsall(plat_spec): 'wont find this version', ) + @pytest.mark.skipif( + not sysconfig.get_platform().startswith("win"), + reason="Only run test for non-mingw Windows platforms", + ) + @pytest.mark.parametrize( + "plat_name, expected", + [ + ("win-arm64", "win-arm64"), + ("win-amd64", "win-amd64"), + (None, get_platform()), + ], + ) + def test_cross_platform_compilation_paths(self, monkeypatch, plat_name, expected): + compiler = _msvccompiler.MSVCCompiler() + + # makes sure that the right target platform name is used + def _get_vcvars_spec(host_platform, platform): + assert platform == expected + + monkeypatch.setattr(_msvccompiler, '_get_vcvars_spec', _get_vcvars_spec) + compiler.initialize(plat_name) + @needs_winreg def test_get_vc_env_unicode(self): test_var = 'ṰḖṤṪ┅ṼẨṜ' diff --git a/newsfragments/298.bugfix.rst b/newsfragments/298.bugfix.rst new file mode 100644 index 00000000..eeb10466 --- /dev/null +++ b/newsfragments/298.bugfix.rst @@ -0,0 +1 @@ +Fix cross-platform compilation using `distutils._msvccompiler.MSVCCompiler` -- by :user:`saschanaz` and :user:`Avasam`