build: Add check for required Crypto++ library

Change-Id: I3e4db0e3b3d2c00f0a66dda0c69c4325b836b75e
diff --git a/m4/ax_lib_cryptopp.m4 b/m4/ax_lib_cryptopp.m4
new file mode 100644
index 0000000..f4f51fd
--- /dev/null
+++ b/m4/ax_lib_cryptopp.m4
@@ -0,0 +1,101 @@
+# SYNOPSIS
+#
+#   AX_LIB_CRYPTOPP([ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
+#
+# DESCRIPTION
+#
+#   Test for the Crypto++ library
+#
+#   If no intallation prefix to the installed Crypto++ library is given the
+#   macro searches under /usr, /usr/local, and /opt.
+#
+#   This macro calls:
+#
+#     AC_SUBST(CRYPTOPP_INCLUDES)
+#     AC_SUBST(CRYPTOPP_LDFLAGS)
+#     AC_SUBST(CRYPTOPP_LIBS)
+#
+#   And sets:
+#
+#     HAVE_CRYPTOPP
+
+AC_DEFUN([AX_LIB_CRYPTOPP],
+[
+    AC_ARG_WITH([cryptopp],
+        AS_HELP_STRING(
+            [--with-cryptopp=@<:@ARG@:>@],
+            [use Crypto++ library @<:@default=yes@:>@, optionally specify the prefix for the library]
+        ),
+        [
+        if test "$withval" = "no"; then
+            WANT_CRYPTOPP="no"
+        elif test "$withval" = "yes"; then
+            WANT_CRYPTOPP="yes"
+            ac_cryptopp_path=""
+        else
+            WANT_CRYPTOPP="yes"
+            ac_cryptopp_path="$withval"
+        fi
+        ],
+        [WANT_CRYPTOPP="yes"]
+    )
+
+    CRYPTOPP_CFLAGS=""
+    CRYPTOPP_LDFLAGS=""
+    CRYPTOPP_LIBS=""
+
+    if test "x$WANT_CRYPTOPP" = "xyes"; then
+
+        AC_MSG_CHECKING([for Crypto++ library])
+
+        ac_cryptopp_header="cryptopp/cryptlib.h"
+        ac_cryptopp_libs="-lcryptopp"
+
+        if test "$ac_cryptopp_path" != ""; then
+            ac_cryptopp_ldflags="-L$ac_cryptopp_path/lib"
+            ac_cryptopp_cppflags="-I$ac_cryptopp_path/include"
+        else
+            for ac_cryptopp_path_tmp in /usr /usr/local /opt ; do
+                if test -f "$ac_cryptopp_path_tmp/include/$ac_cryptopp_header" \
+                    && test -r "$ac_cryptopp_path_tmp/include/$ac_cryptopp_header"; then
+                    ac_cryptopp_path=$ac_cryptopp_path_tmp
+                    ac_cryptopp_cppflags="-I$ac_cryptopp_path_tmp/include"
+                    ac_cryptopp_ldflags="-L$ac_cryptopp_path_tmp/lib"
+                    break;
+                fi
+            done
+        fi
+
+        CRYPTOPP_INCLUDES="$ac_cryptopp_cppflags"
+        CRYPTOPP_LDFLAGS="$ac_cryptopp_ldflags"
+        CRYPTOPP_LIBS="$ac_cryptopp_libs"
+
+        save_LIBS="$LIBS"
+        save_LDFLAGS="$LDFLAGS"
+        save_CPPFLAGS="$CPPFLAGS"
+
+        LDFLAGS="$LDFLAGS $CRYPTOPP_LDFLAGS"
+        LIBS="$CRYPTOPP_LIBS $LIBS"
+        CPPFLAGS="$CRYPTOPP_INCLUDES $CPPFLAGS"
+        AC_LANG_PUSH(C++)
+        AC_LINK_IFELSE(
+            [AC_LANG_PROGRAM([#include <cryptopp/cryptlib.h>], [])],
+            [
+                AC_MSG_RESULT([yes])
+                $1
+            ], [
+                AC_MSG_RESULT([no])
+                $2
+            ])
+        AC_LANG_POP([C++])
+        CPPFLAGS="$save_CPPFLAGS"
+        LDFLAGS="$save_LDFLAGS"
+        LIBS="$save_LIBS"
+
+        AC_SUBST(CRYPTOPP_INCLUDES)
+        AC_SUBST(CRYPTOPP_LDFLAGS)
+        AC_SUBST(CRYPTOPP_LIBS)
+
+        AC_DEFINE([HAVE_CRYPTOPP], [], [Have the Crypto++ library])
+    fi
+])