https://github.com/python/cpython/commit/2c7cac4c0d903fa1881579304703c9ed2d5c5489
commit: 2c7cac4c0d903fa1881579304703c9ed2d5c5489
branch: main
author: Adam Turner <[email protected]>
committer: AA-Turner <[email protected]>
date: 2025-05-09T15:09:20+01:00
summary:
GH-132983: Restore libzstd fallback detection (#133565)
files:
M configure
M configure.ac
M pyconfig.h.in
diff --git a/configure b/configure
index 6428bb2b477487..2649a800f91a48 100755
--- a/configure
+++ b/configure
@@ -22451,11 +22451,301 @@ fi
# Put the nasty error message in config.log where it belongs
echo "$LIBZSTD_PKG_ERRORS" >&5
+
+ save_CFLAGS=$CFLAGS
+save_CPPFLAGS=$CPPFLAGS
+save_LDFLAGS=$LDFLAGS
+save_LIBS=$LIBS
+
+
+ CPPFLAGS="$CPPFLAGS $LIBZSTD_CFLAGS"
+ CFLAGS="$CFLAGS $LIBZSTD_CFLAGS"
+ LIBS="$LIBS $LIBZSTD_LIBS"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library
containing ZDICT_finalizeDictionary" >&5
+printf %s "checking for library containing ZDICT_finalizeDictionary... " >&6; }
+if test ${ac_cv_search_ZDICT_finalizeDictionary+y}
+then :
+ printf %s "(cached) " >&6
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ZDICT_finalizeDictionary (void);
+int
+main (void)
+{
+return ZDICT_finalizeDictionary ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' zstd
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_ZDICT_finalizeDictionary=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_ZDICT_finalizeDictionary+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_ZDICT_finalizeDictionary+y}
+then :
+
+else case e in #(
+ e) ac_cv_search_ZDICT_finalizeDictionary=no ;;
+esac
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result:
$ac_cv_search_ZDICT_finalizeDictionary" >&5
+printf "%s\n" "$ac_cv_search_ZDICT_finalizeDictionary" >&6; }
+ac_res=$ac_cv_search_ZDICT_finalizeDictionary
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking
ZSTD_VERSION_NUMBER >= 1.4.5" >&5
+printf %s "checking ZSTD_VERSION_NUMBER >= 1.4.5... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include "zstd.h"
+int
+main (void)
+{
+
+ #if ZSTD_VERSION_NUMBER < 10405
+ # error "zstd version is too old"
+ #endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ for ac_header in zstd.h zdict.h
+do :
+ as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | sed "$as_sed_sh"`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header"
"$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
+ cat >>confdefs.h <<_ACEOF
+#define `printf "%s\n" "HAVE_$ac_header" | sed "$as_sed_cpp"` 1
+_ACEOF
+ have_libzstd=yes
+else case e in #(
+ e) have_libzstd=no ;;
+esac
+fi
+
+done
+
+else case e in #(
+ e)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
have_libzstd=no
+ ;;
+esac
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+else case e in #(
+ e) have_libzstd=no ;;
+esac
+fi
+
+ if test "x$have_libzstd" = xyes
+then :
+
+ LIBZSTD_CFLAGS=${LIBZSTD_CFLAGS-""}
+ LIBZSTD_LIBS=${LIBZSTD_LIBS-"-lzstd"}
+
+fi
+
+CFLAGS=$save_CFLAGS
+CPPFLAGS=$save_CPPFLAGS
+LDFLAGS=$save_LDFLAGS
+LIBS=$save_LIBS
+
+
+
elif test $pkg_failed = untried; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
+
+ save_CFLAGS=$CFLAGS
+save_CPPFLAGS=$CPPFLAGS
+save_LDFLAGS=$LDFLAGS
+save_LIBS=$LIBS
+
+
+ CPPFLAGS="$CPPFLAGS $LIBZSTD_CFLAGS"
+ CFLAGS="$CFLAGS $LIBZSTD_CFLAGS"
+ LIBS="$LIBS $LIBZSTD_LIBS"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library
containing ZDICT_finalizeDictionary" >&5
+printf %s "checking for library containing ZDICT_finalizeDictionary... " >&6; }
+if test ${ac_cv_search_ZDICT_finalizeDictionary+y}
+then :
+ printf %s "(cached) " >&6
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ZDICT_finalizeDictionary (void);
+int
+main (void)
+{
+return ZDICT_finalizeDictionary ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' zstd
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_ZDICT_finalizeDictionary=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_ZDICT_finalizeDictionary+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_ZDICT_finalizeDictionary+y}
+then :
+
+else case e in #(
+ e) ac_cv_search_ZDICT_finalizeDictionary=no ;;
+esac
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result:
$ac_cv_search_ZDICT_finalizeDictionary" >&5
+printf "%s\n" "$ac_cv_search_ZDICT_finalizeDictionary" >&6; }
+ac_res=$ac_cv_search_ZDICT_finalizeDictionary
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking
ZSTD_VERSION_NUMBER >= 1.4.5" >&5
+printf %s "checking ZSTD_VERSION_NUMBER >= 1.4.5... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include "zstd.h"
+int
+main (void)
+{
+
+ #if ZSTD_VERSION_NUMBER < 10405
+ # error "zstd version is too old"
+ #endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ for ac_header in zstd.h zdict.h
+do :
+ as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | sed "$as_sed_sh"`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header"
"$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
+ cat >>confdefs.h <<_ACEOF
+#define `printf "%s\n" "HAVE_$ac_header" | sed "$as_sed_cpp"` 1
+_ACEOF
+ have_libzstd=yes
+else case e in #(
+ e) have_libzstd=no ;;
+esac
+fi
+
+done
+
+else case e in #(
+ e)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
have_libzstd=no
+ ;;
+esac
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+else case e in #(
+ e) have_libzstd=no ;;
+esac
+fi
+
+ if test "x$have_libzstd" = xyes
+then :
+
+ LIBZSTD_CFLAGS=${LIBZSTD_CFLAGS-""}
+ LIBZSTD_LIBS=${LIBZSTD_LIBS-"-lzstd"}
+
+fi
+
+CFLAGS=$save_CFLAGS
+CPPFLAGS=$save_CPPFLAGS
+LDFLAGS=$save_LDFLAGS
+LIBS=$save_LIBS
+
+
+
else
LIBZSTD_CFLAGS=$pkg_cv_LIBZSTD_CFLAGS
LIBZSTD_LIBS=$pkg_cv_LIBZSTD_LIBS
diff --git a/configure.ac b/configure.ac
index 233f19a82f87c8..5525a5b0ed5240 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5387,7 +5387,33 @@ PKG_CHECK_MODULES([LIBLZMA], [liblzma],
[have_liblzma=yes], [
])
dnl zstd 1.4.5 stabilised ZDICT_finalizeDictionary
-PKG_CHECK_MODULES([LIBZSTD], [libzstd >= 1.4.5], [have_libzstd=yes],
[have_libzstd=no])
+PKG_CHECK_MODULES([LIBZSTD], [libzstd >= 1.4.5], [have_libzstd=yes], [
+ WITH_SAVE_ENV([
+ CPPFLAGS="$CPPFLAGS $LIBZSTD_CFLAGS"
+ CFLAGS="$CFLAGS $LIBZSTD_CFLAGS"
+ LIBS="$LIBS $LIBZSTD_LIBS"
+ AC_SEARCH_LIBS([ZDICT_finalizeDictionary], [zstd], [
+ AC_MSG_CHECKING([ZSTD_VERSION_NUMBER >= 1.4.5])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([@%:@include "zstd.h"], [
+ #if ZSTD_VERSION_NUMBER < 10405
+ # error "zstd version is too old"
+ #endif
+ ])
+ ], [
+ AC_MSG_RESULT([yes])
+ AC_CHECK_HEADERS([zstd.h zdict.h], [have_libzstd=yes],
[have_libzstd=no])
+ ], [
+ AC_MSG_RESULT([no])
+ have_libzstd=no
+ ])
+ ], [have_libzstd=no])
+ AS_VAR_IF([have_libzstd], [yes], [
+ LIBZSTD_CFLAGS=${LIBZSTD_CFLAGS-""}
+ LIBZSTD_LIBS=${LIBZSTD_LIBS-"-lzstd"}
+ ])
+ ])
+])
dnl PY_CHECK_NETDB_FUNC(FUNCTION)
AC_DEFUN([PY_CHECK_NETDB_FUNC], [PY_CHECK_FUNC([$1], [@%:@include <netdb.h>])])
diff --git a/pyconfig.h.in b/pyconfig.h.in
index 7586ad3f266705..c91facbedf94e5 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -1630,12 +1630,18 @@
/* Define to 1 if you have the 'writev' function. */
#undef HAVE_WRITEV
+/* Define to 1 if you have the <zdict.h> header file. */
+#undef HAVE_ZDICT_H
+
/* Define if the zlib library has inflateCopy */
#undef HAVE_ZLIB_COPY
/* Define to 1 if you have the <zlib.h> header file. */
#undef HAVE_ZLIB_H
+/* Define to 1 if you have the <zstd.h> header file. */
+#undef HAVE_ZSTD_H
+
/* Define to 1 if you have the '_getpty' function. */
#undef HAVE__GETPTY
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]