* configure.ac (LIBGCRYPT_CONFIG_SONAME_NUMBER): New.
authorWerner Koch <wk@gnupg.org>
Fri, 5 Mar 2004 13:57:47 +0000 (13:57 +0000)
committerWerner Koch <wk@gnupg.org>
Fri, 5 Mar 2004 13:57:47 +0000 (13:57 +0000)
* libgcrypt.m4: Optionally check the SONAME number.

* libgcrypt-config.in: Add option --soname-number

ChangeLog
README.apichanges
configure.ac
src/ChangeLog
src/libgcrypt-config.in
src/libgcrypt.m4

index dae3f55..ebf9a1b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2004-03-05  Werner Koch  <wk@gnupg.org>
+
+       * configure.ac (LIBGCRYPT_CONFIG_SONAME_NUMBER): New.
+
 2004-02-20  Werner Koch  <wk@gnupg.org>
 
         Released 1.1.92.
index a19b44f..d6510f6 100644 (file)
@@ -29,7 +29,7 @@ there won't be another need for such a major change.
 * Initialization
 
   For proper initialization of the library, you must call
-  gcry_check_version() before calling any other function except for a
+  gcry_check_version() before calling any other function except for
   these gcry_control operations:
      GCRYCTL_SUSPEND_SECMEM_WARN
      GCRYCTL_DISABLE_INTERNAL_LOCKING
index 87d791c..792d438 100644 (file)
@@ -80,6 +80,7 @@ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
 ##########################
 
 # Used by libgcrypt-config
+LIBGCRYPT_CONFIG_SONAME_NUMBER=`expr $LIBGCRYPT_LT_CURRENT - $LIBGCRYPT_LT_AGE`
 LIBGCRYPT_CONFIG_LIBS="-lgcrypt"
 LIBGCRYPT_CONFIG_CFLAGS=""
 LIBGCRYPT_CONFIG_LIBS_PTHREAD="-lgcrypt-pthread"
@@ -654,6 +655,7 @@ fi
 #
 GNUPG_FIX_HDR_VERSION([src/gcrypt.h], GCRYPT_VERSION)
 
+AC_SUBST(LIBGCRYPT_CONFIG_SONAME_NUMBER)
 AC_SUBST(LIBGCRYPT_CONFIG_LIBS)
 AC_SUBST(LIBGCRYPT_CONFIG_CFLAGS)
 AC_SUBST(LIBGCRYPT_CONFIG_LIBS_PTHREAD)
index 96ef5a7..b4dac77 100644 (file)
@@ -1,3 +1,9 @@
+2004-03-05  Werner Koch  <wk@gnupg.org>
+
+       * libgcrypt.m4: Optionally check the SONAME number.
+
+       * libgcrypt-config.in: Add option --soname-number
+
 2004-03-01  Marcus Brinkmann  <marcus@g10code.de>
 
        * Makefile.am (libgcrypt_la_SOURCES): Add ath.c.
index a6b2e98..8792f72 100644 (file)
@@ -1,5 +1,5 @@
 #!/bin/sh
-#    Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2002, 2003, 2004 Free Software Foundation, Inc.
 #
 # This file is free software; as a special exception the author gives
 # unlimited permission to copy and/or distribute it, with or without
@@ -27,6 +27,9 @@ cflags="@LIBGCRYPT_CONFIG_CFLAGS@"
 cflags_pthread="@LIBGCRYPT_CONFIG_CFLAGS_PTHREAD@"
 cflags_pth="@LIBGCRYPT_CONFIG_CFLAGS_PTH@"
 
+# SONAME info
+soname_number="@LIBGCRYPT_CONFIG_SONAME_NUMBER@"
+
 # Misc information.
 symmetric_ciphers="@LIBGCRYPT_CIPHERS@"
 asymmetric_ciphers="@LIBGCRYPT_PUBKEY_CIPHERS@"
@@ -40,6 +43,7 @@ echo_prefix=no
 echo_algorithms=no
 echo_exec_prefix=no
 echo_version=no
+echo_soname_number=no
 
 # Prints usage information.
 usage()
@@ -51,6 +55,7 @@ Options:
        [--prefix]
        [--exec-prefix]
        [--version]
+        [--soname-number]
        [--libs]
        [--cflags]
        [--algorithms]
@@ -100,6 +105,9 @@ while test $# -gt 0; do
        --version)
            echo_version=yes
            ;;
+        --soname-number)
+            echo_soname_number=yes
+            ;;
        --cflags)
            echo_cflags=yes
            ;;
@@ -184,6 +192,10 @@ if test "$echo_version" = "yes"; then
     echo "$version"
 fi
 
+if test "$echo_soname_number" = "yes"; then
+    echo "$soname_number"
+fi
+
 if test "$echo_algorithms" = "yes"; then
     echo "Symmetric cipher algorithms: $symmetric_ciphers"
     echo "Public-key cipher algorithms: $asymmetric_ciphers"
index 0e8ab58..fedebe0 100644 (file)
@@ -1,5 +1,5 @@
 dnl Autoconf macros for libgcrypt
-dnl       Copyright (C) 2002 Free Software Foundation, Inc.
+dnl       Copyright (C) 2002, 2004 Free Software Foundation, Inc.
 dnl
 dnl This file is free software; as a special exception the author gives
 dnl unlimited permission to copy and/or distribute it, with or without
@@ -13,6 +13,12 @@ dnl implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION,
 dnl                   [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
 dnl Test for liblibgcrypt and define LIBGCRYPT_CFLAGS and LIBGCRYPT_LIBS
+dnl MINIMUN-VERSION is a string with the version number optionalliy suffixed
+dnl with the SONAME number to also check the ABI compatibility. Example:
+dnl a MINIMUN-VERSION of 1.2.5:11 won't pass the test unless the installed 
+dnl version of libgcrypt is at least 1.2.5 *and* the ABI number is 11.  Using
+dnl this features allows to prevent build agains newer versions of libgcrypt
+dnl with a changed ABI.
 dnl
 AC_DEFUN(AM_PATH_LIBGCRYPT,
 [ AC_ARG_WITH(libgcrypt-prefix,
@@ -26,7 +32,15 @@ AC_DEFUN(AM_PATH_LIBGCRYPT,
   fi
 
   AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config, no)
-  min_libgcrypt_version=ifelse([$1], ,0.4.4,$1)
+  tmp=ifelse([$1], ,1.2.0,$1)
+  if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
+     req_libgcrypt_soname_no=`echo "$tmp" | sed 's/[[^:]]*:\([[0-9]]*\).*/\1/'`
+     min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):.*/\1/'`
+  else
+     req_libgcrypt_soname_no=0
+     min_libgcrypt_version="$tmp"
+  fi
+
   AC_MSG_CHECKING(for LIBGCRYPT - version >= $min_libgcrypt_version)
   ok=no
   if test "$LIBGCRYPT_CONFIG" != "no" ; then
@@ -36,7 +50,7 @@ AC_DEFUN(AM_PATH_LIBGCRYPT,
                sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
     req_micro=`echo $min_libgcrypt_version | \
                sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
-    libgcrypt_config_version=`$LIBGCRYPT_CONFIG $libgcrypt_config_args --version`
+    libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version`
     major=`echo $libgcrypt_config_version | \
                sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
     minor=`echo $libgcrypt_config_version | \
@@ -60,14 +74,33 @@ AC_DEFUN(AM_PATH_LIBGCRYPT,
     fi
   fi
   if test $ok = yes; then
-    LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG $libgcrypt_config_args --cflags`
-    LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG $libgcrypt_config_args --libs`
     AC_MSG_RESULT(yes)
+  else
+    AC_MSG_RESULT(no)
+  fi
+  if test $ok = yes; then
+     # If we have a recent libgcrypt, we should also check that the
+     # ABI is compatible; i.e. that the SONAME number matches.
+     if test "$req_libgcrypt_soname_no" -gt 0 ; then
+        tmp=`$LIBGCRYPT_CONFIG --soname-number 2>/dev/null || echo 0`
+        if test "$tmp" -gt 0 ; then
+           AC_MSG_CHECKING(for LIBGCRYPT ABI $req_libgcrypt_soname_no)
+           if test "$req_libgcrypt_soname_no" -eq "$tmp" ; then
+              AC_MSG_RESULT(yes)
+           else
+              ok=no
+              AC_MSG_RESULT([no (have $tmp)])
+           fi
+        fi
+     fi
+  fi
+  if test $ok = yes; then
+    LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
+    LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
     ifelse([$2], , :, [$2])
   else
     LIBGCRYPT_CFLAGS=""
     LIBGCRYPT_LIBS=""
-    AC_MSG_RESULT(no)
     ifelse([$3], , :, [$3])
   fi
   AC_SUBST(LIBGCRYPT_CFLAGS)