From 92025ea2c8a10aa0e3dd5a2a1548f9bb17fe7dbc Mon Sep 17 00:00:00 2001 From: Ayappan Perumal Date: Fri, 17 Oct 2025 23:10:16 +0530 Subject: [PATCH 1/2] gh-140239: Check statx availability only on Linux (#140249) --- ...25-10-17-11-33-45.gh-issue-140239._k-GgW.rst | 1 + configure | 17 +++++++++++------ configure.ac | 7 ++++++- 3 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2025-10-17-11-33-45.gh-issue-140239._k-GgW.rst diff --git a/Misc/NEWS.d/next/Build/2025-10-17-11-33-45.gh-issue-140239._k-GgW.rst b/Misc/NEWS.d/next/Build/2025-10-17-11-33-45.gh-issue-140239._k-GgW.rst new file mode 100644 index 00000000000..f196ab0964d --- /dev/null +++ b/Misc/NEWS.d/next/Build/2025-10-17-11-33-45.gh-issue-140239._k-GgW.rst @@ -0,0 +1 @@ +Check ``statx`` availability only in Linux platforms diff --git a/configure b/configure index 267981250cd..3ea9c104431 100755 --- a/configure +++ b/configure @@ -20191,12 +20191,6 @@ if test "x$ac_cv_func_splice" = xyes then : printf "%s\n" "#define HAVE_SPLICE 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "statx" "ac_cv_func_statx" -if test "x$ac_cv_func_statx" = xyes -then : - printf "%s\n" "#define HAVE_STATX 1" >>confdefs.h - fi ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" if test "x$ac_cv_func_strftime" = xyes @@ -20398,6 +20392,17 @@ then : fi +# Check statx availability in Linux +if test "$MACHDEP" = "linux"; then + ac_fn_c_check_func "$LINENO" "statx" "ac_cv_func_statx" +if test "x$ac_cv_func_statx" = xyes +then : + printf "%s\n" "#define HAVE_STATX 1" >>confdefs.h + +fi + +fi + # Force lchmod off for Linux. Linux disallows changing the mode of symbolic # links. Some libc implementations have a stub lchmod implementation that always # returns an error. diff --git a/configure.ac b/configure.ac index 382591952ef..8c920da1997 100644 --- a/configure.ac +++ b/configure.ac @@ -5251,12 +5251,17 @@ AC_CHECK_FUNCS([ \ setitimer setlocale setpgid setpgrp setpriority setregid setresgid \ setresuid setreuid setsid setuid setvbuf shutdown sigaction sigaltstack \ sigfillset siginterrupt sigpending sigrelse sigtimedwait sigwait \ - sigwaitinfo snprintf splice statx strftime strlcpy strsignal symlinkat sync \ + sigwaitinfo snprintf splice strftime strlcpy strsignal symlinkat sync \ sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile \ tmpnam tmpnam_r truncate ttyname_r umask uname unlinkat unlockpt utimensat utimes vfork \ wait wait3 wait4 waitid waitpid wcscoll wcsftime wcsxfrm wmemcmp writev \ ]) +# Check statx availability in Linux +if test "$MACHDEP" = "linux"; then + AC_CHECK_FUNCS([statx]) +fi + # Force lchmod off for Linux. Linux disallows changing the mode of symbolic # links. Some libc implementations have a stub lchmod implementation that always # returns an error. From f4e51f253ad6c27583438f6182c33cf368bfa45f Mon Sep 17 00:00:00 2001 From: Barney Gale Date: Fri, 17 Oct 2025 22:57:51 +0100 Subject: [PATCH 2/2] GH-133789: Fix unpickling of pathlib objects pickled in Python 3.13 (#133831) In Python 3.13 (but not 3.12 or 3.14), pathlib classes are defined in `pathlib._local` rather than `pathlib`. In hindsight this was a mistake, but it was difficult to predict how the abstract/local split would pan out. In this patch we re-introduce `pathlib._local` as a stub module that re-exports the classes from `pathlib`. This allows path objects pickled in 3.13 to be unpicked in 3.14+ --- Lib/pathlib/_local.py | 12 ++++++++++++ Lib/test/test_pathlib/test_pathlib.py | 6 ++++++ .../2025-05-10-15-10-54.gh-issue-133789.I-ZlUX.rst | 1 + 3 files changed, 19 insertions(+) create mode 100644 Lib/pathlib/_local.py create mode 100644 Misc/NEWS.d/next/Library/2025-05-10-15-10-54.gh-issue-133789.I-ZlUX.rst diff --git a/Lib/pathlib/_local.py b/Lib/pathlib/_local.py new file mode 100644 index 00000000000..58e137f2a92 --- /dev/null +++ b/Lib/pathlib/_local.py @@ -0,0 +1,12 @@ +""" +This module exists so that pathlib objects pickled under Python 3.13 can be +unpickled in 3.14+. +""" + +from pathlib import * + +__all__ = [ + "UnsupportedOperation", + "PurePath", "PurePosixPath", "PureWindowsPath", + "Path", "PosixPath", "WindowsPath", +] diff --git a/Lib/test/test_pathlib/test_pathlib.py b/Lib/test/test_pathlib/test_pathlib.py index a1105aae635..ef9ea0d11d0 100644 --- a/Lib/test/test_pathlib/test_pathlib.py +++ b/Lib/test/test_pathlib/test_pathlib.py @@ -293,6 +293,12 @@ def test_pickling_common(self): self.assertEqual(hash(pp), hash(p)) self.assertEqual(str(pp), str(p)) + def test_unpicking_3_13(self): + data = (b"\x80\x04\x95'\x00\x00\x00\x00\x00\x00\x00\x8c\x0e" + b"pathlib._local\x94\x8c\rPurePosixPath\x94\x93\x94)R\x94.") + p = pickle.loads(data) + self.assertIsInstance(p, pathlib.PurePosixPath) + def test_repr_common(self): for pathstr in ('a', 'a/b', 'a/b/c', '/', '/a/b', '/a/b/c'): with self.subTest(pathstr=pathstr): diff --git a/Misc/NEWS.d/next/Library/2025-05-10-15-10-54.gh-issue-133789.I-ZlUX.rst b/Misc/NEWS.d/next/Library/2025-05-10-15-10-54.gh-issue-133789.I-ZlUX.rst new file mode 100644 index 00000000000..d2a4f7f42c3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-05-10-15-10-54.gh-issue-133789.I-ZlUX.rst @@ -0,0 +1 @@ +Fix unpickling of :mod:`pathlib` objects that were pickled in Python 3.13.