fix build issues with SSL, NSS etc.
[m6w6/ext-http] / autoconf / pecl / libcurl.m4
1 dnl
2 dnl PECL_HAVE_LIBCURL_FEATURE(feature[, code-if-yes[, code-if-no]])
3 dnl
4 dnl Checks $CURL_CONFIG --feature.
5 dnl Defines PHP_<PECL_NAME>_HAVE_LIBCURL_<FEATURE>
6 dnl
7 AC_DEFUN([PECL_HAVE_LIBCURL_FEATURE], [dnl
8 AC_REQUIRE([PECL_PROG_EGREP])dnl
9 AC_CACHE_CHECK([for $1 feature in libcurl], PECL_CACHE_VAR([HAVE_LIBCURL_FEATURE_$1]), [
10 if $CURL_CONFIG --feature | $EGREP -q $1; then
11 PECL_CACHE_VAR([HAVE_LIBCURL_FEATURE_$1])=yes
12 else
13 PECL_CACHE_VAR([HAVE_LIBCURL_FEATURE_$1])=no
14 fi
15 ])
16 PECL_VAR([HAVE_LIBCURL_FEATURE_$1])=$PECL_CACHE_VAR([HAVE_LIBCURL_FEATURE_$1])
17 if $PECL_VAR([HAVE_LIBCURL_FEATURE_$1]); then
18 PECL_DEFINE([HAVE_LIBCURL_$1])
19 $2
20 else
21 ifelse([$3],,:,[$3])
22 fi
23 ])
24 dnl
25 dnl PECL_HAVE_LIBCURL_PROTOCOL(protocol[, code-if-yes[, code-if-no]])
26 dnl
27 AC_DEFUN([PECL_HAVE_LIBCURL_PROTOCOL], [
28 AC_CACHE_CHECK([for $1 protocol in libcurl], PECL_CACHE_VAR([HAVE_LIBCURL_PROTOCOL_$1]), [
29 if $CURL_CONFIG --protocols | $EGREP -q $1; then
30 PECL_CACHE_VAR([HAVE_LIBCURL_PROTOCOL_$1])=yes
31 else
32 PECL_CACHE_VAR([HAVE_LIBCURL_PROTOCOL_$1])=no
33 fi
34 ])
35 PECL_VAR([HAVE_LIBCURL_PROTOCOL_$1])=$PECL_CACHE_VAR([HAVE_LIBCURL_PROTOCOL_$1])
36 if $PECL_VAR([HAVE_LIBCURL_PROTOCOL_$1]); then
37 PECL_DEFINE([HAVE_LIBCURL_$1])
38 $2
39 else
40 ifelse([$3],,:,[$3])
41 fi
42 ])
43 dnl
44 dnl PECL_HAVE_LIBCURL_SSLLIB(ssllib-name, headers, libs)
45 dnl
46 AC_DEFUN([PECL_HAVE_LIBCURL_SSLLIB], [
47 if test -z "$PECL_VAR([LIBCURL_SSLLIB])"; then
48 AC_CACHE_CHECK([for $1 providing SSL in libcurl], PECL_CACHE_VAR([HAVE_LIBCURL_$1]), [
49 AC_TRY_RUN([
50 #include <curl/curl.h>
51 int main(int argc, char *argv[]) {
52 curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
53 if (data && data->ssl_version && *data->ssl_version) {
54 const char *ptr = data->ssl_version;
55 while(*ptr == ' ') ++ptr;
56 return strncasecmp(ptr, "$1", sizeof("$1")-1);
57 }
58 return 1;
59 }
60 ], [
61 PECL_CACHE_VAR([HAVE_LIBCURL_$1])=yes
62 ], [
63 PECL_CACHE_VAR([HAVE_LIBCURL_$1])=no
64 ])
65 ])
66 PECL_VAR([HAVE_LIBCURL_$1])=$PECL_CACHE_VAR([HAVE_LIBCURL_$1])
67 if $PECL_VAR([HAVE_LIBCURL_$1]); then
68 PECL_VAR([LIBCURL_SSLLIB])="$1"
69 PECL_DEFINE([HAVE_LIBCURL_$1])
70 m4_foreach_w(header, $2, [AC_CHECK_HEADER(header,, [
71 PECL_VAR([HAVE_LIBCURL_$1])=false
72 ])])
73 ifelse([$3],,,[
74 if $PECL_VAR([HAVE_LIBCURL_$1]); then
75 m4_foreach_w(lib, $3, [
76 PHP_ADD_LIBRARY(lib, true, [AS_TR_CPP(PECL_NAME[_SHARED_LIBADD])])
77 ])
78 fi
79 ])
80 fi
81 fi
82 ])
83 dnl
84 dnl PECL_HAVE_LIBCURL_SSL
85 dnl
86 AC_DEFUN([PECL_HAVE_LIBCURL_SSL], [dnl
87 AC_REQUIRE([PECL_HAVE_LIBCURL_CA])dnl
88 PECL_HAVE_LIBCURL_FEATURE([SSL], [
89 PECL_HAVE_LIBCURL_SSLLIB([OpenSSL], [openssl/ssl.h openssl/crypto.h], [ssl crypto])
90 PECL_HAVE_LIBCURL_SSLLIB([GnuTLS], [gnutls.h gcrypt.h], [gnutls gcrypt])
91 PECL_HAVE_LIBCURL_SSLLIB([NSS])
92 PECL_HAVE_LIBCURL_SSLLIB([SecureTransport])
93 PECL_HAVE_LIBCURL_SSLLIB([GSKit])
94 PECL_HAVE_LIBCURL_SSLLIB([PolarSSL])
95 PECL_HAVE_LIBCURL_SSLLIB([WolfSSL])
96 PECL_HAVE_LIBCURL_SSLLIB([mbedTLS])
97 PECL_HAVE_LIBCURL_SSLLIB([axTLS])
98
99 case "$PECL_VAR([LIBCURL_SSLLIB])" in
100 OpenSSL|GnuTLS|PolarSSL)
101 PECL_DEFINE([HAVE_LIBCURL_CAPATH])
102 PECL_DEFINE([HAVE_LIBCURL_CAINFO])
103 ;;
104 NSS)
105 AC_CACHE_CHECK([whether NSS PEM is available], [PECL_CACHE_VAR([HAVE_LIBCURL_NSSPEM])], [
106 PECL_SAVE_ENV([LIBS], [NSSPEM])
107 LIBS="$LIBS -lnsspem"
108 AC_TRY_LINK([], [(void)0;], [
109 PECL_CACHE_VAR([HAVE_LIBCURL_NSSPEM])=yes
110 ], [
111 PECL_CACHE_VAR([HAVE_LIBCURL_NSSPEM])=no
112 ])
113 PECL_RESTORE_ENV([LIBS], [NSSPEM])
114 ])
115 if $PECL_CACHE_VAR([HAVE_LIBCURL_NSSPEM]); then
116 PECL_DEFINE([HAVE_LIBCURL_CAINFO])
117 else
118 PECL_DEFINE([HAVE_LIBCURL_CAINFO], [0])
119 fi
120 PECL_DEFINE([HAVE_LIBCURL_CAPATH], [0])
121 ;;
122 *)
123 PECL_DEFINE([HAVE_LIBCURL_CAPATH], [0])
124 PECL_DEFINE([HAVE_LIBCURL_CAINFO], [0])
125 ;;
126 esac
127
128 PECL_HAVE_CONST([curl/curl.h], [CURLOPT_TLSAUTH_TYPE], int, [
129 AC_CACHE_CHECK([whether CURLOPT_TLSAUTH_TYPE expects CURL_TLSAUTH_SRP], PECL_CACHE_VAR([LIBCURL_TLSAUTH_SRP]), [
130 PECL_CACHE_VAR([LIBCURL_TLSAUTH_SRP])=
131 AC_TRY_RUN([
132 #include <curl/curl.h>
133 int main(int argc, char *argv[]) {
134 CURL *ch = curl_easy_init();
135 return curl_easy_setopt(ch, CURLOPT_TLSAUTH_TYPE, CURL_TLSAUTH_SRP);
136 }
137 ], [
138 PECL_CACHE_VAR([LIBCURL_TLSAUTH_SRP])=yes
139 ], [
140 AC_TRY_RUN([
141 #include <curl/curl.h>
142 int main(int argc, char *argv[]) {
143 CURL *ch = curl_easy_init();
144 return curl_easy_setopt(ch, CURLOPT_TLSAUTH_TYPE, "SRP");
145 }
146 ], [
147 PECL_CACHE_VAR([LIBCURL_TLSAUTH_SRP])=no
148 ])
149 ])
150 ])
151 if test -n "$PECL_CACHE_VAR([LIBCURL_TLSAUTH_SRP])"; then
152 PECL_DEFINE([HAVE_LIBCURL_TLSAUTH_TYPE])
153 if $PECL_CACHE_VAR([LIBCURL_TLSAUTH_SRP]); then
154 PECL_DEFINE([LIBCURL_TLSAUTH_SRP], [CURL_TLSAUTH_SRP])
155 PECL_DEFINE([LIBCURL_TLSAUTH_DEF], [CURL_TLSAUTH_NONE])
156 else
157 PECL_DEFINE([LIBCURL_TLSAUTH_SRP], ["SRP"])
158 PECL_DEFINE([LIBCURL_TLSAUTH_DEF], [""])
159 fi
160 fi
161 ])
162 ])
163 ])
164 dnl
165 dnl PECL_HAVE_LIBCURL_ARES
166 dnl
167 AC_DEFUN([PECL_HAVE_LIBCURL_ARES], [
168 AC_CACHE_CHECK([for c-ares providing AsynchDNS in libcurl], PECL_CACHE_VAR([HAVE_LIBCURL_ARES]), [
169 AC_TRY_RUN([
170 #include <curl/curl.h>
171 int main(int argc, char *argv[]) {
172 curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
173 if (data && data->ares && data->ares_num) {
174 return 0;
175 }
176 return 1;
177 }
178 ], [
179 PECL_CACHE_VAR([HAVE_LIBCURL_ARES])=yes
180 ], [
181 PECL_CACHE_VAR([HAVE_LIBCURL_ARES])=no
182 ])
183 ])
184 PECL_VAR([HAVE_LIBCURL_ARES])=$PECL_CACHE_VAR([HAVE_LIBCURL_ARES])
185 if $PECL_VAR([HAVE_LIBCURL_ARES]); then
186 PECL_DEFINE([HAVE_LIBCURL_ARES])
187 fi
188 ])
189 dnl
190 dnl PECL_HAVE_LIBCURL_CA
191 dnl
192 dnl Checks for any installed default CA path/info with PECL_CHECK_CA providing curl's ca config.
193 dnl Defines shell vars PHP_<PECL_NAME>_LIBCURL_CAPATH and PHP_<PECL_NAME>_LIBCURL_CAINFO
194 dnl additionally to those defined in PECL_CHECK_CA.
195 dnl
196 AC_DEFUN([PECL_HAVE_LIBCURL_CA], [
197 CURL_CONFIG_CA=$($CURL_CONFIG --ca)
198 if test -z "$CURL_CONFIG_CA"; then
199 CURL_CONFIG_CA=$($CURL_CONFIG --configure | $EGREP -o -- "--with-ca@<:@^\'@:>@*" | $SED 's/.*=//')
200 fi
201 PECL_CHECK_CA($CURL_CONFIG_CA, $CURL_CONFIG_CA)
202 PECL_VAR([LIBCURL_CAPATH])=$PECL_VAR([CAPATH])
203 PECL_VAR([LIBCURL_CAINFO])=$PECL_VAR([CAINFO])
204 ])
205 dnl
206 dnl PECL_CHECK_LIBCURL(search-dir[, min-version])
207 dnl
208 dnl Defines shell var $CURL_CONFIG (false if curl-config could not be found).
209 dnl
210 dnl Calls PECL_CHECK_CONFIG(libcurl ...) for its tests.
211 dnl Call PECL_CHECK_DONE(libcurl[, success]) yourself when you're done
212 dnl with any subtests. This is IMPORTANT!
213 dnl
214 AC_DEFUN([PECL_CHECK_LIBCURL], [dnl
215 AC_REQUIRE([PECL_PROG_SED])dnl
216 AC_REQUIRE([PECL_PROG_EGREP])dnl
217 AC_PATH_PROG([CURL_CONFIG], [curl-config], false, [$1/bin:$PATH:/usr/local/bin])
218 PECL_CHECK_CONFIG(libcurl, $CURL_CONFIG,
219 [--version | $SED -e 's/@<:@^0-9\.@:>@//g'],
220 [--cflags],
221 [--libs | $EGREP -o -- '(^|\s)-L@<:@^ @:>@* ?' | xargs],
222 [--libs | $EGREP -o -- '(^|\s)-l@<:@^ @:>@* ?' | xargs]dnl
223 )
224 ifelse([$2],,,[
225 PECL_HAVE_VERSION([libcurl], [$2])
226 ])
227 ])