update config.m4; allow disabling idna; add idnkit
[m6w6/ext-http] / autoconf / pecl / libcurl.m4
diff --git a/autoconf/pecl/libcurl.m4 b/autoconf/pecl/libcurl.m4
new file mode 100644 (file)
index 0000000..d9250b1
--- /dev/null
@@ -0,0 +1,190 @@
+dnl
+dnl PECL_HAVE_LIBCURL_FEATURE(feature[, code-if-yes[, code-if-no]])
+dnl
+dnl Checks $CURL_CONFIG --feature.
+dnl Defines PHP_<PECL_NAME>_HAVE_LIBCURL_<FEATURE>
+dnl
+AC_DEFUN([PECL_HAVE_LIBCURL_FEATURE], [dnl
+       AC_REQUIRE([PECL_PROG_EGREP])dnl
+       AC_CACHE_CHECK([for $1 feature in libcurl], PECL_CACHE_VAR([HAVE_LIBCURL_FEATURE_$1]), [
+               if $CURL_CONFIG --feature | $EGREP -q $1; then
+                       PECL_CACHE_VAR([HAVE_LIBCURL_FEATURE_$1])=yes
+               else
+                       PECL_CACHE_VAR([HAVE_LIBCURL_FEATURE_$1])=no
+               fi
+       ])
+       PECL_VAR([HAVE_LIBCURL_FEATURE_$1])=$PECL_CACHE_VAR([HAVE_LIBCURL_FEATURE_$1])
+       if $PECL_VAR([HAVE_LIBCURL_FEATURE_$1]); then
+               PECL_DEFINE([HAVE_LIBCURL_$1])
+               $2
+       else
+               ifelse([$3],,:,[$3])
+       fi
+])
+dnl
+dnl PECL_HAVE_LIBCURL_PROTOCOL(protocol[, code-if-yes[, code-if-no]])
+dnl
+AC_DEFUN([PECL_HAVE_LIBCURL_PROTOCOL], [
+       AC_CACHE_CHECK([for $1 protocol in libcurl], PECL_CACHE_VAR([HAVE_LIBCURL_PROTOCOL_$1]), [
+               if $CURL_CONFIG --protocols | $EGREP -q $1; then
+                       PECL_CACHE_VAR([HAVE_LIBCURL_PROTOCOL_$1])=yes
+               else
+                       PECL_CACHE_VAR([HAVE_LIBCURL_PROTOCOL_$1])=no
+               fi
+       ])
+       PECL_VAR([HAVE_LIBCURL_PROTOCOL_$1])=$PECL_CACHE_VAR([HAVE_LIBCURL_PROTOCOL_$1])
+       if $PECL_VAR([HAVE_LIBCURL_PROTOCOL_$1]); then
+               PECL_DEFINE([HAVE_LIBCURL_$1])
+               $2
+       else
+               ifelse([$3],,:,[$3])
+       fi
+])
+dnl
+dnl PECL_HAVE_LIBCURL_SSLLIB(ssllib-name, headers, libs)
+dnl
+AC_DEFUN([PECL_HAVE_LIBCURL_SSLLIB], [
+       AC_CACHE_CHECK([for $1 providing SSL in libcurl], PECL_CACHE_VAR([HAVE_LIBCURL_$1]), [
+               AC_TRY_RUN([
+                       #include <curl/curl.h>
+                       int main(int argc, char *argv[]) {
+                               curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
+                               if (data && data->ssl_version && *data->ssl_version) {
+                                       const char *ptr = data->ssl_version;
+                                       while(*ptr == ' ') ++ptr;
+                                       return strncasecmp(ptr, "$1", sizeof("$1")-1);
+                               }
+                               return 1;
+                       }
+               ], [
+                       PECL_CACHE_VAR([HAVE_LIBCURL_$1])=yes
+               ], [
+                       PECL_CACHE_VAR([HAVE_LIBCURL_$1])=no
+               ])
+       ])
+       PECL_VAR([HAVE_LIBCURL_$1])=$PECL_CACHE_VAR([HAVE_LIBCURL_$1])
+       if $PECL_VAR([HAVE_LIBCURL_$1]); then
+               PECL_DEFINE([HAVE_LIBCURL_$1])
+               m4_foreach_w(header, $2, [AC_CHECK_HEADER(header,, [
+                       PECL_VAR([HAVE_LIBCURL_$1])=false
+               ])])
+               ifelse([$3],,,[
+                       if $PECL_VAR([HAVE_LIBCURL_$1]); then
+                               m4_foreach_w(lib, $3, [
+                                       PHP_ADD_LIBRARY(lib, true, [AS_TR_CPP(PECL_NAME[_SHARED_LIBADD])])
+                               ])
+                       fi
+               ])
+       fi
+])
+dnl
+dnl PECL_HAVE_LIBCURL_SSL
+dnl
+AC_DEFUN([PECL_HAVE_LIBCURL_SSL], [
+       PECL_HAVE_LIBCURL_FEATURE([SSL], [
+               PECL_HAVE_LIBCURL_SSLLIB([OpenSSL], [openssl/ssl.h openssl/crypto.h], [ssl crypto])
+               PECL_HAVE_LIBCURL_SSLLIB([GnuTLS], [gnutls.h gcrypt.h], [gnutls gcrypt])
+               PECL_HAVE_LIBCURL_SSLLIB([NSS])
+               PECL_HAVE_LIBCURL_SSLLIB([SecureTransport])
+               PECL_HAVE_LIBCURL_SSLLIB([GSKit])
+               
+               PECL_HAVE_CONST([curl/curl.h], [CURLOPT_TLSAUTH_TYPE], int, [
+                       PECL_DEFINE([HAVE_LIBCURL_TLSAUTH_TYPE])
+                       AC_CACHE_CHECK([whether CURLOPT_TLSAUTH_TYPE expects CURL_TLSAUTH_SRP], PECL_CACHE_VAR([LIBCURL_TLSAUTH_SRP]), [
+                               PECL_CACHE_VAR([LIBCURL_TLSAUTH_SRP])=
+                               AC_TRY_RUN([
+                                       #include <curl/curl.h>
+                                       int main(int argc, char *argv[]) {
+                                               CURL *ch = curl_easy_init();
+                                               return curl_easy_setopt(ch, CURLOPT_TLSAUTH_TYPE, CURL_TLSAUTH_SRP);
+                                       }
+                               ], [
+                                       PECL_CACHE_VAR([LIBCURL_TLSAUTH_SRP])=yes
+                               ], [
+                                       AC_TRY_RUN([
+                                               #include <curl/curl.h>
+                                               int main(int argc, char *argv[]) {
+                                                       CURL *ch = curl_easy_init();
+                                                       return curl_easy_setopt(ch, CURLOPT_TLSAUTH_TYPE, "SRP");
+                                               }
+                                       ], [
+                                               PECL_CACHE_VAR([LIBCURL_TLSAUTH_SRP])=no
+                                       ])
+                               ])
+                       ])
+                       if test -n "$PECL_CACHE_VAR([LIBCURL_TLSAUTH_SRP])"; then
+                               if $PECL_CACHE_VAR([LIBCURL_TLSAUTH_SRP]); then
+                                       PECL_DEFINE([LIBCURL_TLSAUTH_SRP], [CURL_TLSAUTH_SRP])
+                                       PECL_DEFINE([LIBCURL_TLSAUTH_DEF], [CURL_TLSAUTH_NONE])
+                               else
+                                       PECL_DEFINE([LIBCURL_TLSAUTH_SRP], ["SRP"])
+                                       PECL_DEFINE([LIBCURL_TLSAUTH_DEF], [""])
+                               fi
+                       fi
+               ])
+       ])
+])
+dnl
+dnl PECL_HAVE_LIBCURL_ARES
+dnl
+AC_DEFUN([PECL_HAVE_LIBCURL_ARES], [
+       AC_CACHE_CHECK([for c-ares providing AsynchDNS in libcurl], PECL_CACHE_VAR([HAVE_LIBCURL_ARES]), [
+               AC_TRY_RUN([
+                       #include <curl/curl.h>
+                       int main(int argc, char *argv[]) {
+                               curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
+                               if (data && data->ares && data->ares_num0) {
+                                       return 0;
+                               }
+                               return 1;
+                       }
+               ], [
+                       PECL_CACHE_VAR([HAVE_LIBCURL_ARES])=yes
+               ], [
+                       PECL_CACHE_VAR([HAVE_LIBCURL_ARES])=no
+               ])
+       ])
+       PECL_VAR([HAVE_LIBCURL_ARES])=$PECL_CACHE_VAR([HAVE_LIBCURL_ARES])
+       if $PECL_VAR([HAVE_LIBCURL_ARES]); then
+               PECL_DEFINE([HAVE_LIBCURL_ARES])
+       fi
+])
+dnl
+dnl PECL_HAVE_LIBCURL_CA
+dnl
+dnl Checks for any installed default CA path/info with PECL_CHECK_CA providing curl's ca config.
+dnl Defines shell vars PHP_<PECL_NAME>_LIBCURL_CAPATH and PHP_<PECL_NAME>_LIBCURL_CAINFO
+dnl additionally to those defined in PECL_CHECK_CA.
+dnl
+AC_DEFUN([PECL_HAVE_LIBCURL_CA], [
+       CURL_CONFIG_CA=$($CURL_CONFIG --ca)
+       if test -z "$CURL_CONFIG_CA"; then
+               CURL_CONFIG_CA=$($CURL_CONFIG --configure | $EGREP -o -- "--with-ca@<:@^'@:>@*" | $SED 's/.*=//')
+       fi
+       PECL_CHECK_CA($CURL_CONFIG_CA, $CURL_CONFIG_CA)
+       PECL_VAR([LIBCURL_CAPATH])=$PECL_VAR([CAPATH])
+       PECL_VAR([LIBCURL_CAINFO])=$PECL_VAR([CAINFO])
+])
+dnl
+dnl PECL_CHECK_LIBCURL(search-dir[, min-version])
+dnl
+dnl Defines shell var $CURL_CONFIG (false if curl-config could not be found).
+dnl
+dnl Calls PECL_CHECK_CONFIG(libcurl ...) for its tests.
+dnl Call PECL_CHECK_DONE(libcurl[, success]) yourself when you're done 
+dnl with any subtests. This is IMPORTANT!
+dnl
+AC_DEFUN([PECL_CHECK_LIBCURL], [dnl
+       AC_REQUIRE([PECL_PROG_SED])dnl
+       AC_REQUIRE([PECL_PROG_EGREP])dnl
+       AC_PATH_PROG([CURL_CONFIG], [curl-config], false, [$1/bin:$PATH:/usr/local/bin])
+       PECL_CHECK_CONFIG(libcurl, $CURL_CONFIG, 
+               [--version | $SED -e 's/@<:@^0-9\.@:>@//g'],
+               [--cflags], 
+               [--libs | $EGREP -o -- '-L@<:@^ @:>@* ?'],
+               [--libs | $EGREP -o -- '-l@<:@^ @:>@* ?']dnl
+       )
+       ifelse([$2],,,[
+               PECL_HAVE_VERSION([libcurl], [$2])
+       ])
+])
\ No newline at end of file