gh-128104: Remove `Py_STRFTIME_C99_SUPPORT`; require C99-compliant strftime (#128106)
https://github.com/python/cpython/commit/bb2dfadb9221fa3035fda42a2c153c83101... commit: bb2dfadb9221fa3035fda42a2c153c831013e3d3 branch: main author: Zanie Blue <contact@zanie.dev> committer: erlend-aasland <erlend.aasland@protonmail.com> date: 2025-01-03T11:04:03+01:00 summary: gh-128104: Remove `Py_STRFTIME_C99_SUPPORT`; require C99-compliant strftime (#128106) files: A Misc/NEWS.d/next/Build/2024-12-20-09-03-22.gh-issue-128104.m_SoVx.rst M Modules/_datetimemodule.c M configure M configure.ac M pyconfig.h.in diff --git a/Misc/NEWS.d/next/Build/2024-12-20-09-03-22.gh-issue-128104.m_SoVx.rst b/Misc/NEWS.d/next/Build/2024-12-20-09-03-22.gh-issue-128104.m_SoVx.rst new file mode 100644 index 00000000000000..c3a47fbecd1dad --- /dev/null +++ b/Misc/NEWS.d/next/Build/2024-12-20-09-03-22.gh-issue-128104.m_SoVx.rst @@ -0,0 +1,3 @@ +Remove ``Py_STRFTIME_C99_SUPPORT`` conditions in favor of requiring C99 +:manpage:`strftime(3)` specifier support at build time. When cross-compiling, +there is no build time check and support is assumed. diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index b1102984cb5e9e..368d10411366c4 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -1912,9 +1912,7 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple, } #ifdef Py_NORMALIZE_CENTURY else if (ch == 'Y' || ch == 'G' -#ifdef Py_STRFTIME_C99_SUPPORT || ch == 'F' || ch == 'C' -#endif ) { /* 0-pad year with century as necessary */ PyObject *item = PySequence_GetItem(timetuple, 0); @@ -1952,15 +1950,11 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple, * +6 to accommodate dashes, 2-digit month and day for %F. */ char buf[SIZEOF_LONG * 5 / 2 + 2 + 6]; Py_ssize_t n = PyOS_snprintf(buf, sizeof(buf), -#ifdef Py_STRFTIME_C99_SUPPORT ch == 'F' ? "%04ld-%%m-%%d" : -#endif "%04ld", year_long); -#ifdef Py_STRFTIME_C99_SUPPORT if (ch == 'C') { n -= 2; } -#endif if (_PyUnicodeWriter_WriteSubstring(&writer, format, start, end) < 0) { goto Error; } diff --git a/configure b/configure index 3d2c60213db591..2c3046e89bcb65 100755 --- a/configure +++ b/configure @@ -26436,8 +26436,8 @@ printf "%s\n" "#define Py_NORMALIZE_CENTURY 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C99-specific strftime specifiers are supported" >&5 -printf %s "checking whether C99-specific strftime specifiers are supported... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C99-compatible strftime specifiers are supported" >&5 +printf %s "checking whether C99-compatible strftime specifiers are supported... " >&6; } if test ${ac_cv_strftime_c99_support+y} then : printf %s "(cached) " >&6 @@ -26445,7 +26445,7 @@ else $as_nop if test "$cross_compiling" = yes then : - ac_cv_strftime_c99_support=no + ac_cv_strftime_c99_support= else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -26472,7 +26472,7 @@ if ac_fn_c_try_run "$LINENO" then : ac_cv_strftime_c99_support=yes else $as_nop - ac_cv_strftime_c99_support=no + as_fn_error $? "Python requires C99-compatible strftime specifiers" "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -26481,12 +26481,6 @@ fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_strftime_c99_support" >&5 printf "%s\n" "$ac_cv_strftime_c99_support" >&6; } -if test "$ac_cv_strftime_c99_support" = yes -then - -printf "%s\n" "#define Py_STRFTIME_C99_SUPPORT 1" >>confdefs.h - -fi have_curses=no have_panel=no diff --git a/configure.ac b/configure.ac index ee034e5a9621df..50b130f2c802b5 100644 --- a/configure.ac +++ b/configure.ac @@ -6672,7 +6672,7 @@ then [Define if year with century should be normalized for strftime.]) fi -AC_CACHE_CHECK([whether C99-specific strftime specifiers are supported], [ac_cv_strftime_c99_support], [ +AC_CACHE_CHECK([whether C99-compatible strftime specifiers are supported], [ac_cv_strftime_c99_support], [ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <time.h> #include <string.h> @@ -6692,13 +6692,8 @@ int main(void) } ]])], [ac_cv_strftime_c99_support=yes], -[ac_cv_strftime_c99_support=no], -[ac_cv_strftime_c99_support=no])]) -if test "$ac_cv_strftime_c99_support" = yes -then - AC_DEFINE([Py_STRFTIME_C99_SUPPORT], [1], - [Define if C99-specific strftime specifiers are supported.]) -fi +[AC_MSG_ERROR([Python requires C99-compatible strftime specifiers])], +[ac_cv_strftime_c99_support=])]) dnl check for ncursesw/ncurses and panelw/panel dnl NOTE: old curses is not detected. diff --git a/pyconfig.h.in b/pyconfig.h.in index 1ca83fd2f2ca1b..ca08f087a85e9f 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -1715,9 +1715,6 @@ /* Define if you want to enable internal statistics gathering. */ #undef Py_STATS -/* Define if C99-specific strftime specifiers are supported. */ -#undef Py_STRFTIME_C99_SUPPORT - /* The version of SunOS/Solaris as reported by `uname -r' without the dot. */ #undef Py_SUNOS_VERSION
participants (1)
-
erlend-aasland