~ruther/guix-local

dcaccc8b722cee279c00bb321baa48ae73563931 — Doğan Çeçen 1 year, 11 months ago b0421cc
daemon: Fix linking gcrypt when --as-needed linker arg is used

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 <ludo@gnu.org>
2 files changed, 20 insertions(+), 8 deletions(-)

M config-daemon.ac
M nix/local.mk
M config-daemon.ac => config-daemon.ac +14 -6
@@ 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])

M nix/local.mk => nix/local.mk +6 -2
@@ 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)