[Python-checkins] bpo-45582: Fix test_embed failure during a PGO build on Windows (GH-30014)

zooba webhook-mailer at python.org
Fri Dec 10 12:14:07 EST 2021


https://github.com/python/cpython/commit/3f398a77d37b5dfd51dabbc362d482a482fa885a
commit: 3f398a77d37b5dfd51dabbc362d482a482fa885a
branch: main
author: neonene <53406459+neonene at users.noreply.github.com>
committer: zooba <steve.dower at microsoft.com>
date: 2021-12-10T17:13:55Z
summary:

bpo-45582: Fix test_embed failure during a PGO build on Windows (GH-30014)

This defines VPATH differently in PGO instrumentation builds, to account for a different default output directory. It also adds sys._vpath on Windows to make the value available to sysconfig so that it can be used in tests.

files:
M Lib/sysconfig.py
M Lib/test/test_embed.py
M Modules/getpath.py
M PCbuild/_freeze_module.vcxproj
M PCbuild/python.props
M PCbuild/pythoncore.vcxproj
M Python/sysmodule.c

diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
index da918b7ba1904..ef335c69421f5 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 8012d80bf3e55..879952413374e 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 84c9760b11248..77f951dbedef3 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 2c06a8956ae45..2beb425647407 100644
--- a/PCbuild/_freeze_module.vcxproj
+++ b/PCbuild/_freeze_module.vcxproj
@@ -226,7 +226,9 @@
     <ClCompile Include="..\Python\structmember.c" />
     <ClCompile Include="..\Python\suggestions.c" />
     <ClCompile Include="..\Python\symtable.c" />
-    <ClCompile Include="..\Python\sysmodule.c" />
+    <ClCompile Include="..\Python\sysmodule.c">
+      <PreprocessorDefinitions>VPATH="$(PyVPath)";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
     <ClCompile Include="..\Python\thread.c" />
     <ClCompile Include="..\Python\traceback.c" />
   </ItemGroup>
diff --git a/PCbuild/python.props b/PCbuild/python.props
index 7b85ad1c94f16..ce860764e445f 100644
--- a/PCbuild/python.props
+++ b/PCbuild/python.props
@@ -53,6 +53,10 @@
     <BuildPath Condition="!HasTrailingSlash($(BuildPath))">$(BuildPath)\</BuildPath>
     <BuildPath Condition="$(Configuration) == 'PGInstrument'">$(BuildPath)instrumented\</BuildPath>
     
+    <!-- VPATH definition (escaped) -->
+    <PyVPath Condition="$(Configuration) != 'PGInstrument'">..\\..</PyVPath>
+    <PyVPath Condition="$(Configuration) == 'PGInstrument'">..\\..\\..</PyVPath>
+
     <!-- Directories of external projects. tcltk is handled in tcltk.props -->
     <ExternalsDir>$(EXTERNALS_DIR)</ExternalsDir>
     <ExternalsDir Condition="$(ExternalsDir) == ''">$([System.IO.Path]::GetFullPath(`$(PySourcePath)externals`))</ExternalsDir>
diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
index e3a71ca645143..33abfaf53652f 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 @@
     <ClCompile Include="..\Python\suggestions.c" />
     <ClCompile Include="..\Python\structmember.c" />
     <ClCompile Include="..\Python\symtable.c" />
-    <ClCompile Include="..\Python\sysmodule.c" />
+    <ClCompile Include="..\Python\sysmodule.c">
+      <PreprocessorDefinitions>VPATH="$(PyVPath)";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
     <ClCompile Include="..\Python\thread.c" />
     <ClCompile Include="..\Python\traceback.c" />
   </ItemGroup>
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index af4f926f0e408..f912115560704 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) */



More information about the Python-checkins mailing list