diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py index da918b7ba19..ef335c69421 100644 --- a/Lib/sysconfig.py +++ b/Lib/sysconfig.py @@ -616,6 +616,7 @@ def get_config_vars(*args): if os.name == 'nt': _init_non_posix(_CONFIG_VARS) + _CONFIG_VARS['VPATH'] = sys._vpath if os.name == 'posix': _init_posix(_CONFIG_VARS) # For backward compatibility, see issue19555 diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py index 8012d80bf3e..87995241337 100644 --- a/Lib/test/test_embed.py +++ b/Lib/test/test_embed.py @@ -1300,11 +1300,16 @@ def test_init_pybuilddir(self): def test_init_pybuilddir_win32(self): # Test path configuration with pybuilddir.txt configuration file - with self.tmpdir_with_python(r'PCbuild\arch') as tmpdir: + vpath = sysconfig.get_config_var("VPATH") + subdir = r'PCbuild\arch' + if os.path.normpath(vpath).count(os.sep) == 2: + subdir = os.path.join(subdir, 'instrumented') + + with self.tmpdir_with_python(subdir) as tmpdir: # The prefix is dirname(executable) + VPATH - prefix = os.path.normpath(os.path.join(tmpdir, r'..\..')) + prefix = os.path.normpath(os.path.join(tmpdir, vpath)) # The stdlib dir is dirname(executable) + VPATH + 'Lib' - stdlibdir = os.path.normpath(os.path.join(tmpdir, r'..\..\Lib')) + stdlibdir = os.path.normpath(os.path.join(tmpdir, vpath, 'Lib')) filename = os.path.join(tmpdir, 'pybuilddir.txt') with open(filename, "w", encoding="utf8") as fp: diff --git a/Modules/getpath.py b/Modules/getpath.py index 84c9760b112..77f951dbede 100644 --- a/Modules/getpath.py +++ b/Modules/getpath.py @@ -187,7 +187,7 @@ elif os_name == 'nt': BUILDDIR_TXT = 'pybuilddir.txt' - BUILD_LANDMARK = r'..\..\Modules\Setup.local' + BUILD_LANDMARK = f'{VPATH}\\Modules\\Setup.local' DEFAULT_PROGRAM_NAME = f'python' STDLIB_SUBDIR = 'Lib' STDLIB_LANDMARKS = [f'{STDLIB_SUBDIR}\\os.py', f'{STDLIB_SUBDIR}\\os.pyc'] diff --git a/PCbuild/_freeze_module.vcxproj b/PCbuild/_freeze_module.vcxproj index 2c06a8956ae..2beb4256474 100644 --- a/PCbuild/_freeze_module.vcxproj +++ b/PCbuild/_freeze_module.vcxproj @@ -226,7 +226,9 @@ - + + VPATH="$(PyVPath)";%(PreprocessorDefinitions) + diff --git a/PCbuild/python.props b/PCbuild/python.props index 7b85ad1c94f..ce860764e44 100644 --- a/PCbuild/python.props +++ b/PCbuild/python.props @@ -53,6 +53,10 @@ $(BuildPath)\ $(BuildPath)instrumented\ + + ..\\.. + ..\\..\\.. + $(EXTERNALS_DIR) $([System.IO.Path]::GetFullPath(`$(PySourcePath)externals`)) diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj index e3a71ca6451..33abfaf5365 100644 --- a/PCbuild/pythoncore.vcxproj +++ b/PCbuild/pythoncore.vcxproj @@ -115,7 +115,7 @@ PREFIX=NULL; EXEC_PREFIX=NULL; VERSION=NULL; - VPATH="..\\.."; + VPATH="$(PyVPath)"; PYDEBUGEXT="$(PyDebugExt)"; PLATLIBDIR="DLLs"; %(PreprocessorDefinitions) @@ -519,7 +519,9 @@ - + + VPATH="$(PyVPath)";%(PreprocessorDefinitions) + diff --git a/Python/sysmodule.c b/Python/sysmodule.c index af4f926f0e4..f9121155607 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -2823,6 +2823,8 @@ _PySys_InitCore(PyThreadState *tstate, PyObject *sysdict) goto type_init_failed; } } + + SET_SYS_FROM_STRING("_vpath", VPATH); #endif /* float repr style: 0.03 (short) vs 0.029999999999999999 (legacy) */