Browse Source

[1640_2] try full compilation for potential botan settings

for each output of -config or pkgconfig, try to see if it is not lying
Jelte Jansen 13 years ago
parent
commit
812cea2502
1 changed files with 93 additions and 11 deletions
  1. 93 11
      configure.ac

+ 93 - 11
configure.ac

@@ -495,6 +495,83 @@ if test "$lcov" != "no"; then
 fi
 AC_SUBST(USE_LCOV)
 
+# Simplified, non-caching AC_CHECK_PROG
+# Searches $PATH for the existence of argument 2,
+# and sets the full path to the variable in argument 1.
+# if not found, and a third argument is given, the value
+# is set to that.
+# Does not take full paths into account at this point,
+# and also works for single files only (arguments are not
+# stripped like in AC_CHECK_PROG)
+AC_DEFUN([ACX_CHECK_PROG_NONCACHE], [
+    RESULT=""
+    IFS_SAVED="$IFS"
+    IFS=":"
+    for cur_path in ${PATH} ; do
+      if test -e "${cur_path}/$2" ; then
+          RESULT="${cur_path}/$2"
+      fi
+    done
+    if test "$RESULT" = "" ; then
+        m4_ifvaln([$3], [$1=$3])
+    else
+        $1=$RESULT
+    fi
+    IFS="$IFS_SAVED"
+])
+
+# Botan helper test function
+# Tries to compile a program, given the output of the given
+# Arguments:
+# - name of tool (checked for path), must support --libs and --cflags
+# - fixed argument(s) for tool
+# - action if successful
+# - action if failed
+AC_DEFUN([ACX_TRY_BOTAN_TOOL], [
+    TOOL=$1
+    TOOL_ARG=$2
+    BOTAN_TOOL=""
+    ACX_CHECK_PROG_NONCACHE([BOTAN_TOOL], [${TOOL}], [""])
+    AC_MSG_CHECKING([for usability of ${TOOL} ${TOOL_ARG}])
+    if test "$BOTAN_TOOL" != "" ; then
+        if test -x ${BOTAN_TOOL}; then
+            BOTAN_LIBS=`$BOTAN_TOOL $TOOL_ARG --libs`
+            LIBS_SAVED=${LIBS}
+            LIBS="$LIBS $BOTAN_LIBS"
+            BOTAN_INCLUDES=`$BOTAN_TOOL $TOOL_ARG --cflags`
+            CPPFLAGS_SAVED=${CPPFLAGS}
+            CPPFLAGS="$BOTAN_INCLUDES $CPPFLAGS"
+            #AC_MSG_RESULT([found])
+            AC_LINK_IFELSE(
+                [AC_LANG_PROGRAM([#include <botan/botan.h>
+                                  #include <botan/hash.h>
+                                 ],
+                                 [using namespace Botan;
+                                  LibraryInitializer::initialize();
+                                  HashFunction *h = get_hash("MD5");
+                                 ])],
+                [ AC_MSG_RESULT([ok])
+                  $3
+                ],
+                [ AC_MSG_RESULT([not usable])
+                  $4
+                ]
+            )
+            LIBS=${LIBS_SAVED}
+            CPPFLAGS=${CPPFLAGS_SAVED}
+        else
+            AC_MSG_RESULT([not executable])
+            $4
+        fi
+    else
+        AC_MSG_RESULT([not found])
+        $4
+    fi
+    BOTAN_TOOL=""
+    AC_SUBST(BOTAN_TOOL)
+    ]
+)
+
 # Check for Botan
 botan_config="yes"
 AC_ARG_WITH([botan-config],
@@ -520,8 +597,11 @@ else
     # (1.8 is there just in case)
     BOTAN_CONFIG_VERSIONS="botan-config-1.10 botan-config-1.9 botan-config-1.8 botan-config"
     for botan_config in $BOTAN_CONFIG_VERSIONS; do
-        AC_PATH_PROG([BOTAN_CONFIG], [${botan_config}])
-        if test -x "${BOTAN_CONFIG}" ; then
+        ACX_TRY_BOTAN_TOOL([$botan_config],,
+                           [ BOTAN_CONFIG="$botan_config"  ],
+                           []
+                          )
+        if test "$BOTAN_CONFIG" != "" ; then
             break
         fi
     done
@@ -533,19 +613,18 @@ else
             # in their name, so we need to try them one by one
             BOTAN_VERSIONS="botan-1.10 botan-1.9 botan-1.8"
             for version in $BOTAN_VERSIONS; do
-                AC_MSG_CHECKING([Checking botan version with pkg-config $version])
-                
-                if [ $PKG_CONFIG --exists ${version} ]; then
-                    AC_MSG_RESULT([found])
-                    BOTAN_CONFIG="$PKG_CONFIG ${version}"
-                    break
-                else
-                    AC_MSG_RESULT([not found])
-                fi
+                ACX_TRY_BOTAN_TOOL([pkg-config], ["$version --silence-errors"],
+                                   [ BOTAN_CONFIG="$PKG_CONFIG $version" ],
+                                   []
+                                  )
+            if test "$BOTAN_CONFIG" != "" ; then
+                break
+            fi
             done
         fi
     fi
 fi
+
 if test "x${BOTAN_CONFIG}" != "x"
 then
     BOTAN_LIBS=`${BOTAN_CONFIG} --libs`
@@ -593,6 +672,9 @@ AC_SUBST(BOTAN_LDFLAGS)
 AC_SUBST(BOTAN_LIBS)
 AC_SUBST(BOTAN_INCLUDES)
 
+# Even though chances are high we already performed a real compilation check
+# in the search for the right (pkg)config data, we try again here, to
+# be sure.
 CPPFLAGS_SAVED=$CPPFLAGS
 CPPFLAGS="$BOTAN_INCLUDES $CPPFLAGS"
 LIBS_SAVED="$LIBS"