A gnulib testdir created through ./gnulib-tool --create-testdir --dir=../testdir1 --single-configure crypto/gc-md5
when built with ./configure --with-libgcrypt && make fails with gcc -g -O2 -o test-gc-md5 test-gc-md5.o libtests.a ../gllib/libgnu.a libtests.a ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_init': /tmp/testdir1/gllib/gc-libgcrypt.c:51: undefined reference to `gcry_control' /tmp/testdir1/gllib/gc-libgcrypt.c:54: undefined reference to `gcry_control' /tmp/testdir1/gllib/gc-libgcrypt.c:57: undefined reference to `gcry_check_version' /tmp/testdir1/gllib/gc-libgcrypt.c:60: undefined reference to `gcry_control' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_cipher_open': /tmp/testdir1/gllib/gc-libgcrypt.c:185: undefined reference to `gcry_cipher_open' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_cipher_setkey': /tmp/testdir1/gllib/gc-libgcrypt.c:198: undefined reference to `gcry_cipher_setkey' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_cipher_setiv': /tmp/testdir1/gllib/gc-libgcrypt.c:210: undefined reference to `gcry_cipher_setiv' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_cipher_encrypt_inline': /tmp/testdir1/gllib/gc-libgcrypt.c:220: undefined reference to `gcry_cipher_encrypt' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_cipher_decrypt_inline': /tmp/testdir1/gllib/gc-libgcrypt.c:230: undefined reference to `gcry_cipher_decrypt' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_cipher_close': /tmp/testdir1/gllib/gc-libgcrypt.c:240: undefined reference to `gcry_cipher_close' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_hash_open': /tmp/testdir1/gllib/gc-libgcrypt.c:344: undefined reference to `gcry_md_open' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_hash_clone': /tmp/testdir1/gllib/gc-libgcrypt.c:370: undefined reference to `gcry_md_copy' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_hash_read': /tmp/testdir1/gllib/gc-libgcrypt.c:488: undefined reference to `gcry_md_ctl' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_hash_close': /tmp/testdir1/gllib/gc-libgcrypt.c:506: undefined reference to `gcry_md_close' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_hash_buffer': /tmp/testdir1/gllib/gc-libgcrypt.c:587: undefined reference to `gcry_md_hash_buffer' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_md5': /tmp/testdir1/gllib/gc-libgcrypt.c:639: undefined reference to `gcry_md_get_algo_dlen' /tmp/testdir1/gllib/gc-libgcrypt.c:646: undefined reference to `gcry_md_open' /tmp/testdir1/gllib/gc-libgcrypt.c:650: undefined reference to `gcry_md_write' /tmp/testdir1/gllib/gc-libgcrypt.c:652: undefined reference to `gcry_md_read' /tmp/testdir1/gllib/gc-libgcrypt.c:661: undefined reference to `gcry_md_close' /tmp/testdir1/gllib/gc-libgcrypt.c:655: undefined reference to `gcry_md_close' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_set_allocators': /tmp/testdir1/gllib/gc-libgcrypt.c:109: undefined reference to `gcry_set_allocation_handler' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_hash_hmac_setkey': /tmp/testdir1/gllib/gc-libgcrypt.c:444: undefined reference to `gcry_md_setkey' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_hash_write': /tmp/testdir1/gllib/gc-libgcrypt.c:462: undefined reference to `gcry_md_write' ../gllib/libgnu.a(gc-libgcrypt.o): In function `gc_hash_read': /tmp/testdir1/gllib/gc-libgcrypt.c:489: undefined reference to `gcry_md_read' collect2: error: ld returned 1 exit status Makefile:2673: recipe for target 'test-gc-md5' failed make[4]: *** [test-gc-md5] Error 1 Similarly for crypto/gc-sha1, crypto/gc-md2, crypto/gc-md4, crypto/gc-rijndael, and crypto/gc-sm3. This patch fixes it. 2019-08-24 Bruno Haible <br...@clisp.org> crypto/gc: Fix link error with --with-libgcrypt. * m4/gc.m4 (gl_GC): Set LIB_CRYPTO to the value found by the AC_LIB_HAVE_LINKFLAGS invocation. diff --git a/m4/gc.m4 b/m4/gc.m4 index 954459a..a5d8f92 100644 --- a/m4/gc.m4 +++ b/m4/gc.m4 @@ -1,4 +1,4 @@ -# gc.m4 serial 11 +# gc.m4 serial 12 dnl Copyright (C) 2005-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -6,7 +6,6 @@ dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC], [ - AC_SUBST([LIB_CRYPTO]) AC_ARG_WITH([libgcrypt], AS_HELP_STRING([--with-libgcrypt], [use libgcrypt for low-level crypto]), libgcrypt=$withval, libgcrypt=no) @@ -15,11 +14,15 @@ AC_DEFUN([gl_GC], # version 1.4.4 or later, so test for it early. */ gl_good_gcrypt=no AM_PATH_LIBGCRYPT([1.4.4], [gl_good_gcrypt=yes], - [AC_MSG_ERROR([libgcrypt is too old])]) + [AC_MSG_ERROR([libgcrypt is too old])]) if test "x$gl_good_gcrypt" != xno; then + dnl Ignore the value of LIBGCRYPT_LIBS, because it does not include + dnl '-lgpg-error'. AC_LIB_HAVE_LINKFLAGS([gcrypt], [gpg-error], [#include <gcrypt.h>]) + LIB_CRYPTO="$LIBGCRYPT" else AC_MSG_ERROR([libgcrypt not found]) fi fi + AC_SUBST([LIB_CRYPTO]) ])