commit 1087b3a1c465fb61a9b8782c383a9fd4e27d3ed6
parent 461e56367f343dca3d0fe111c7c7242b8c28e6fb
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date: Wed, 5 Mar 2014 13:20:49 +0000
rewritten configure tests for OpenSSL, use OpenSSL flags only where required, updated libmicrospdy build flags
Diffstat:
4 files changed, 174 insertions(+), 98 deletions(-)
diff --git a/configure.ac b/configure.ac
@@ -380,24 +380,49 @@ AC_CHECK_LIB([[magic]], [[magic_open]],
# optional: libmicrospdy support. Enabled by default if not on W32
AC_ARG_ENABLE([spdy],
- AS_HELP_STRING([--disable-spdy],
- [disable libmicrospdy]),
+ AS_HELP_STRING([--enable-spdy],
+ [enable build libmicrospdy (yes, no, auto) [auto]]),
[enable_spdy=${enableval}],
- [ AS_IF([[test "x$os_is_windows" = "xyes"]], [enable_spdy=no], [enable_spdy=yes]) ])
+ [ AS_IF([[test "x$os_is_windows" = "xyes"]], [enable_spdy=no]) ])
-if test "$enable_spdy" = "yes"
+if test "$enable_spdy" != "no"
then
- AC_CHECK_HEADERS([openssl/err.h],
- AC_CHECK_LIB(ssl, SSL_CTX_set_next_protos_advertised_cb,
- [AM_CONDITIONAL(HAVE_OPENSSL, true)
- enable_spdy="yes"],
- [AM_CONDITIONAL(HAVE_OPENSSL, false)
- enable_spdy="no"]),
- [AM_CONDITIONAL(HAVE_OPENSSL, false)
- enable_spdy="no"])
+ AX_CHECK_OPENSSL([ have_openssl=yes ],[ have_openssl=no ])
+ if test "x$have_openssl" = "xyes"
+ then
+ # check OpenSSL headers
+ SAVE_CPP_FLAGS="$CPPFLAGS"
+ CPPFLAGS="$OPENSSL_INCLUDES $CPPFLAGS"
+ AC_CHECK_HEADERS([openssl/evp.h openssl/rsa.h openssl/rand.h openssl/err.h openssl/sha.h openssl/pem.h openssl/engine.h], [ have_openssl=yes ],[ have_openssl=no ])
+ if test "x$have_openssl" = "xyes"
+ then
+ # check OpenSSL libs
+ SAVE_LIBS="$LIBS"
+ SAVE_LD_FLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $OPENSSL_LDFLAGS"
+ LIBS="$OPENSSL_LIBS $LIBS"
+ AC_CHECK_FUNC([SSL_CTX_set_next_protos_advertised_cb],
+ [
+ AC_CHECK_FUNC([SSL_library_init], [ have_openssl=yes ],[ have_openssl=no ])
+ ],[ have_openssl=no ])
+ LIBS="$SAVE_LIBS"
+ LDFLAGS="$SAVE_LD_FLAGS"
+ fi
+ CPPFLAGS="$SAVE_CPP_FLAGS"
+ fi
+ if test "x$have_openssl" = "xyes"
+ then
+ enable_spdy=yes
+ else
+ AS_IF([[test "x$enable_spdy" = "xyes" ]], [AC_MSG_ERROR([[libmicrospdy cannot be enabled without OpenSSL.]])])
+ have_openssl=no
+ enable_spdy=no
+ fi
else
- AM_CONDITIONAL(HAVE_OPENSSL, false)
+ # OpenSSL is used only for libmicrospdy
+ have_openssl=no
fi
+AM_CONDITIONAL([HAVE_OPENSSL], [test "x$have_openssl" = "xyes"])
if test "$enable_spdy" = "yes"
then
@@ -409,24 +434,20 @@ AM_CONDITIONAL(ENABLE_SPDY, [test "x$enable_spdy" != "xno"])
AC_MSG_CHECKING(whether we have OpenSSL and thus can support libmicrospdy)
AC_MSG_RESULT($enable_spdy)
-SAVE_LIBS=$LIBS
-spdy_OPENSSL
# for pkg-config
-SPDY_LIBDEPS=""
-
-
-AC_CHECK_HEADERS([spdylay/spdylay.h],
- [AM_CONDITIONAL(HAVE_SPDYLAY, true)
- have_spdylay="yes"],
- [AM_CONDITIONAL(HAVE_SPDYLAY, false)
- have_spdylay="no"])
+SPDY_LIBDEPS="$OPENSSL_LIBS"
+SPDY_LIB_LDFLAGS="$LDFLAGS $OPENSSL_LDFLAGS"
+SPDY_LIB_CFLAGS="$CFLAGS"
+SPDY_LIB_CPPFLAGS="$OPENSSL_INCLUDES $CPPFLAGS"
AC_SUBST(SPDY_LIB_LDFLAGS)
+AC_SUBST(SPDY_LIB_CFLAGS)
+AC_SUBST(SPDY_LIB_CPPFLAGS)
# for pkg-config
AC_SUBST(SPDY_LIBDEPS)
-
-LIBS=$SAVE_LIBS
+AC_CHECK_HEADERS([spdylay/spdylay.h], [ have_spdylay="yes" ], [have_spdylay="no"])
+AM_CONDITIONAL(HAVE_SPDYLAY, [test "x$have_spdylay" = "xyes"])
# large file support (> 4 GB)
AC_SYS_LARGEFILE
diff --git a/m4/ax_check_openssl.m4 b/m4/ax_check_openssl.m4
@@ -0,0 +1,124 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_check_openssl.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_CHECK_OPENSSL([action-if-found[, action-if-not-found]])
+#
+# DESCRIPTION
+#
+# Look for OpenSSL in a number of default spots, or in a user-selected
+# spot (via --with-openssl). Sets
+#
+# OPENSSL_INCLUDES to the include directives required
+# OPENSSL_LIBS to the -l directives required
+# OPENSSL_LDFLAGS to the -L or -R flags required
+#
+# and calls ACTION-IF-FOUND or ACTION-IF-NOT-FOUND appropriately
+#
+# This macro sets OPENSSL_INCLUDES such that source files should use the
+# openssl/ directory in include directives:
+#
+# #include <openssl/hmac.h>
+#
+# LICENSE
+#
+# Copyright (c) 2009,2010 Zmanda Inc. <http://www.zmanda.com/>
+# Copyright (c) 2009,2010 Dustin J. Mitchell <dustin@zmanda.com>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 8
+
+AU_ALIAS([CHECK_SSL], [AX_CHECK_OPENSSL])
+AC_DEFUN([AX_CHECK_OPENSSL], [
+ found=false
+ AC_ARG_WITH([openssl],
+ [AS_HELP_STRING([--with-openssl=DIR],
+ [root of the OpenSSL directory])],
+ [
+ case "$withval" in
+ "" | y | ye | yes | n | no)
+ AC_MSG_ERROR([Invalid --with-openssl value])
+ ;;
+ *) ssldirs="$withval"
+ ;;
+ esac
+ ], [
+ # if pkg-config is installed and openssl has installed a .pc file,
+ # then use that information and don't search ssldirs
+ AC_PATH_PROG([PKG_CONFIG], [pkg-config])
+ if test x"$PKG_CONFIG" != x""; then
+ OPENSSL_LDFLAGS=`$PKG_CONFIG openssl --libs-only-L 2>/dev/null`
+ if test $? = 0; then
+ OPENSSL_LIBS=`$PKG_CONFIG openssl --libs-only-l 2>/dev/null`
+ OPENSSL_INCLUDES=`$PKG_CONFIG openssl --cflags-only-I 2>/dev/null`
+ found=true
+ fi
+ fi
+
+ # no such luck; use some default ssldirs
+ if ! $found; then
+ ssldirs="/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr"
+ fi
+ ]
+ )
+
+
+ # note that we #include <openssl/foo.h>, so the OpenSSL headers have to be in
+ # an 'openssl' subdirectory
+
+ if ! $found; then
+ OPENSSL_INCLUDES=
+ for ssldir in $ssldirs; do
+ AC_MSG_CHECKING([for openssl/ssl.h in $ssldir])
+ if test -f "$ssldir/include/openssl/ssl.h"; then
+ OPENSSL_INCLUDES="-I$ssldir/include"
+ OPENSSL_LDFLAGS="-L$ssldir/lib"
+ OPENSSL_LIBS="-lssl -lcrypto"
+ found=true
+ AC_MSG_RESULT([yes])
+ break
+ else
+ AC_MSG_RESULT([no])
+ fi
+ done
+
+ # if the file wasn't found, well, go ahead and try the link anyway -- maybe
+ # it will just work!
+ fi
+
+ # try the preprocessor and linker with our new flags,
+ # being careful not to pollute the global LIBS, LDFLAGS, and CPPFLAGS
+
+ AC_MSG_CHECKING([whether compiling and linking against OpenSSL works])
+ echo "Trying link with OPENSSL_LDFLAGS=$OPENSSL_LDFLAGS;" \
+ "OPENSSL_LIBS=$OPENSSL_LIBS; OPENSSL_INCLUDES=$OPENSSL_INCLUDES" >&AS_MESSAGE_LOG_FD
+
+ save_LIBS="$LIBS"
+ save_LDFLAGS="$LDFLAGS"
+ save_CPPFLAGS="$CPPFLAGS"
+ LDFLAGS="$LDFLAGS $OPENSSL_LDFLAGS"
+ LIBS="$OPENSSL_LIBS $LIBS"
+ CPPFLAGS="$OPENSSL_INCLUDES $CPPFLAGS"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include <openssl/ssl.h>], [SSL_new(NULL)])],
+ [
+ AC_MSG_RESULT([yes])
+ $1
+ ], [
+ AC_MSG_RESULT([no])
+ $2
+ ])
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+
+ AC_SUBST([OPENSSL_INCLUDES])
+ AC_SUBST([OPENSSL_LIBS])
+ AC_SUBST([OPENSSL_LDFLAGS])
+])
diff --git a/m4/openssl.m4 b/m4/openssl.m4
@@ -1,69 +0,0 @@
-dnl Check to find the OpenSSL headers/libraries
-
-AC_DEFUN([spdy_OPENSSL],
-[
- AC_ARG_WITH(openssl,
- AS_HELP_STRING([--with-openssl=DIR], [OpenSSL base directory, or:]),
- [openssl="$withval"
- CPPFLAGS="$CPPFLAGS -I$withval/include"
- LDFLAGS="$LDFLAGS -L$withval/lib"]
- )
-
- AC_ARG_WITH(openssl-include,
- AS_HELP_STRING([--with-openssl-include=DIR], [OpenSSL headers directory (without trailing /openssl)]),
- [openssl_include="$withval"
- CPPFLAGS="$CPPFLAGS -I$withval"]
- )
-
- AC_ARG_WITH(openssl-lib,
- AS_HELP_STRING([--with-openssl-lib=DIR], [OpenSSL library directory]),
- [openssl_lib="$withval"
- LDFLAGS="$LDFLAGS -L$withval"]
- )
-
- AC_CHECK_HEADERS(openssl/evp.h openssl/rsa.h openssl/rand.h openssl/err.h openssl/sha.h openssl/pem.h openssl/engine.h,
- [],
- [AC_MSG_WARN([OpenSSL header files not found.]); break]
- )
-
-case $host_os in
- *mingw*)
- AC_CHECK_LIB(crypto, SHA1_Init,
- [LIBS="$LIBS -lcrypto -lgdi32"],
- [AC_MSG_WARN([OpenSSL libraries not found.])]
- )
- ;;
- *)
-
- AC_CHECK_LIB(crypto, SHA1_Init,
- [LIBS="$LIBS -lcrypto"],
- [AC_MSG_WARN([OpenSSL libraries not found.])]
- )
-
- AC_CHECK_FUNC(dlopen,
- [],
- [AC_CHECK_LIB(dl, dlopen,
- [LIBS="$LIBS -ldl"],
- [AC_MSG_WARN([OpenSSL depends on libdl.]); break]
- )]
- )
-
- AC_CHECK_FUNC(SSL_library_init,
- [],
- [AC_CHECK_LIB(ssl, SSL_library_init,
- [LIBS="$LIBS -lssl"],
- [AC_MSG_WARN([OpenSSL?.]); break]
- )]
- )
- ;;
-esac
-
-# AC_CHECK_FUNCS([RAND_pseudo_bytes EVP_EncryptInit_ex], ,
-# [AC_MSG_ERROR([Missing OpenSSL functionality, make sure you have installed the latest version.]); break],
-# )
-
-# AC_CHECK_DECL([OpenSSL_add_all_algorithms], ,
-# [AC_MSG_ERROR([Missing OpenSSL functionality, make sure you have installed the latest version.]); break],
-# [#include <openssl/evp.h>]
-# )
-])
diff --git a/src/microspdy/Makefile.am b/src/microspdy/Makefile.am
@@ -21,17 +21,17 @@ libmicrospdy_la_SOURCES = \
applicationlayer.c applicationlayer.h \
alstructures.c alstructures.h
libmicrospdy_la_LIBADD = \
- -lssl
+ $(SPDY_LIBDEPS)
libmicrospdy_la_LDFLAGS = \
- $(SPDY_LIB_LDFLAGS)
+ $(SPDY_LIB_LDFLAGS)
libmicrospdy_la_CPPFLAGS = \
- $(AM_CPPFLAGS) \
+ $(AM_CPPFLAGS) $(SPDY_LIB_CPPFLAGS) \
-DBUILDING_MHD_LIB=1
libmicrospdy_la_CFLAGS = -Wextra \
- $(SPDY_LIB_CFLAGS)
+ $(AM_CFLAGS) $(SPDY_LIB_CFLAGS)
if USE_COVERAGE