From dcaccc8b722cee279c00bb321baa48ae73563931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Do=C4=9Fan=20=C3=87e=C3=A7en?= Date: Wed, 4 Dec 2024 12:10:11 +0200 Subject: [PATCH] daemon: Fix linking gcrypt when --as-needed linker arg is used MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a followup to 8a7bd211d21f06c1234fbb82bb905d202d58f598. As it is mentioned in autoconf manual that library names should be specified in LIBS, not LDFLAGS. See: https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.72/html_node/Preset-Output-Variables.html#index-LDFLAGS-2 This change also brings back the save_* vars trick that was there before. I missed in my earlier change that nix/local.mk was referring LIBGCRYPT_* vars directly. And, instead of CXXFLAGS, CPPFLAGS is used since the latter is probably more correct as this is used for include dirs, therefore using preprocessor flags. Tested with ./configure LDFLAGS="-Wl,--as-needed" --with-libgcrypt-prefix=... combinations. * config-daemon.ac: Set ‘LIBGCRYPT_CPPFLAGS’ instead of ‘LIBGCRYPT_CXXFLAGS’. Set ‘LIBGCRYPT_LIBS’ in addition to ‘LIBGCRYPT_LDFLAGS’. Save and restore ‘CPPFLAGS’, ‘LDFLAGS’, and ‘LIBS’ around test. * nix/local.mk (libutil_a_CPPFLAGS): Add $(LIBGCRYPT_CPPFLAGS). (libstore_a_CXXFLAGS): Remove $(LIBGCRYPT_CFLAGS). (guix_daemon_LDFLAGS): New variable. Change-Id: Iadb10e1994c9a78e2927847af2cfe5e096fbb2a8 Signed-off-by: Ludovic Courtès --- config-daemon.ac | 20 ++++++++++++++------ nix/local.mk | 8 ++++++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/config-daemon.ac b/config-daemon.ac index 1ac204ceed..6731c68bc3 100644 --- a/config-daemon.ac +++ b/config-daemon.ac @@ -39,27 +39,32 @@ if test "x$guix_build_daemon" = "xyes"; then case "$LIBGCRYPT_PREFIX" in no) - LIBGCRYPT_CXXFLAGS="" + LIBGCRYPT_CPPFLAGS="" ;; *) - LIBGCRYPT_CXXFLAGS="-I$LIBGCRYPT_PREFIX/include" + LIBGCRYPT_CPPFLAGS="-I$LIBGCRYPT_PREFIX/include" ;; esac case "$LIBGCRYPT_LIBDIR" in no | "") - LIBGCRYPT_LDFLAGS="-lgcrypt" ;; *) - LIBGCRYPT_LDFLAGS="-L$LIBGCRYPT_LIBDIR -lgcrypt" + LIBGCRYPT_LDFLAGS="-L$LIBGCRYPT_LIBDIR" ;; esac - AC_SUBST([LIBGCRYPT_CXXFLAGS]) + LIBGCRYPT_LIBS="-lgcrypt" + AC_SUBST([LIBGCRYPT_CPPFLAGS]) AC_SUBST([LIBGCRYPT_LDFLAGS]) + AC_SUBST([LIBGCRYPT_LIBS]) - CXXFLAGS="$CXXFLAGS $LIBGCRYPT_CXXFLAGS" + save_CPPFLAGS="$CPPFLAGS" + save_LDFLAGS="$LDFLAGS" + save_LIBS="$LIBS" + CPPFLAGS="$CPPFLAGS $LIBGCRYPT_CPPFLAGS" LDFLAGS="$LDFLAGS $LIBGCRYPT_LDFLAGS" + LIBS="$LIBS $LIBGCRYPT_LIBS" have_gcrypt=yes AC_CHECK_LIB([gcrypt], [gcry_md_open], [:], [have_gcrypt=no]) @@ -67,6 +72,9 @@ if test "x$guix_build_daemon" = "xyes"; then if test "x$have_gcrypt" != "xyes"; then AC_MSG_ERROR([GNU libgcrypt not found; please install it.]) fi + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" dnl Chroot support. AC_CHECK_FUNCS([chroot unshare]) diff --git a/nix/local.mk b/nix/local.mk index 8a2b2b88e8..0d23a48a02 100644 --- a/nix/local.mk +++ b/nix/local.mk @@ -69,7 +69,8 @@ libutil_headers = \ libutil_a_CPPFLAGS = \ -I$(top_builddir)/nix \ -I$(top_srcdir)/%D%/libutil \ - $(libformat_a_CPPFLAGS) + $(libformat_a_CPPFLAGS) \ + $(LIBGCRYPT_CPPFLAGS) libstore_a_SOURCES = \ %D%/libstore/gc.cc \ @@ -109,7 +110,7 @@ libstore_a_CPPFLAGS = \ -DDEFAULT_CHROOT_DIRS="\"\"" libstore_a_CXXFLAGS = $(AM_CXXFLAGS) \ - $(SQLITE3_CFLAGS) $(LIBGCRYPT_CFLAGS) + $(SQLITE3_CFLAGS) bin_PROGRAMS = guix-daemon @@ -122,6 +123,9 @@ guix_daemon_CPPFLAGS = \ $(libutil_a_CPPFLAGS) \ -I$(top_srcdir)/%D%/libstore +guix_daemon_LDFLAGS = \ + $(LIBGCRYPT_LDFLAGS) + guix_daemon_LDADD = \ libstore.a libutil.a libformat.a -lz \ $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS)