]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.11] gh-109615: Fix support test_copy_python_src_ignore() (#109958) (#109962)
authorVictor Stinner <vstinner@python.org>
Wed, 27 Sep 2023 11:00:22 +0000 (13:00 +0200)
committerGitHub <noreply@github.com>
Wed, 27 Sep 2023 11:00:22 +0000 (11:00 +0000)
gh-109615: Fix support test_copy_python_src_ignore() (#109958)

Fix the test when run on an installed Python: use "abs_srcdir" of
sysconfig, and skip the test if the Python source code cannot be
found.

* Tools/patchcheck/patchcheck.py, Tools/freeze/test/freeze.py and
  Lib/test/libregrtest/utils.py now first try to get "abs_srcdir"
  from sysconfig, before getting "srcdir" from sysconfig.
* test.pythoninfo logs sysconfig "abs_srcdir".

(cherry picked from commit b89ed9df39851348fbb1552294644f99f6b17d2c)

Lib/test/libregrtest/main.py
Lib/test/pythoninfo.py
Lib/test/test_support.py
Tools/freeze/test/freeze.py
Tools/scripts/patchcheck.py

index e4e65e943d67bc51079dffcd581f0e6dfaf0336b..7192244c69c55e66ed1979ce50e4a8aa88bdabf7 100644 (file)
@@ -731,11 +731,13 @@ class Regrtest:
             if sysconfig.is_python_build():
                 self.tmp_dir = sysconfig.get_config_var('abs_builddir')
                 if self.tmp_dir is None:
-                    # gh-74470: On Windows, only srcdir is available. Using
-                    # abs_builddir mostly matters on UNIX when building Python
-                    # out of the source tree, especially when the source tree
-                    # is read only.
-                    self.tmp_dir = sysconfig.get_config_var('srcdir')
+                    self.tmp_dir = sysconfig.get_config_var('abs_srcdir')
+                    if not self.tmp_dir:
+                        # gh-74470: On Windows, only srcdir is available. Using
+                        # abs_builddir mostly matters on UNIX when building
+                        # Python out of the source tree, especially when the
+                        # source tree is read only.
+                        self.tmp_dir = sysconfig.get_config_var('srcdir')
                 self.tmp_dir = os.path.join(self.tmp_dir, 'build')
             else:
                 self.tmp_dir = tempfile.gettempdir()
index 69d2fc0d061a55e44f3a9e4ce4bc39bd3d721c28..db8dfe247cca257e5595d13ccd56008ed94a4709 100644 (file)
@@ -524,7 +524,10 @@ def collect_sysconfig(info_add):
         'Py_NOGIL',
         'SHELL',
         'SOABI',
+        'abs_builddir',
+        'abs_srcdir',
         'prefix',
+        'srcdir',
     ):
         value = sysconfig.get_config_var(name)
         if name == 'ANDROID_API_LEVEL' and not value:
index a6b241e4a82b7653781845c14347aaee243a733a..53220ec04a9c94cd1c2646a22acbb678e40adc1f 100644 (file)
@@ -779,8 +779,13 @@ class TestSupport(unittest.TestCase):
         #self.assertEqual(available, 2)
 
     def test_copy_python_src_ignore(self):
-        src_dir = sysconfig.get_config_var('srcdir')
+        src_dir = sysconfig.get_config_var('abs_srcdir')
+        if not src_dir:
+            src_dir = sysconfig.get_config_var('srcdir')
         src_dir = os.path.abspath(src_dir)
+        if not os.path.exists(src_dir):
+            self.skipTest(f"cannot access Python source code directory:"
+                          f" {src_dir!r}")
 
         ignored = {'.git', '__pycache__'}
 
index bb15941464e3d1eccbcfd2d7da509bcda8fe0d1d..cdf77c57bbb6aeba289a27f6f43a706f462a50b0 100644 (file)
@@ -7,9 +7,16 @@ import sysconfig
 from test import support
 
 
+def get_python_source_dir():
+    src_dir = sysconfig.get_config_var('abs_srcdir')
+    if not src_dir:
+        src_dir = sysconfig.get_config_var('srcdir')
+    return os.path.abspath(src_dir)
+
+
 TESTS_DIR = os.path.dirname(__file__)
 TOOL_ROOT = os.path.dirname(TESTS_DIR)
-SRCDIR = os.path.abspath(sysconfig.get_config_var('srcdir'))
+SRCDIR = get_python_source_dir()
 
 MAKE = shutil.which('make')
 FREEZE = os.path.join(TOOL_ROOT, 'freeze.py')
index a324eafc52b2abb010a0eab5f822be067c88b71b..c2dceea2a2c6347884c797dca3bedb78d0872768 100755 (executable)
@@ -11,6 +11,13 @@ import reindent
 import untabify
 
 
+def get_python_source_dir():
+    src_dir = sysconfig.get_config_var('abs_srcdir')
+    if not src_dir:
+        src_dir = sysconfig.get_config_var('srcdir')
+    return os.path.abspath(src_dir)
+
+
 # Excluded directories which are copies of external libraries:
 # don't check their coding style
 EXCLUDE_DIRS = [os.path.join('Modules', '_ctypes', 'libffi_osx'),
@@ -18,7 +25,7 @@ EXCLUDE_DIRS = [os.path.join('Modules', '_ctypes', 'libffi_osx'),
                 os.path.join('Modules', '_decimal', 'libmpdec'),
                 os.path.join('Modules', 'expat'),
                 os.path.join('Modules', 'zlib')]
-SRCDIR = sysconfig.get_config_var('srcdir')
+SRCDIR = get_python_source_dir()
 
 
 def n_files_str(count):