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 appropriate
     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       0x111) tst_show="1.1.1" ;;
     70       0x110) tst_show="1.1.0" ;;
     71       0x102) tst_show="1.0.2" ;;
     72       0x101) tst_show="1.0.1" ;;
     73       0x100) tst_show="1.0.0" ;;
     74       0x099) tst_show="0.9.9" ;;
     75       0x098) tst_show="0.9.8" ;;
     76       0x097) tst_show="0.9.7" ;;
     77       0x096) tst_show="0.9.6" ;;
     78       0x095) tst_show="0.9.5" ;;
     79       0x094) tst_show="0.9.4" ;;
     80       0x093) tst_show="0.9.3" ;;
     81       0x092) tst_show="0.9.2" ;;
     82       0x091) tst_show="0.9.1" ;;
     83       *)     tst_show="unknown" ;;
     84     esac
     85     tst_show="$tst_show - $curl_cv_def_OPENSSL_VERSION_NUMBER"
     86   else
     87     tst_show="unknown"
     88   fi
     89   AC_MSG_RESULT([$tst_show])
     90   #
     91 dnl if test "$tst_api" != "unknown"; then
     92 dnl AC_DEFINE_UNQUOTED(HAVE_OPENSSL_API_HEADERS, $tst_api,
     93 dnl   [OpenSSL headers configure time API. Defined only by configure script.
     94 dnl    No matter what, do not ever define this manually or by any other means.])
     95 dnl fi
     96   curl_openssl_api_headers=$tst_api
     97 ])
     98 
     99 
    100 dnl CURL_CHECK_OPENSSL_API_LIBRARY
    101 dnl -------------------------------------------------
    102 dnl Find out OpenSSL library API version, performing
    103 dnl only link tests in order to avoid getting fooled
    104 dnl by mismatched OpenSSL headers. No runtime checks
    105 dnl allowed here for cross-compilation support.
    106 dnl HAVE_OPENSSL_API_LIBRARY is defined as appropriate
    107 dnl only for systems which actually run the configure
    108 dnl script. Config files generated manually or in any
    109 dnl other way shall not define this.
    110 dnl
    111 dnl Most probably we should not bother attempting to
    112 dnl detect OpenSSL library development API versions
    113 dnl 0.9.9 and 1.1.0. For our intended use, detecting
    114 dnl released versions should be good enough.
    115 dnl
    116 dnl Given that currently we are not using the result
    117 dnl of this check, except for informative purposes,
    118 dnl lets try to figure out everything.
    119 
    120 AC_DEFUN([CURL_CHECK_OPENSSL_API_LIBRARY], [
    121   #
    122   tst_api="unknown"
    123   #
    124   AC_MSG_CHECKING([for OpenSSL library version])
    125   if test "$tst_api" = "unknown"; then
    126     AC_LINK_IFELSE([
    127       AC_LANG_FUNC_LINK_TRY([ERR_clear_last_mark])
    128     ],[
    129       tst_api="0x111"
    130     ])
    131   fi
    132   if test "$tst_api" = "unknown"; then
    133     case $host in
    134       *-*-vms*)
    135         AC_LINK_IFELSE([
    136           AC_LANG_FUNC_LINK_TRY([SSL_CTX_set_not_resumbl_sess_cb])
    137         ],[
    138           tst_api="0x110"
    139         ])
    140         ;;
    141       *)
    142         AC_LINK_IFELSE([
    143           AC_LANG_FUNC_LINK_TRY([SSL_CTX_set_not_resumable_session_callback])
    144         ],[
    145           tst_api="0x110"
    146         ])
    147         ;;
    148     esac
    149   fi
    150   if test "$tst_api" = "unknown"; then
    151     AC_LINK_IFELSE([
    152       AC_LANG_FUNC_LINK_TRY([SSL_CONF_CTX_new])
    153     ],[
    154       tst_api="0x102"
    155     ])
    156   fi
    157   if test "$tst_api" = "unknown"; then
    158     AC_LINK_IFELSE([
    159       AC_LANG_FUNC_LINK_TRY([SSL_renegotiate_abbreviated])
    160     ],[
    161       tst_api="0x101"
    162     ])
    163   fi
    164   if test "$tst_api" = "unknown"; then
    165     AC_LINK_IFELSE([
    166       AC_LANG_FUNC_LINK_TRY([OBJ_add_sigid])
    167     ],[
    168       tst_api="0x100"
    169     ])
    170   fi
    171   if test "$tst_api" = "unknown"; then
    172     AC_LINK_IFELSE([
    173       AC_LANG_FUNC_LINK_TRY([ERR_set_mark])
    174     ],[
    175       tst_api="0x098"
    176     ])
    177   fi
    178   if test "$tst_api" = "unknown"; then
    179     AC_LINK_IFELSE([
    180       AC_LANG_FUNC_LINK_TRY([ERR_peek_last_error])
    181     ],[
    182       tst_api="0x097"
    183     ])
    184   fi
    185   if test "$tst_api" = "unknown"; then
    186     AC_LINK_IFELSE([
    187       AC_LANG_FUNC_LINK_TRY([c2i_ASN1_OBJECT])
    188     ],[
    189       tst_api="0x096"
    190     ])
    191   fi
    192   if test "$tst_api" = "unknown"; then
    193     AC_LINK_IFELSE([
    194       AC_LANG_FUNC_LINK_TRY([SSL_CTX_set_purpose])
    195     ],[
    196       tst_api="0x095"
    197     ])
    198   fi
    199   if test "$tst_api" = "unknown"; then
    200     AC_LINK_IFELSE([
    201       AC_LANG_FUNC_LINK_TRY([OBJ_obj2txt])
    202     ],[
    203       tst_api="0x094"
    204     ])
    205   fi
    206   if test "$tst_api" = "unknown"; then
    207     AC_LINK_IFELSE([
    208       AC_LANG_FUNC_LINK_TRY([SSL_get_verify_depth])
    209     ],[
    210       tst_api="0x093"
    211     ])
    212   fi
    213   if test "$tst_api" = "unknown"; then
    214     AC_LINK_IFELSE([
    215       AC_LANG_FUNC_LINK_TRY([SSL_library_init])
    216     ],[
    217       tst_api="0x092"
    218     ])
    219   fi
    220   if test "$tst_api" = "unknown"; then
    221     AC_LINK_IFELSE([
    222       AC_LANG_FUNC_LINK_TRY([SSL_CTX_set_cipher_list])
    223     ],[
    224       tst_api="0x091"
    225     ])
    226   fi
    227   case $tst_api in
    228     0x111) tst_show="1.1.1" ;;
    229     0x110) tst_show="1.1.0" ;;
    230     0x102) tst_show="1.0.2" ;;
    231     0x101) tst_show="1.0.1" ;;
    232     0x100) tst_show="1.0.0" ;;
    233     0x099) tst_show="0.9.9" ;;
    234     0x098) tst_show="0.9.8" ;;
    235     0x097) tst_show="0.9.7" ;;
    236     0x096) tst_show="0.9.6" ;;
    237     0x095) tst_show="0.9.5" ;;
    238     0x094) tst_show="0.9.4" ;;
    239     0x093) tst_show="0.9.3" ;;
    240     0x092) tst_show="0.9.2" ;;
    241     0x091) tst_show="0.9.1" ;;
    242     *)     tst_show="unknown" ;;
    243   esac
    244   AC_MSG_RESULT([$tst_show])
    245   #
    246 dnl if test "$tst_api" != "unknown"; then
    247 dnl AC_DEFINE_UNQUOTED(HAVE_OPENSSL_API_LIBRARY, $tst_api,
    248 dnl   [OpenSSL library link time API. Defined only by configure script.
    249 dnl    No matter what, do not ever define this manually or by any other means.])
    250 dnl fi
    251   curl_openssl_api_library=$tst_api
    252 ])
    253 
    254 
    255 dnl CURL_CHECK_OPENSSL_API
    256 dnl -------------------------------------------------
    257 
    258 AC_DEFUN([CURL_CHECK_OPENSSL_API], [
    259   #
    260   CURL_CHECK_OPENSSL_API_HEADERS
    261   CURL_CHECK_OPENSSL_API_LIBRARY
    262   #
    263   tst_match="yes"
    264   #
    265   AC_MSG_CHECKING([for OpenSSL headers and library versions matching])
    266   if test "$curl_openssl_api_headers" = "unknown" ||
    267     test "$curl_openssl_api_library" = "unknown"; then
    268     tst_match="fail"
    269     tst_warns="Can not compare OpenSSL headers and library versions."
    270   elif test "$curl_openssl_api_headers" != "$curl_openssl_api_library"; then
    271     tst_match="no"
    272     tst_warns="OpenSSL headers and library versions do not match."
    273   fi
    274   AC_MSG_RESULT([$tst_match])
    275   if test "$tst_match" != "yes"; then
    276     AC_MSG_WARN([$tst_warns])
    277   fi
    278 ])
    279