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)
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()
'Py_NOGIL',
'SHELL',
'SOABI',
+ 'abs_builddir',
+ 'abs_srcdir',
'prefix',
+ 'srcdir',
):
value = sysconfig.get_config_var(name)
if name == 'ANDROID_API_LEVEL' and not value:
#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__'}
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')
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'),
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):