libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

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:
Mconfigure.ac | 71++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Am4/ax_check_openssl.m4 | 124+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dm4/openssl.m4 | 69---------------------------------------------------------------------
Msrc/microspdy/Makefile.am | 8++++----
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