Issue 1447: Pass proper Host header and SNI when SRV is used with curl.
[gnupg.git] / m4 / libcurl.m4
index 798427c..ce02add 100644 (file)
@@ -1,7 +1,7 @@
 # LIBCURL_CHECK_CONFIG ([DEFAULT-ACTION], [MINIMUM-VERSION],
 #                       [ACTION-IF-YES], [ACTION-IF-NO])
 # ----------------------------------------------------------
-#      David Shaw <dshaw@jabberwocky.com>   Jan-17-2006
+#      David Shaw <dshaw@jabberwocky.com>   Jan-16-2007
 #
 # Checks for libcurl.  DEFAULT-ACTION is the string yes or no to
 # specify whether to default to --with-libcurl or --without-libcurl.
@@ -58,7 +58,7 @@ AC_DEFUN([LIBCURL_CHECK_CONFIG],
 
   AC_ARG_WITH(libcurl,
      AC_HELP_STRING([--with-libcurl=DIR],[look for the curl library in DIR]),
-     [_libcurl_with=$withval],[_libcurl_with=ifelse([$1],,[yes],[$1])])
+     [_libcurl_with=$withval],[_libcurl_with=m4_if([$1],,[yes],[$1])])
 
   if test "$_libcurl_with" != "no" ; then
 
@@ -66,6 +66,11 @@ AC_DEFUN([LIBCURL_CHECK_CONFIG],
 
      _libcurl_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[[1]]+256*A[[2]]+A[[3]]; print X;}'"
 
+     # More recent versions of curl-config have a direct --vernum
+     # option, but we'd like this code to work with older versions as
+     # well, so just convert --version.
+     _libcurl_vernum_parse="eval $AWK '{printf \"0x%06X\",\$NF}'"
+
      _libcurl_try_link=yes
 
      if test -d "$_libcurl_with" ; then
@@ -82,7 +87,7 @@ AC_DEFUN([LIBCURL_CHECK_CONFIG],
            [libcurl_cv_lib_curl_version=`$_libcurl_config --version | $AWK '{print $[]2}'`])
 
        _libcurl_version=`echo $libcurl_cv_lib_curl_version | $_libcurl_version_parse`
-       _libcurl_wanted=`echo ifelse([$2],,[0],[$2]) | $_libcurl_version_parse`
+       _libcurl_wanted=`echo m4_if([$2],,[0],[$2]) | $_libcurl_version_parse`
 
         if test $_libcurl_wanted -gt 0 ; then
           AC_CACHE_CHECK([for libcurl >= version $2],
@@ -141,7 +146,7 @@ AC_DEFUN([LIBCURL_CHECK_CONFIG],
            _libcurl_save_libs=$LIBS
            LIBS="$LIBCURL $LIBS"
 
-           AC_LINK_IFELSE(AC_LANG_PROGRAM([#include <curl/curl.h>],[
+           AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <curl/curl.h>]],[[
 /* Try and use a few common options to force a failure if we are
    missing symbols or can't link. */
 int x;
@@ -152,7 +157,7 @@ x=CURLOPT_FILE;
 x=CURLOPT_ERRORBUFFER;
 x=CURLOPT_STDERR;
 x=CURLOPT_VERBOSE;
-]),libcurl_cv_lib_curl_usable=yes,libcurl_cv_lib_curl_usable=no)
+]])],libcurl_cv_lib_curl_usable=yes,libcurl_cv_lib_curl_usable=no)
 
            CPPFLAGS=$_libcurl_save_cppflags
            LIBS=$_libcurl_save_libs
@@ -162,17 +167,39 @@ x=CURLOPT_VERBOSE;
 
         if test $libcurl_cv_lib_curl_usable = yes ; then
 
-          # Does curl_free() exist in this version of libcurl?
-          # If not, fake it with free()
-
            _libcurl_save_cppflags=$CPPFLAGS
            CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS"
            _libcurl_save_libs=$LIBS
            LIBS="$LIBS $LIBCURL"
 
-           AC_CHECK_FUNC(curl_free,,
-             AC_DEFINE(curl_free,free,
-               [Define curl_free() as free() if our version of curl lacks curl_free.]))
+          # Check for some libcurl functions that aren't in all
+           # versions.
+
+           AC_CHECK_FUNCS([curl_free curl_easy_escape curl_easy_unescape])
+
+           AH_BOTTOM([
+#ifdef HAVE_LIBCURL
+
+/* Define curl_free() via free() if our version of curl lacks
+   curl_free() */
+#if !defined(curl_free) && !defined(HAVE_CURL_FREE)
+#define curl_free(a) free((a))
+#endif
+
+/* Define curl_easy_escape() via curl_escape() if our version of curl
+   lacks curl_easy_escape() */
+#if !defined(curl_easy_escape) && !defined(HAVE_CURL_EASY_ESCAPE)
+#define curl_easy_escape(a,b,c) curl_escape((b),(c))
+#endif
+
+/* Define curl_easy_unescape() via curl_unescape() if our version of
+   curl lacks curl_easy_unescape() */
+#if !defined(curl_easy_unescape) && !defined(HAVE_CURL_EASY_UNESCAPE)
+#define curl_easy_unescape(a,b,c) curl_unescape((b),(c))
+#endif
+
+#endif /* HAVE_LIBCURL */
+])
 
            CPPFLAGS=$_libcurl_save_cppflags
            LIBS=$_libcurl_save_libs
@@ -184,6 +211,10 @@ x=CURLOPT_VERBOSE;
            AC_SUBST(LIBCURL_CPPFLAGS)
            AC_SUBST(LIBCURL)
 
+          _libcurl_vernum=`echo $_libcurl_version | $_libcurl_vernum_parse`
+
+          AC_DEFINE_UNQUOTED(LIBCURL_VERNUM,$_libcurl_vernum,[The version of the libcurl library in packed hex form])
+
            for _libcurl_feature in $_libcurl_features ; do
              AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_feature_$_libcurl_feature),[1])
              eval AS_TR_SH(libcurl_feature_$_libcurl_feature)=yes
@@ -210,6 +241,9 @@ x=CURLOPT_VERBOSE;
              AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_protocol_$_libcurl_protocol),[1])
              eval AS_TR_SH(libcurl_protocol_$_libcurl_protocol)=yes
            done
+       else
+          unset LIBCURL
+          unset LIBCURL_CPPFLAGS
         fi
      fi
 
@@ -221,15 +255,16 @@ x=CURLOPT_VERBOSE;
      unset _libcurl_protocol
      unset _libcurl_protocols
      unset _libcurl_version
+     unset _libcurl_vernum
      unset _libcurl_ldflags
   fi
 
   if test x$_libcurl_with = xno || test x$libcurl_cv_lib_curl_usable != xyes ; then
      # This is the IF-NO path
-     ifelse([$4],,:,[$4])
+     m4_if([$4],,:,[$4])
   else
      # This is the IF-YES path
-     ifelse([$3],,:,[$3])
+     m4_if([$3],,:,[$3])
   fi
 
   unset _libcurl_with