import copy
import ntpath
+import os
import pathlib
import posixpath
+import shutil
+import subprocess
+import sys
+import sysconfig
+import tempfile
import unittest
from test.support import verbose
actual = getpath(ns, expected)
self.assertEqual(expected, actual)
+
+class RealGetPathTests(unittest.TestCase):
+ @unittest.skipUnless(
+ sysconfig.is_python_build(),
+ 'Test only available when running from the buildir',
+ )
+ @unittest.skipUnless(
+ any(sys.platform.startswith(p) for p in ('linux', 'freebsd', 'centos')),
+ 'Test only support on Linux-like OS-es (support LD_LIBRARY_PATH)',
+ )
+ @unittest.skipUnless(
+ sysconfig.get_config_var('LDLIBRARY') != sysconfig.get_config_var('LIBRARY'),
+ 'Test only available when using a dynamic libpython',
+ )
+ def test_builddir_wrong_library_warning(self):
+ library_name = sysconfig.get_config_var('INSTSONAME')
+ with tempfile.TemporaryDirectory() as tmpdir:
+ shutil.copy2(
+ os.path.join(sysconfig.get_config_var('srcdir'), library_name),
+ os.path.join(tmpdir, library_name)
+ )
+ env = os.environ.copy()
+ env['LD_LIBRARY_PATH'] = tmpdir
+ process = subprocess.run(
+ [sys.executable, '-c', ''],
+ env=env, check=True, capture_output=True, text=True,
+ )
+ error_msg = 'The runtime library has been loaded from outside the build directory'
+ self.assertTrue(process.stderr.startswith(error_msg), process.stderr)
+
+
# ******************************************************************************
DEFAULT_NAMESPACE = dict(
base_exec_prefix = config.get('base_exec_prefix') or EXEC_PREFIX or base_prefix
+# ******************************************************************************
+# MISC. RUNTIME WARNINGS
+# ******************************************************************************
+
+# When running Python from the build directory, if libpython is dynamically
+# linked, the wrong library might be loaded.
+if build_prefix and library and not dirname(abspath(library)).startswith(build_prefix):
+ msg = f'The runtime library has been loaded from outside the build directory ({library})!'
+ if os_name == 'posix':
+ msg += ' Consider setting LD_LIBRARY_PATH=. to force it to be loaded from the build directory.'
+ warn(msg)
+
+
# ******************************************************************************
# SET pythonpath FROM _PTH FILE
# ******************************************************************************