Home | History | Annotate | Download | only in m4
      1 #***************************************************************************
      2 #                                  _   _ ____  _
      3 #  Project                     ___| | | |  _ \| |
      4 #                             / __| | | | |_) | |
      5 #                            | (__| |_| |  _ <| |___
      6 #                             \___|\___/|_| \_\_____|
      7 #
      8 # Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel (a] haxx.se>, et al.
      9 #
     10 # This software is licensed as described in the file COPYING, which
     11 # you should have received as part of this distribution. The terms
     12 # are also available at https://curl.haxx.se/docs/copyright.html.
     13 #
     14 # You may opt to use, copy, modify, merge, publish, distribute and/or sell
     15 # copies of the Software, and permit persons to whom the Software is
     16 # furnished to do so, under the terms of the COPYING file.
     17 #
     18 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
     19 # KIND, either express or implied.
     20 #
     21 #***************************************************************************
     22 
     23 # File version for 'aclocal' use. Keep it a single number.
     24 # serial 5
     25 
     26 
     27 dnl CURL_CHECK_OPENSSL_API_HEADERS
     28 dnl -------------------------------------------------
     29 dnl Find out OpenSSL headers API version, as reported
     30 dnl by OPENSSL_VERSION_NUMBER. No runtime checks
     31 dnl allowed here for cross-compilation support.
     32 dnl HAVE_OPENSSL_API_HEADERS is defined as apprpriate
     33 dnl only for systems which actually run the configure
     34 dnl script. Config files generated manually or in any
     35 dnl other way shall not define this.
     36 
     37 AC_DEFUN([CURL_CHECK_OPENSSL_API_HEADERS], [
     38   #
     39   tst_api="unknown"
     40   #
     41   AC_MSG_CHECKING([for OpenSSL headers version])
     42   CURL_CHECK_DEF([OPENSSL_VERSION_NUMBER], [
     43 #   ifdef USE_OPENSSL
     44 #     include <openssl/crypto.h>
     45 #   else
     46 #     include <crypto.h>
     47 #   endif
     48     ], [silent])
     49   if test "$curl_cv_have_def_OPENSSL_VERSION_NUMBER" = "yes"; then
     50     tst_verlen=`expr "$curl_cv_def_OPENSSL_VERSION_NUMBER" : '.*'`
     51     case "x$tst_verlen" in
     52       x6)
     53         tst_vermaj=`echo $curl_cv_def_OPENSSL_VERSION_NUMBER | cut -c 3`
     54         tst_vermin=`echo $curl_cv_def_OPENSSL_VERSION_NUMBER | cut -c 4`
     55         tst_verfix=`echo $curl_cv_def_OPENSSL_VERSION_NUMBER | cut -c 5`
     56         tst_api=0x$tst_vermaj$tst_vermin$tst_verfix
     57         ;;
     58       x11|x10)
     59         tst_vermaj=`echo $curl_cv_def_OPENSSL_VERSION_NUMBER | cut -c 3`
     60         tst_vermin=`echo $curl_cv_def_OPENSSL_VERSION_NUMBER | cut -c 5`
     61         tst_verfix=`echo $curl_cv_def_OPENSSL_VERSION_NUMBER | cut -c 7`
     62         tst_api=0x$tst_vermaj$tst_vermin$tst_verfix
     63         ;;
     64       *)
     65         tst_api="unknown"
     66         ;;
     67     esac
     68     case $tst_api in
     69       0x110) tst_show="1.1.0" ;;
     70       0x102) tst_show="1.0.2" ;;
     71       0x101) tst_show="1.0.1" ;;
     72       0x100) tst_show="1.0.0" ;;
     73       0x099) tst_show="0.9.9" ;;
     74       0x098) tst_show="0.9.8" ;;
     75       0x097) tst_show="0.9.7" ;;
     76       0x096) tst_show="0.9.6" ;;
     77       0x095) tst_show="0.9.5" ;;
     78       0x094) tst_show="0.9.4" ;;
     79       0x093) tst_show="0.9.3" ;;
     80       0x092) tst_show="0.9.2" ;;
     81       0x091) tst_show="0.9.1" ;;
     82       *)     tst_show="unknown" ;;
     83     esac
     84     tst_show="$tst_show - $curl_cv_def_OPENSSL_VERSION_NUMBER"
     85   else
     86     tst_show="unknown"
     87   fi
     88   AC_MSG_RESULT([$tst_show])
     89   #
     90 dnl if test "$tst_api" != "unknown"; then
     91 dnl AC_DEFINE_UNQUOTED(HAVE_OPENSSL_API_HEADERS, $tst_api,
     92 dnl   [OpenSSL headers configure time API. Defined only by configure script.
     93 dnl    No matter what, do not ever define this manually or by any other means.])
     94 dnl fi
     95   curl_openssl_api_headers=$tst_api
     96 ])
     97 
     98 
     99 dnl CURL_CHECK_OPENSSL_API_LIBRARY
    100 dnl -------------------------------------------------
    101 dnl Find out OpenSSL library API version, performing
    102 dnl only link tests in order to avoid getting fooled
    103 dnl by mismatched OpenSSL headers. No runtime checks
    104 dnl allowed here for cross-compilation support.
    105 dnl HAVE_OPENSSL_API_LIBRARY is defined as apprpriate
    106 dnl only for systems which actually run the configure
    107 dnl script. Config files generated manually or in any
    108 dnl other way shall not define this.
    109 dnl
    110 dnl Most probably we should not bother attempting to
    111 dnl detect OpenSSL library development API versions
    112 dnl 0.9.9 and 1.1.0. For our intended use, detecting
    113 dnl released versions should be good enough.
    114 dnl
    115 dnl Given that currently we are not using the result
    116 dnl of this check, except for informative purposes,
    117 dnl lets try to figure out everything.
    118 
    119 AC_DEFUN([CURL_CHECK_OPENSSL_API_LIBRARY], [
    120   #
    121   tst_api="unknown"
    122   #
    123   AC_MSG_CHECKING([for OpenSSL library version])
    124   if test "$tst_api" = "unknown"; then
    125     case $host in
    126       *-*-vms*)
    127         AC_LINK_IFELSE([
    128           AC_LANG_FUNC_LINK_TRY([SSL_CTX_set_not_resumbl_sess_cb])
    129         ],[
    130           tst_api="0x110"
    131         ])
    132         ;;
    133       *)
    134         AC_LINK_IFELSE([
    135           AC_LANG_FUNC_LINK_TRY([SSL_CTX_set_not_resumable_session_callback])
    136         ],[
    137           tst_api="0x110"
    138         ])
    139         ;;
    140     esac
    141   fi
    142   if test "$tst_api" = "unknown"; then
    143     AC_LINK_IFELSE([
    144       AC_LANG_FUNC_LINK_TRY([SSL_CONF_CTX_new])
    145     ],[
    146       tst_api="0x102"
    147     ])
    148   fi
    149   if test "$tst_api" = "unknown"; then
    150     AC_LINK_IFELSE([
    151       AC_LANG_FUNC_LINK_TRY([SSL_renegotiate_abbreviated])
    152     ],[
    153       tst_api="0x101"
    154     ])
    155   fi
    156   if test "$tst_api" = "unknown"; then
    157     AC_LINK_IFELSE([
    158       AC_LANG_FUNC_LINK_TRY([OBJ_add_sigid])
    159     ],[
    160       tst_api="0x100"
    161     ])
    162   fi
    163   if test "$tst_api" = "unknown"; then
    164     AC_LINK_IFELSE([
    165       AC_LANG_FUNC_LINK_TRY([ERR_set_mark])
    166     ],[
    167       tst_api="0x098"
    168     ])
    169   fi
    170   if test "$tst_api" = "unknown"; then
    171     AC_LINK_IFELSE([
    172       AC_LANG_FUNC_LINK_TRY([ERR_peek_last_error])
    173     ],[
    174       tst_api="0x097"
    175     ])
    176   fi
    177   if test "$tst_api" = "unknown"; then
    178     AC_LINK_IFELSE([
    179       AC_LANG_FUNC_LINK_TRY([c2i_ASN1_OBJECT])
    180     ],[
    181       tst_api="0x096"
    182     ])
    183   fi
    184   if test "$tst_api" = "unknown"; then
    185     AC_LINK_IFELSE([
    186       AC_LANG_FUNC_LINK_TRY([SSL_CTX_set_purpose])
    187     ],[
    188       tst_api="0x095"
    189     ])
    190   fi
    191   if test "$tst_api" = "unknown"; then
    192     AC_LINK_IFELSE([
    193       AC_LANG_FUNC_LINK_TRY([OBJ_obj2txt])
    194     ],[
    195       tst_api="0x094"
    196     ])
    197   fi
    198   if test "$tst_api" = "unknown"; then
    199     AC_LINK_IFELSE([
    200       AC_LANG_FUNC_LINK_TRY([SSL_get_verify_depth])
    201     ],[
    202       tst_api="0x093"
    203     ])
    204   fi
    205   if test "$tst_api" = "unknown"; then
    206     AC_LINK_IFELSE([
    207       AC_LANG_FUNC_LINK_TRY([SSL_library_init])
    208     ],[
    209       tst_api="0x092"
    210     ])
    211   fi
    212   if test "$tst_api" = "unknown"; then
    213     AC_LINK_IFELSE([
    214       AC_LANG_FUNC_LINK_TRY([SSL_CTX_set_cipher_list])
    215     ],[
    216       tst_api="0x091"
    217     ])
    218   fi
    219   case $tst_api in
    220     0x110) tst_show="1.1.0" ;;
    221     0x102) tst_show="1.0.2" ;;
    222     0x101) tst_show="1.0.1" ;;
    223     0x100) tst_show="1.0.0" ;;
    224     0x099) tst_show="0.9.9" ;;
    225     0x098) tst_show="0.9.8" ;;
    226     0x097) tst_show="0.9.7" ;;
    227     0x096) tst_show="0.9.6" ;;
    228     0x095) tst_show="0.9.5" ;;
    229     0x094) tst_show="0.9.4" ;;
    230     0x093) tst_show="0.9.3" ;;
    231     0x092) tst_show="0.9.2" ;;
    232     0x091) tst_show="0.9.1" ;;
    233     *)     tst_show="unknown" ;;
    234   esac
    235   AC_MSG_RESULT([$tst_show])
    236   #
    237 dnl if test "$tst_api" != "unknown"; then
    238 dnl AC_DEFINE_UNQUOTED(HAVE_OPENSSL_API_LIBRARY, $tst_api,
    239 dnl   [OpenSSL library link time API. Defined only by configure script.
    240 dnl    No matter what, do not ever define this manually or by any other means.])
    241 dnl fi
    242   curl_openssl_api_library=$tst_api
    243 ])
    244 
    245 
    246 dnl CURL_CHECK_OPENSSL_API
    247 dnl -------------------------------------------------
    248 
    249 AC_DEFUN([CURL_CHECK_OPENSSL_API], [
    250   #
    251   CURL_CHECK_OPENSSL_API_HEADERS
    252   CURL_CHECK_OPENSSL_API_LIBRARY
    253   #
    254   tst_match="yes"
    255   #
    256   AC_MSG_CHECKING([for OpenSSL headers and library versions matching])
    257   if test "$curl_openssl_api_headers" = "unknown" ||
    258     test "$curl_openssl_api_library" = "unknown"; then
    259     tst_match="fail"
    260     tst_warns="Can not compare OpenSSL headers and library versions."
    261   elif test "$curl_openssl_api_headers" != "$curl_openssl_api_library"; then
    262     tst_match="no"
    263     tst_warns="OpenSSL headers and library versions do not match."
    264   fi
    265   AC_MSG_RESULT([$tst_match])
    266   if test "$tst_match" != "yes"; then
    267     AC_MSG_WARN([$tst_warns])
    268   fi
    269 ])
    270