1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
|
dnl -------------------------------------------------------------------------
dnl $Id: tls.m4 80826 2008-03-04 14:51:23Z wotte $
dnl
dnl tls.m4
dnl
dnl ACE M4 include file which contains ACE specific M4 macros
dnl that determine availablility of SSL/TLS support.
dnl
dnl -------------------------------------------------------------------------
dnl Copyright (C) 2003 Ossama Othman
dnl
dnl All Rights Reserved
dnl
dnl This library is free software; you can redistribute it and/or
dnl modify it under the current ACE distribution terms.
dnl
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
dnl TLS/SSL library IO check
dnl Use this macro to determine if TLS/SSL support is available on the
dnl current host.
dnl Usage: ACE_CHECK_TLS
AC_DEFUN([ACE_CHECK_TLS],
[
AC_REQUIRE([AC_PROG_CXX])
AC_REQUIRE([AC_PROG_CXXCPP])
AC_LANG([C++])
AC_REQUIRE([AC_LANG])
ace_TLS_CPPFLAGS=""
ace_TLS_LDFLAGS=""
AC_ARG_WITH([openssl],
AS_HELP_STRING([--with-openssl@<:@=DIR@:>@],
[root directory of openssl installation]),
[
ace_with_openssl="${withval}"
if test "${ace_with_openssl}" != yes; then
ace_openssl_include="${ace_with_openssl}/include"
ace_openssl_libdir="${ace_with_openssl}/lib"
fi
])
AC_ARG_WITH([openssl_include],
AS_HELP_STRING([--with-openssl-include=DIR],
[specify exact include dir for openssl headers]),
[ace_openssl_include="$withval"])
AC_ARG_WITH([openssl_libdir],
AS_HELP_STRING([--with-openssl-libdir=DIR],
[specify exact include dir for openssl libraries]),
[ace_openssl_libdir="$withval"])
if test "${ace_openssl_include}"; then
ace_TLS_CPPFLAGS="-I${ace_openssl_include}"
fi
if test "${ace_openssl_libdir}"; then
ace_TLS_LDFLAGS="-L${ace_openssl_libdir}"
fi
dnl Save the current library and preprocessor flagslist. We do not
dnl want to add the SSL/TLS-specific ones to the general library link
dnl and preprocessor flags list since they should only be used when
dnl building the ACE_SSL library and/or binaries that use the ACE_SSL
dnl library.
ace_save_LIBS="$LIBS"
ace_save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $ace_TLS_CPPFLAGS"
ace_save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS $ace_TLS_LDFLAGS"
dnl ---------------------------------------------------------
dnl Check if OpenSSL requires the Kerberos include directory to be
dnl added to the header search path.
AC_CACHE_CHECK([for Kerberos include flags needed by OpenSSL],
[ac_cv_kerberos_dir],
[
dnl Try compiling without any Kerberos-specific flags first.
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#include <openssl/ssl.h>
],
[
// ... THIS CODE DOES NOTHING! IT IS JUST USED FOR COMPILE TESTS ...
// ... Perform TCP connection ...
// ... Perform TLS/SSL stuff ...
CRYPTO_set_locking_callback (0);
SSLeay_add_ssl_algorithms ();
SSL_load_error_strings ();
SSL_METHOD * meth = TLSv1_method ();
SSL_CTX * ctx = SSL_CTX_new (meth);
SSL * ssl = SSL_new (ctx);
int fd = 2000; // Dummy file descriptor value.
SSL_set_fd (ssl, fd);
SSL_connect (ssl);
SSL_shutdown (ssl);
// ...
])
],
[
ac_cv_kerberos_dir=no
],
[
ace_kerberos_dir=""
for ace_kerberos in /usr /usr/local; do
ace_kerberos_dir="${ace_kerberos}/kerberos/include"
ace_kerberos_CPPFLAGS="-I${ace_kerberos_dir}"
CPPFLAGS="$ace_save_CPPFLAGS $ace_TLS_CPPFLAGS $ace_kerberos_CPPFLAGS"
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#include <openssl/ssl.h>
],
[
// ... THIS CODE DOES NOTHING! IT IS JUST USED FOR COMPILE TESTS ...
// ... Perform TCP connection ...
// ... Perform TLS/SSL stuff ...
CRYPTO_set_locking_callback (0);
SSLeay_add_ssl_algorithms ();
SSL_load_error_strings ();
SSL_METHOD * meth = TLSv1_method ();
SSL_CTX * ctx = SSL_CTX_new (meth);
SSL * ssl = SSL_new (ctx);
int fd = 2000; // Dummy file descriptor value.
SSL_set_fd (ssl, fd);
SSL_connect (ssl);
SSL_shutdown (ssl);
// ...
])
],
[
ac_cv_kerberos_dir="$ace_kerberos_dir"
break
],
[
ac_cv_kerberos_dir=no
])
done
])
])
AS_IF([test "$ac_cv_kerberos_dir" = no],
[
AC_SUBST([ACE_KERBEROS_INCLUDES],[.])
],
[
ace_TLS_CPPFLAGS="$ace_TLS_CPPFLAGS -I${ac_cv_kerberos_dir}"
AC_SUBST([ACE_KERBEROS_INCLUDES],[$ac_cv_kerberos_dir])
])
dnl ---------------------------------------------------------
dnl Add the TLS/SSL libraries to the library list.
ace_TLS_LIBS="-lssl -lcrypto"
LIBS="$ace_TLS_LIBS $LIBS"
LDFLAGS="$ace_TLS_LDFLAGS $LDFLAGS"
AC_CACHE_CHECK([for OpenSSL libraries],
[ac_cv_openssl_libs],
[
AC_LINK_IFELSE([
AC_LANG_PROGRAM([
#include <openssl/ssl.h>
],
[
// ... THIS PROGRAM DOES NOTHING! IT IS JUST USED FOR LINK TESTS ...
// ... Perform TCP connection ...
// ... Perform TLS/SSL stuff ...
CRYPTO_set_locking_callback (0);
SSLeay_add_ssl_algorithms ();
SSL_load_error_strings ();
SSL_METHOD * meth = TLSv1_method ();
SSL_CTX * ctx = SSL_CTX_new (meth);
SSL * ssl = SSL_new (ctx);
int fd = 2000; // Dummy file descriptor value.
SSL_set_fd (ssl, fd);
SSL_connect (ssl);
SSL_shutdown (ssl);
// ...
])
],
[
ac_cv_openssl_libs=yes
],
[
ac_cv_openssl_libs=no
])
])
AS_IF([test $ac_cv_openssl_libs != no],
[
AC_SUBST([ACE_TLS_CPPFLAGS],[$ace_TLS_CPPFLAGS])
AC_SUBST([ACE_TLS_LDFLAGS],[$ace_TLS_LDFLAGS])
AC_SUBST([ACE_TLS_LIBS],[$ace_TLS_LIBS])
],
[])
dnl Restore the original library list and preprocessor flags.
LIBS="$ace_save_LIBS"
CPPFLAGS="$ace_save_CPPFLAGS"
LDFLAGS="$ace_save_LDFLAGS"
])
|