On 2024-08-21 Daiki Ueno <[email protected]> wrote:
> Andreas Metzler <[email protected]> writes:
[...]
>> 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?

> Thanks.  A couple of comments:
[...]
> - I would first normalize the argument for --with-*, something like:

>   AC_ARG_WITH(zstd,
>               AS_HELP_STRING([--without-zstd], [disable zstd compression 
> support]),
>               with_zstd=$withval, with_zstd=yes)

>   AS_CASE([$with_zstd],
>           [yes], [AM_COND_IF([ENABLE_DLOPEN], [with_zstd=dlopen], 
> [with_zstd=link])],
>           [dlopen], [AM_COND_IF([ENABLE_DLOPEN], [:], [AC_MSG_ERROR([[
>   ***
>   *** Unable to dlopen ZSTD, try --with-zstd=link.
>   *** ]])])],
>           [link], [:],
>           [no], [:],
>           [AC_MSG_ERROR([[Unknown argument $with_zstd for --with-zstd]])])

>   So afterwards $with_zstd should only be dlopen, link, or no.
[...]

Hello,

Thanks for the handholding, that helped quite a bit.

It is not quite that simple, I would expect
./configure --with-zstd
to abort with an error if zstd support cannot be enabled, i.e.
--with-zstd and not specifiying --with-zstd are not the same.

cu Andreas

-- 
`What a good friend you are to him, Dr. Maturin. His other friends are
so grateful to you.'
`I sew his ears on from time to time, sure'
diff --git a/configure.ac b/configure.ac
index 47a7c7601b..4dd22b2362 100644
--- a/configure.ac
+++ b/configure.ac
@@ -953,10 +953,11 @@ 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")
 
+AC_MSG_CHECKING([whether we can dlopen helper-libraries])
 save_LIBS=$LIBS
 LIBS="$LIBS -lm"
 LIBGNUTLS_CHECK_SONAME([m], [AC_LANG_PROGRAM([
                #include <math.h>],[
                trunc (0);])])
@@ -969,12 +970,14 @@ AC_RUN_IFELSE(
       #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=yes]
+  [AC_MSG_RESULT(yes)],
+  [ac_cv_dlopen_soname_works=no]
+  AC_MSG_RESULT([no]),
   [ac_cv_dlopen_soname_works=cross-compiling])
 
 AM_CONDITIONAL([ENABLE_DLOPEN], [test "$ac_cv_dlopen_soname_works" = yes])
 need_ltlibdl=no
 
@@ -1091,48 +1094,56 @@ 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)
-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
-    else
-	AC_LIB_HAVE_LINKFLAGS(z,, [#include <zlib.h>], [compress (0, 0, 0, 0);])
-	if test x$ac_cv_libz != xyes; then
+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=yes zlib_optional=yes)
+AS_CASE([$ac_zlib],
+  [yes],
+    [AM_COND_IF([ENABLE_DLOPEN], [ac_zlib=dlopen], [ac_zlib=link])],
+  [dlopen],
+    [AM_COND_IF([ENABLE_DLOPEN], [:],[AC_MSG_ERROR([[
+***
+*** Unable to dlopen ZLIB, try --with-zlib=link.
+*** ]])])],
+  [link], [:],
+  [no], [:],
+  [AC_MSG_ERROR([[Unknown argument ac_zlib for --with-zlib]])])
+
+
+AS_IF([test x$ac_zlib != xno],
+    [PKG_CHECK_MODULES([ZLIB],[zlib],,
+	    [ac_zlib=no
+      AS_IF([test x$zlib_optional != xyes],
+        AC_MSG_ERROR([zlib requested but not available]))
 	    AC_MSG_WARN([[
 *** 
 *** ZLIB was not found. You will not be able to use ZLIB compression.
 *** ]])
-        fi
-	ac_zlib=$ac_cv_libz
-	ZLIB_LIBS=$LIBZ
-	LIBZ_PC=$LIBZ
-    fi
-fi
+      ])])
+
 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 "$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
_______________________________________________
Gnutls-help mailing list
[email protected]
http://lists.gnupg.org/mailman/listinfo/gnutls-help

Reply via email to