From b9027a92cb04a0fcc90efa051635dcfaf1641fa1 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 27 Sep 2023 11:46:57 +0200 Subject: [PATCH] gh-109615: Fix support test_copy_python_src_ignore() 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". --- Lib/test/libregrtest/utils.py | 12 +++++++----- Lib/test/pythoninfo.py | 1 + Lib/test/test_support.py | 7 ++++++- Tools/freeze/test/freeze.py | 9 ++++++++- Tools/patchcheck/patchcheck.py | 9 ++++++++- 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/Lib/test/libregrtest/utils.py b/Lib/test/libregrtest/utils.py index 76922178d7b6d6..bedf9a5420db64 100644 --- a/Lib/test/libregrtest/utils.py +++ b/Lib/test/libregrtest/utils.py @@ -355,11 +355,13 @@ def get_temp_dir(tmp_dir: StrPath | None = None) -> StrPath: if not support.is_wasi: tmp_dir = sysconfig.get_config_var('abs_builddir') if 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. - tmp_dir = sysconfig.get_config_var('srcdir') + tmp_dir = sysconfig.get_config_var('abs_srcdir') + if not 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. + tmp_dir = sysconfig.get_config_var('srcdir') tmp_dir = os.path.join(tmp_dir, 'build') else: # WASI platform diff --git a/Lib/test/pythoninfo.py b/Lib/test/pythoninfo.py index c372efaedd313b..0e7528ef97c5f6 100644 --- a/Lib/test/pythoninfo.py +++ b/Lib/test/pythoninfo.py @@ -520,6 +520,7 @@ def collect_sysconfig(info_add): 'SHELL', 'SOABI', 'abs_builddir', + 'abs_srcdir', 'prefix', 'srcdir', ): diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index af38db596d8528..134ce24484fa28 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -802,8 +802,13 @@ def test_set_memlimit(self): support.real_max_memuse = old_real_max_memuse 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__'} diff --git a/Tools/freeze/test/freeze.py b/Tools/freeze/test/freeze.py index bb15941464e3d1..cdf77c57bbb6ae 100644 --- a/Tools/freeze/test/freeze.py +++ b/Tools/freeze/test/freeze.py @@ -7,9 +7,16 @@ 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') diff --git a/Tools/patchcheck/patchcheck.py b/Tools/patchcheck/patchcheck.py index fa3a43af6e6048..e3959ce428c7c5 100755 --- a/Tools/patchcheck/patchcheck.py +++ b/Tools/patchcheck/patchcheck.py @@ -11,6 +11,13 @@ 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 = [ @@ -18,7 +25,7 @@ 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):