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