diff --git a/graalpython/com.oracle.graal.python.test/src/tests/test_sysconfig.py b/graalpython/com.oracle.graal.python.test/src/tests/test_sysconfig.py index fdf49f6847..1434e5a962 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/test_sysconfig.py +++ b/graalpython/com.oracle.graal.python.test/src/tests/test_sysconfig.py @@ -60,6 +60,18 @@ def test_platform_sysconfigdata(): assert sys.abiflags in sysconfig.get_config_var("INCLUDEPY") +@unittest.skipIf(sys.platform == "win32", "Windows has no system time zone database") +def test_tzpath_searches_system_time_zones(): + import sysconfig + tzpath = sysconfig.get_config_var("TZPATH") + assert tzpath == "/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo", tzpath + import os + import subprocess + env = {k: v for k, v in os.environ.items() if k != "PYTHONTZPATH"} + out = subprocess.check_output([sys.executable, "-c", "import zoneinfo; print(':'.join(zoneinfo.TZPATH))"], env=env, text=True) + assert out.strip() == tzpath, out + + @unittest.skipUnless(sys.platform == "win32", "Windows-specific sysconfig behavior") def test_windows_libpython_is_not_exposed(): import sysconfig diff --git a/graalpython/lib-graalpython/_sysconfig.py b/graalpython/lib-graalpython/_sysconfig.py index f8bfb242ea..916e3de2ba 100644 --- a/graalpython/lib-graalpython/_sysconfig.py +++ b/graalpython/lib-graalpython/_sysconfig.py @@ -38,6 +38,9 @@ # SOFTWARE. +_DEFAULT_TZPATH = "/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo" + + def _append_flags(g, key, flags): value = g.get(key, "") parts = value.split() @@ -102,4 +105,8 @@ def _update_posix_vars(config_vars=None): _setdefault(config_vars, 'LIBDIR', __graalpython__.capi_home) _setdefault(config_vars, 'LIBDEST', __graalpython__.capi_home) _setdefault(config_vars, 'LIBPL', __graalpython__.capi_home.replace(os.path.sep, '/')) + if not win32_native: + # zoneinfo searches the system time zone database in TZPATH; use the + # locations CPython's configure uses by default (--with-tzpath) + _setdefault(config_vars, 'TZPATH', _DEFAULT_TZPATH) return config_vars