• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#***************************************************************************
2#                                  _   _ ____  _
3#  Project                     ___| | | |  _ \| |
4#                             / __| | | | |_) | |
5#                            | (__| |_| |  _ <| |___
6#                             \___|\___/|_| \_\_____|
7#
8# Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@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
27dnl CURL_CHECK_OPENSSL_API_HEADERS
28dnl -------------------------------------------------
29dnl Find out OpenSSL headers API version, as reported
30dnl by OPENSSL_VERSION_NUMBER. No runtime checks
31dnl allowed here for cross-compilation support.
32dnl HAVE_OPENSSL_API_HEADERS is defined as appropriate
33dnl only for systems which actually run the configure
34dnl script. Config files generated manually or in any
35dnl other way shall not define this.
36
37AC_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  #
91dnl if test "$tst_api" != "unknown"; then
92dnl AC_DEFINE_UNQUOTED(HAVE_OPENSSL_API_HEADERS, $tst_api,
93dnl   [OpenSSL headers configure time API. Defined only by configure script.
94dnl    No matter what, do not ever define this manually or by any other means.])
95dnl fi
96  curl_openssl_api_headers=$tst_api
97])
98
99
100dnl CURL_CHECK_OPENSSL_API_LIBRARY
101dnl -------------------------------------------------
102dnl Find out OpenSSL library API version, performing
103dnl only link tests in order to avoid getting fooled
104dnl by mismatched OpenSSL headers. No runtime checks
105dnl allowed here for cross-compilation support.
106dnl HAVE_OPENSSL_API_LIBRARY is defined as appropriate
107dnl only for systems which actually run the configure
108dnl script. Config files generated manually or in any
109dnl other way shall not define this.
110dnl
111dnl Most probably we should not bother attempting to
112dnl detect OpenSSL library development API versions
113dnl 0.9.9 and 1.1.0. For our intended use, detecting
114dnl released versions should be good enough.
115dnl
116dnl Given that currently we are not using the result
117dnl of this check, except for informative purposes,
118dnl lets try to figure out everything.
119
120AC_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  #
246dnl if test "$tst_api" != "unknown"; then
247dnl AC_DEFINE_UNQUOTED(HAVE_OPENSSL_API_LIBRARY, $tst_api,
248dnl   [OpenSSL library link time API. Defined only by configure script.
249dnl    No matter what, do not ever define this manually or by any other means.])
250dnl fi
251  curl_openssl_api_library=$tst_api
252])
253
254
255dnl CURL_CHECK_OPENSSL_API
256dnl -------------------------------------------------
257
258AC_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