Re: How about some AC_MSG for dlopen?
Andreas Metzler <[email protected]> Tue, 20 Aug 2024 13:48:49 +0200
| Newsgroups | gmane.network.gnutls.general |
|---|---|
| Message-ID | <[email protected]> |
--U1pULZ6FvLmjd/A3 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On 2024-08-19 Daiki Ueno <[email protected]> wrote: > Andreas Metzler <[email protected]> writes: > > On 2024-08-17 Daiki Ueno <[email protected]> wrote: > >> Andreas Metzler <[email protected]> writes: > >> > ./configure is quiet about whether dlopening librariers is supported, > >> > would it make sense to a) add messages and perhaps b) provide a switch > >> > to force use of linking instead? [...] > I would prefer to have the option per library, because some of the > libraries are less likely to be available than the others (e.g., > tpm2-tss vs. zlib). [...] Hello, Per-library quadstate ends up being rather wordy, see attached example for handling zlib that way. I have thought about it but cannot see a substantial abbreviation potential ad_hoc, there are 8 cases to handle. - Do you want me follow-up, extending this approach to brotli/zstd/tpm? The global switch is obviously simpler. cu Andreas --U1pULZ6FvLmjd/A3 Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="zlib-select-dlopen.diff" diff --git a/configure.ac b/configure.ac index 47a7c7601b..627990eaa4 100644 --- a/configure.ac +++ b/configure.ac @@ -975,10 +975,13 @@ AC_RUN_IFELSE( [ac_cv_dlopen_soname_works=no], [ac_cv_dlopen_soname_works=cross-compiling]) AM_CONDITIONAL([ENABLE_DLOPEN], [test "$ac_cv_dlopen_soname_works" = yes]) need_ltlibdl=no +AS_IF([test "$ac_cv_dlopen_soname_works" = yes], + [AC_MSG_NOTICE([Can dlopen helper-libraries])], + [AC_MSG_NOTICE([Need to link against helper-libraries])]) AC_ARG_WITH(tpm2, AS_HELP_STRING([--without-tpm2], [Disable TPM2 support.]), [with_tpm2=$withval], [with_tpm2=auto]) @@ -1091,48 +1094,79 @@ AC_SUBST(TROUSERS_LIB) # For minitasn1. AC_CHECK_SIZEOF(unsigned long int, 4) AC_CHECK_SIZEOF(unsigned int, 4) AC_CHECK_SIZEOF(time_t, 4) -AC_ARG_WITH(zlib, AS_HELP_STRING([--without-zlib], - [disable zlib compression support]), - ac_zlib=$withval, ac_zlib=yes) +AC_ARG_WITH(zlib, + [AS_HELP_STRING([--with-zlib=yes/link/dlopen/no --without-zlib], + [customize/disable zlib compression support])], + ac_zlib=$withval, ac_zlib=try) if test x$ac_zlib != xno; then PKG_CHECK_EXISTS(zlib, ZLIB_HAS_PKGCONFIG=y, ZLIB_HAS_PKGCONFIG=n) if test "$ZLIB_HAS_PKGCONFIG" = "y" ; then PKG_CHECK_MODULES(ZLIB, [zlib]) - ac_zlib=yes + ac_zlib=found-${ac_zlib} else AC_LIB_HAVE_LINKFLAGS(z,, [#include <zlib.h>], [compress (0, 0, 0, 0);]) if test x$ac_cv_libz != xyes; then AC_MSG_WARN([[ *** *** ZLIB was not found. You will not be able to use ZLIB compression. *** ]]) + ac_zlib=notfound-${ac_zlib} + else + ac_zlib=found-${ac_zlib} fi - ac_zlib=$ac_cv_libz ZLIB_LIBS=$LIBZ LIBZ_PC=$LIBZ fi fi +AS_IF([test "$ac_zlib" = "notfound-yes" || test "$ac_zlib" = "notfound-link" || test "$ac_zlib" = "notfound-dlopen"], + AC_MSG_ERROR([zlib requested but not available]), + [test "$ac_zlib" = "found-dlopen" && test "$ac_cv_dlopen_soname_works" != "yes"], + AC_MSG_ERROR([dlopened zlib requested but dlopening not available])) + +case $ac_zlib in + no|notfound-try) + ac_zlib=no + ;; + found-link) + ac_zlib=link + ;; + found-dlopen) + ac_zlib=dlopen + ;; + found-try|found-yes) + if test "$ac_cv_dlopen_soname_works" = yes ; then + ac_zlib=dlopen + else + ac_zlib=link + fi + ;; + *) + AC_MSG_ERROR([autoconf coding error, should not be reached]) + ;; +esac + if test x$ac_zlib != xno; then AC_DEFINE([HAVE_LIBZ], 1, [Define if ZLIB compression is enabled.]) need_ltlibdl=yes fi -AM_CONDITIONAL(HAVE_ZLIB, test "$ac_zlib" = "yes") +AM_CONDITIONAL(HAVE_ZLIB, test "$ac_zlib" != "no") AC_SUBST(LIBZ_PC) -AS_IF([test "$ac_cv_dlopen_soname_works" = yes], [ +AM_CONDITIONAL([ZLIB_ENABLE_DLOPEN], [test "$ac_zlib" = dlopen]) +AS_IF([test "$ac_zlib" = dlopen], [ save_LIBS=$LIBS LIBS="$LIBS $ZLIB_LIBS" LIBGNUTLS_CHECK_SONAME([z], [AC_LANG_PROGRAM([ #include <zlib.h>],[ compress (0, 0, 0, 0);])]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" ], - [test "$ZLIB_HAS_PKGCONFIG" = y && test "$ac_zlib" = yes], [ + [test "$ZLIB_HAS_PKGCONFIG" = y && test "$ac_zlib" = link], [ if test "x$GNUTLS_REQUIRES_PRIVATE" = x; then GNUTLS_REQUIRES_PRIVATE="Requires.private: zlib" else GNUTLS_REQUIRES_PRIVATE="$GNUTLS_REQUIRES_PRIVATE, zlib" fi diff --git a/lib/Makefile.am b/lib/Makefile.am index d932b585d4..7b7e69403c 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -92,11 +92,11 @@ COBJECTS = range.c record.c compress.c debug.c cipher.c gthreads.h handshake-tls if HAVE_ZLIB COBJECTS += dlwrap/zlib.c dlwrap/zlibfuncs.h dlwrap/zlib.h AM_CPPFLAGS += $(ZLIB_CFLAGS) -if ENABLE_DLOPEN +if ZLIB_ENABLE_DLOPEN AM_CPPFLAGS += -DGNUTLS_ZLIB_ENABLE_DLOPEN=1 else thirdparty_libadd += $(ZLIB_LIBS) endif endif --U1pULZ6FvLmjd/A3 Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="global_dlopen_yesno_option.diff" diff --git a/configure.ac b/configure.ac index 47a7c7601b..f8f04096b1 100644 --- a/configure.ac +++ b/configure.ac @@ -953,33 +953,48 @@ fi AM_CONDITIONAL(P11KIT_0_23_11_API, $PKG_CONFIG --atleast-version=0.23.11 p11-kit-1) AM_CONDITIONAL(ENABLE_PKCS11, test "$with_p11_kit" != "no") -save_LIBS=$LIBS -LIBS="$LIBS -lm" -LIBGNUTLS_CHECK_SONAME([m], [AC_LANG_PROGRAM([ - #include <math.h>],[ - trunc (0);])]) -LIBS="$save_LIBS" -CFLAGS="$save_CFLAGS" - -AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[#include <dlfcn.h> - #include <stdlib.h> - ]], - [[void *handle = dlopen("$M_LIBRARY_SONAME", RTLD_LAZY | RTLD_GLOBAL); - return handle != NULL ? 0 : 1; - ]])], - [ac_cv_dlopen_soname_works=yes], - [ac_cv_dlopen_soname_works=no], - [ac_cv_dlopen_soname_works=cross-compiling]) +AC_ARG_ENABLE([dlopen-libs], + [AS_HELP_STRING([--disable-dlopen-libs], + [link against instead of dlopening some helper-libraries])], + [ac_dlopen_libs=$enableval], + [ac_dlopen_libs=try]) + +AS_IF([test "$ac_dlopen_libs" != "no"], + [save_LIBS=$LIBS + LIBS="$LIBS -lm" + LIBGNUTLS_CHECK_SONAME([m], [AC_LANG_PROGRAM([ + #include <math.h>],[ + trunc (0);])]) + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <dlfcn.h> + #include <stdlib.h> + ]], + [[void *handle = dlopen("$M_LIBRARY_SONAME", RTLD_LAZY | RTLD_GLOBAL); + return handle != NULL ? 0 : 1; + ]])], + [ac_cv_dlopen_soname_works=yes], + [ac_cv_dlopen_soname_works=no], + [ac_cv_dlopen_soname_works=cross-compiling])], + [ac_cv_dlopen_soname_works=no]) AM_CONDITIONAL([ENABLE_DLOPEN], [test "$ac_cv_dlopen_soname_works" = yes]) need_ltlibdl=no +AS_IF([test "$ac_cv_dlopen_soname_works" = yes], + AC_MSG_RESULT([will dlopen helper-libraries]), + [test "$ac_dlopen_libs" = "yes"], + AC_MSG_ERROR([--enable-dlopen-libs requested but not available]), + AC_MSG_RESULT([will link against instead of dlopening helper-libraries])) + + AC_ARG_WITH(tpm2, AS_HELP_STRING([--without-tpm2], [Disable TPM2 support.]), [with_tpm2=$withval], [with_tpm2=auto]) AS_IF([test "$with_tpm2" != no], [ --U1pULZ6FvLmjd/A3 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Gnutls-help mailing list [email protected] http://lists.gnupg.org/mailman/listinfo/gnutls-help --U1pULZ6FvLmjd/A3--