Code

Better SSL checking (inspired by curl 7.12.2's configure.ac)
authorTon Voon <tonvoon@users.sourceforge.net>
Tue, 7 Dec 2004 06:51:53 +0000 (06:51 +0000)
committerTon Voon <tonvoon@users.sourceforge.net>
Tue, 7 Dec 2004 06:51:53 +0000 (06:51 +0000)
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1011 f882894a-f735-0410-b71e-b25c423dba1c

configure.in
plugins/Makefile.am

index d409b1c46aeaf3aa6be8bbb4ceb7b2f2b204d04c..33f3e599992919072d92a7118d537103cf5e2fd2 100644 (file)
@@ -255,26 +255,144 @@ CPPFLAGS="$_SAVEDCPPFLAGS $MYSQLINCLUDE"
 LIBS="$_SAVEDLIBS"
 
 dnl Check for OpenSSL location
-AC_PATH_PROG(OPENSSL,openssl)
-if test "$OPENSSL" = "/usr/bin/openssl"; then
-  OPENSSL=/usr
-elif test "$OPENSSL" = "/usr/sbin/openssl"; then
-  OPENSSL=/usr
-elif test "$OPENSSL" = "/opt/bin/openssl"; then
-  OPENSSL=/opt
-elif test "$OPENSSL" = "/opt/openssl/bin/openssl"; then
-  OPENSSL=/opt/openssl
-elif test "$OPENSSL" = "/usr/slocal/bin/openssl"; then
-  OPENSSL=/usr/slocal
-elif test "$OPENSSL" = "/usr/local/bin/openssl"; then
-  OPENSSL=/usr/local
-elif test "$OPENSSL" = "/usr/local/ssl/bin/openssl"; then
-  OPENSSL=/usr/local/ssl
-fi
+dnl This whole check is inspired by curl 7.12.2's configure.ac
+OPT_OPENSSL=off
 AC_ARG_WITH(openssl,
-       ACX_HELP_STRING([--with-openssl=DIR],
-               [sets path to openssl installation]),
-       OPENSSL=$withval,)
+AC_HELP_STRING([--with-openssl=DIR], [sets path to openssl installation])
+AC_HELP_STRING([--without-openssl], [disable openssl]),
+OPT_OPENSSL=$withval)
+
+if test X"$OPT_OPENSSL" = "Xno"; then
+  AC_MSG_WARN([openssl disabled, you will not be able to use ssl options in some plugins])
+else
+  dnl backup the pre-ssl variables
+  CLEANLDFLAGS="$LDFLAGS"
+  CLEANCPPFLAGS="$CPPFLAGS"
+  CLEANLIBS="$LIBS"
+
+  case "$OPT_OPENSSL" in
+  yes)
+    dnl --with-openssl (without path) used
+    PKGTEST="yes"
+    ;;
+  off)
+    dnl no --with-openssl given, check default places
+    PKGTEST="yes"
+    ;;
+  *)
+    dnl use the given area
+    PKGTEST="no"
+    OPENSSL=$OPT_OPENSSL
+    LDFLAGS="$LDFLAGS -L$OPENSSL/lib"
+    CPPFLAGS="$CPPFLAGS -I$OPENSSL/include/openssl -I$OPENSSL/include"
+  ;;
+  esac
+
+  dnl Check usual areas for openssl
+  if test "$PKGTEST" = "yes"; then
+    AC_PATH_PROG(OPENSSL,openssl)
+    # Don't think 2 tests below are necessary because /usr is always included
+    # if test "$OPENSSL" = "/usr/bin/openssl"; then
+    #  OPENSSL=/usr
+    #elif test "$OPENSSL" = "/usr/sbin/openssl"; then
+    #  OPENSSL=/usr
+    if test "$OPENSSL" = "/opt/bin/openssl"; then
+      OPENSSL=/opt
+    elif test "$OPENSSL" = "/opt/openssl/bin/openssl"; then
+      OPENSSL=/opt/openssl
+    elif test "$OPENSSL" = "/usr/slocal/bin/openssl"; then
+      OPENSSL=/usr/slocal
+    elif test "$OPENSSL" = "/usr/local/bin/openssl"; then
+      OPENSSL=/usr/local
+    elif test "$OPENSSL" = "/usr/local/ssl/bin/openssl"; then
+      OPENSSL=/usr/local/ssl
+    fi
+  fi
+
+  AC_CHECK_LIB(crypto, CRYPTO_lock,[
+     HAVECRYPTO="yes"
+     ],[
+     LDFLAGS="$CLEANLDFLAGS -L$OPENSSL/lib"
+     CPPFLAGS="$CLEANCPPFLAGS -I$OPENSSL/include/openssl -I$OPENSSL/include"
+     AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
+       HAVECRYPTO="yes" ], [
+       LDFLAGS="$CLEANLDFLAGS"
+       CPPFLAGS="$CLEANCPPFLAGS"
+       LIBS="$CLEANLIBS"
+       ])
+    ])
+
+  if test "$HAVECRYPTO" = "yes"; then
+    dnl This is only reasonable to do if crypto actually is there: check for
+    dnl SSL libs NOTE: it is important to do this AFTER the crypto lib
+
+    dnl This is for Msys/Mingw
+    AC_MSG_CHECKING([for gdi32])
+    my_ac_save_LIBS=$LIBS
+    LIBS="-lgdi32 $LIBS"
+    AC_TRY_LINK([#include <windef.h>
+                 #include <wingdi.h>],
+               [GdiFlush();],
+               [ dnl worked!
+               AC_MSG_RESULT([yes])],
+               [ dnl failed, restore LIBS
+               LIBS=$my_ac_save_LIBS
+               AC_MSG_RESULT(no)]
+              )
+
+    AC_CHECK_LIB(crypto, CRYPTO_add_lock)
+    AC_CHECK_LIB(ssl, SSL_connect)
+
+    if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
+        dnl we didn't find the SSL lib, try the RSAglue/rsaref stuff
+        AC_MSG_CHECKING(for ssl with RSAglue/rsaref libs in use);
+        OLIBS=$LIBS
+        LIBS="$LIBS -lRSAglue -lrsaref"
+        AC_CHECK_LIB(ssl, SSL_connect)
+        if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
+            dnl still no SSL_connect
+            AC_MSG_RESULT(no)
+            LIBS=$OLIBS
+        else
+            AC_MSG_RESULT(yes)
+        fi
+    fi
+
+
+    dnl Check for SSLeay headers
+    AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
+                     openssl/pem.h openssl/ssl.h openssl/err.h,
+      OPENSSL_ENABLED=1)
+
+    if test $ac_cv_header_openssl_x509_h = no; then
+      AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h,
+        OPENSSL_ENABLED=1)
+    fi
+
+    dnl If the ENGINE library seems to be around, check for the OpenSSL engine
+    dnl header, it is kind of "separated" from the main SSL check
+    AC_CHECK_FUNC(ENGINE_init, [ AC_CHECK_HEADERS(openssl/engine.h) ])
+
+    dnl AC_SUBST(OPENSSL_ENABLED)
+
+    dnl these can only exist if openssl exists
+    AC_CHECK_FUNCS( RAND_status \
+                    RAND_screen \
+                    RAND_egd \
+                    CRYPTO_cleanup_all_ex_data )
+
+  fi
+
+  if test X"$OPT_OPENSSL" != Xoff &&
+     test "$OPENSSL_ENABLED" != "1"; then
+    AC_MSG_ERROR([OpenSSL libs and/or directories were not found where specified!])
+  elif test "$OPENSSL_ENABLED" = "1"; then
+    check_tcp_ssl="check_simap check_spop check_jabber check_nntps"
+    AC_SUBST(check_tcp_ssl)
+    AC_DEFINE(HAVE_SSL,1,[Define if SSL libraries are found])
+    with_openssl="yes"
+  fi
+fi
 
 AC_CHECK_HEADERS(unistd.h)
 
@@ -417,49 +535,6 @@ if test "$FOUNDINCLUDE" = "no"; then
   CPPFLAGS="$_SAVEDCPPFLAGS"
 fi
 
-dnl Check for OpenSSL header files
-unset FOUNDINCLUDE
-_SAVEDCPPFLAGS="$CPPFLAGS"
-if test "$OPENSSL" != "/usr"; then
-  CPPFLAGS="$CPPFLAGS -I$OPENSSL/include"
-fi
-AC_CHECK_HEADERS(openssl/ssl.h openssl/x509.h openssl/rsa.h openssl/pem.h openssl/crypto.h openssl/err.h,
-                 SSLINCLUDE="-I$OPENSSL/include"
-                 FOUNDINCLUDE=yes,
-                 FOUNDINCLUDE=no)
-if test "$FOUNDINCLUDE" = "no"; then
-  AC_CHECK_HEADERS(ssl.h x509.h rsa.h pem.h crypto.h err.h,
-                   SSLINCLUDE="-I$OPENSSL/include"
-                   FOUNDINCLUDE=yes,
-                   FOUNDINCLUDE=no)
-fi
-AC_SUBST(SSLINCLUDE)
-if test "$FOUNDINCLUDE" = "no"; then
-  CPPFLAGS="$_SAVEDCPPFLAGS"
-fi
-
-dnl Check for crypto lib
-_SAVEDLIBS="$LIBS"
-AC_CHECK_LIB(crypto,CRYPTO_lock,,,-L$OPENSSL/lib)
-if test "$ac_cv_lib_crypto_CRYPTO_lock" = "yes"; then
-  dnl Check for SSL lib
-  AC_CHECK_LIB(ssl,main,LDFLAGS="$LDFLAGS -L$OPENSSL/lib" SSLLIBS="-lssl -lcrypto",AC_CHECK_LIB(ssl,main,LDFLAGS="$LDFLAGS -L$OPENSSL/lib" SSLLIBS="-lssl -lcrypto"),-L$OPENSSL/lib -lcrypto)
-fi
-LIBS="$_SAVEDLIBS"
-
-dnl test headers and libs to decide whether check_http should use SSL
-if test "$ac_cv_lib_crypto_CRYPTO_lock" = "yes"; then
-  if test "$ac_cv_lib_ssl_main" = "yes"; then
-    if test "$FOUNDINCLUDE" = "yes"; then
-      check_tcp_ssl="check_simap check_spop check_jabber check_nntps"
-      AC_SUBST(check_tcp_ssl)
-      AC_SUBST(SSLLIBS)
-      AC_DEFINE(HAVE_SSL,1,[Define if SSL libraries are found])
-    fi
-  fi
-fi
-CPPFLAGS="$_SAVEDCPPFLAGS"
-
 dnl
 dnl Checks for header files.
 dnl
@@ -1538,4 +1613,5 @@ ACX_FEATURE([with],[ping-command])
 ACX_FEATURE([with],[ping6-command])
 ACX_FEATURE([with],[lwres])
 ACX_FEATURE([with],[ipv6])
+ACX_FEATURE([with],[openssl])
 ACX_FEATURE([enable],[emulate-getaddrinfo])
index ef52baf8871b99b784c8a4c7943606878219b376..eb67e458e2446f9da6363ecfac4d128267afa5b1 100644 (file)
@@ -3,7 +3,7 @@
 VPATH = $(top_srcdir) $(top_srcdir)/lib $(top_srcdir)/plugins $(top_srcdir)/plugins/t 
 
 INCLUDES = -I.. -I$(top_srcdir)/lib -I$(top_srcdir)/intl \
-@LDAPINCLUDE@ @PGINCLUDE@ @SSLINCLUDE@ 
+@LDAPINCLUDE@ @PGINCLUDE@ 
 
 datadir = @datadir@
 localedir = $(datadir)/locale