Skip to content

bpo-45763: Detect compression build deps in configure (GH-29483) #29483

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 9, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Doc/whatsnew/3.11.rst
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,9 @@ Build Changes
(Contributed by Brett Cannon and Christian Heimes in :issue:`45548`,
:issue:`45570`, :issue:`45571`, and :issue:`43974`.)

* The build dependencies for :mod:`zlib`, :mod:`bz2`, and :mod:`lzma` are now
detected by :program:`configure`.
(Contributed by Christian Heimes in :issue:`45763`.)

C API Changes
=============
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
The build dependencies for :mod:`zlib`, :mod:`bz2`, and :mod:`lzma` are now
detected by ``configure``.
186 changes: 184 additions & 2 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -12885,8 +12885,62 @@ $as_echo "#define HAVE_LCHFLAGS 1" >>confdefs.h

fi

# Check for compression libraries
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflateCopy in -lz" >&5
for ac_header in zlib.h
do :
ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
if test "x$ac_cv_header_zlib_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_ZLIB_H 1
_ACEOF

save_LIBS="$LIBS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzread in -lz" >&5
$as_echo_n "checking for gzread in -lz... " >&6; }
if ${ac_cv_lib_z_gzread+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lz $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. */
#ifdef __cplusplus
extern "C"
#endif
char gzread ();
int
main ()
{
return gzread ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_z_gzread=yes
else
ac_cv_lib_z_gzread=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzread" >&5
$as_echo "$ac_cv_lib_z_gzread" >&6; }
if test "x$ac_cv_lib_z_gzread" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBZ 1
_ACEOF

LIBS="-lz $LIBS"

fi

LIBS="$save_LIBS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflateCopy in -lz" >&5
$as_echo_n "checking for inflateCopy in -lz... " >&6; }
if ${ac_cv_lib_z_inflateCopy+:} false; then :
$as_echo_n "(cached) " >&6
Expand Down Expand Up @@ -12928,6 +12982,134 @@ $as_echo "#define HAVE_ZLIB_COPY 1" >>confdefs.h

fi

LIBS="$save_LIBS"

fi

done


for ac_header in bzlib.h
do :
ac_fn_c_check_header_mongrel "$LINENO" "bzlib.h" "ac_cv_header_bzlib_h" "$ac_includes_default"
if test "x$ac_cv_header_bzlib_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_BZLIB_H 1
_ACEOF

save_LIBS="$LIBS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BZ2_bzCompress in -lbz2" >&5
$as_echo_n "checking for BZ2_bzCompress in -lbz2... " >&6; }
if ${ac_cv_lib_bz2_BZ2_bzCompress+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lbz2 $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. */
#ifdef __cplusplus
extern "C"
#endif
char BZ2_bzCompress ();
int
main ()
{
return BZ2_bzCompress ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_bz2_BZ2_bzCompress=yes
else
ac_cv_lib_bz2_BZ2_bzCompress=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bz2_BZ2_bzCompress" >&5
$as_echo "$ac_cv_lib_bz2_BZ2_bzCompress" >&6; }
if test "x$ac_cv_lib_bz2_BZ2_bzCompress" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBBZ2 1
_ACEOF

LIBS="-lbz2 $LIBS"

fi

LIBS="$save_LIBS"

fi

done


for ac_header in lzma.h
do :
ac_fn_c_check_header_mongrel "$LINENO" "lzma.h" "ac_cv_header_lzma_h" "$ac_includes_default"
if test "x$ac_cv_header_lzma_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LZMA_H 1
_ACEOF

save_LIBS="$LIBS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lzma_easy_encoder in -llzma" >&5
$as_echo_n "checking for lzma_easy_encoder in -llzma... " >&6; }
if ${ac_cv_lib_lzma_lzma_easy_encoder+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-llzma $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. */
#ifdef __cplusplus
extern "C"
#endif
char lzma_easy_encoder ();
int
main ()
{
return lzma_easy_encoder ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_lzma_lzma_easy_encoder=yes
else
ac_cv_lib_lzma_lzma_easy_encoder=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lzma_lzma_easy_encoder" >&5
$as_echo "$ac_cv_lib_lzma_lzma_easy_encoder" >&6; }
if test "x$ac_cv_lib_lzma_lzma_easy_encoder" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBLZMA 1
_ACEOF

LIBS="-llzma $LIBS"

fi

LIBS="$save_LIBS"

fi

done




Expand Down
23 changes: 20 additions & 3 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -3831,9 +3831,26 @@ if test "$ac_cv_have_lchflags" = yes ; then
AC_DEFINE(HAVE_LCHFLAGS, 1, [Define to 1 if you have the 'lchflags' function.])
fi

# Check for compression libraries
dnl Check if system zlib has *Copy() functions
AC_CHECK_LIB(z, inflateCopy, AC_DEFINE(HAVE_ZLIB_COPY, 1, [Define if the zlib library has inflateCopy]))
dnl Check for compression libraries
AC_CHECK_HEADERS([zlib.h], [
save_LIBS="$LIBS"
AC_CHECK_LIB([z], [gzread])
LIBS="$save_LIBS"
AC_CHECK_LIB([z], [inflateCopy], [AC_DEFINE(HAVE_ZLIB_COPY, 1, [Define if the zlib library has inflateCopy])])
LIBS="$save_LIBS"
])

AC_CHECK_HEADERS([bzlib.h], [
save_LIBS="$LIBS"
AC_CHECK_LIB([bz2], [BZ2_bzCompress])
LIBS="$save_LIBS"
])

AC_CHECK_HEADERS([lzma.h], [
save_LIBS="$LIBS"
AC_CHECK_LIB([lzma], [lzma_easy_encoder])
LIBS="$save_LIBS"
])

PY_CHECK_FUNC([hstrerror], [#include <netdb.h>])

Expand Down
18 changes: 18 additions & 0 deletions pyconfig.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,9 @@
/* Has builtin __atomic_load_n() and __atomic_store_n() functions */
#undef HAVE_BUILTIN_ATOMIC

/* Define to 1 if you have the <bzlib.h> header file. */
#undef HAVE_BZLIB_H

/* Define to 1 if you have the 'chflags' function. */
#undef HAVE_CHFLAGS

Expand Down Expand Up @@ -580,6 +583,9 @@
/* Define to 1 if you have the `lchown' function. */
#undef HAVE_LCHOWN

/* Define to 1 if you have the `bz2' library (-lbz2). */
#undef HAVE_LIBBZ2

/* Define to 1 if you have the `dl' library (-ldl). */
#undef HAVE_LIBDL

Expand All @@ -592,6 +598,9 @@
/* Define to 1 if you have the <libintl.h> header file. */
#undef HAVE_LIBINTL_H

/* Define to 1 if you have the `lzma' library (-llzma). */
#undef HAVE_LIBLZMA

/* Define to build the readline module. */
#undef HAVE_LIBREADLINE

Expand All @@ -607,6 +616,9 @@
/* Define to 1 if you have the `uuid' library (-luuid). */
#undef HAVE_LIBUUID

/* Define to 1 if you have the `z' library (-lz). */
#undef HAVE_LIBZ

/* Define if you have the 'link' function. */
#undef HAVE_LINK

Expand Down Expand Up @@ -670,6 +682,9 @@
/* Define to 1 if you have the `lutimes' function. */
#undef HAVE_LUTIMES

/* Define to 1 if you have the <lzma.h> header file. */
#undef HAVE_LZMA_H

/* Define to 1 if you have the `madvise' function. */
#undef HAVE_MADVISE

Expand Down Expand Up @@ -1342,6 +1357,9 @@
/* 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 `_getpty' function. */
#undef HAVE__GETPTY

Expand Down
9 changes: 3 additions & 6 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -1634,10 +1634,7 @@ def detect_platform_specific_exts(self):

def detect_compress_exts(self):
# Andrew Kuchling's zlib module.
have_zlib = (
find_file('zlib.h', self.inc_dirs, []) is not None and
self.compiler.find_library_file(self.lib_dirs, 'z')
)
have_zlib = sysconfig.get_config_var("HAVE_LIBZ")
if have_zlib:
self.add(Extension('zlib', ['zlibmodule.c'],
libraries=['z']))
Expand All @@ -1657,14 +1654,14 @@ def detect_compress_exts(self):
libraries=libraries))

# Gustavo Niemeyer's bz2 module.
if (self.compiler.find_library_file(self.lib_dirs, 'bz2')):
if sysconfig.get_config_var("HAVE_LIBBZ2"):
self.add(Extension('_bz2', ['_bz2module.c'],
libraries=['bz2']))
else:
self.missing.append('_bz2')

# LZMA compression support.
if self.compiler.find_library_file(self.lib_dirs, 'lzma'):
if sysconfig.get_config_var("HAVE_LIBLZMA"):
self.add(Extension('_lzma', ['_lzmamodule.c'],
libraries=['lzma']))
else:
Expand Down