diff options
author | Seonah Moon <seonah1.moon@samsung.com> | 2017-07-21 15:54:13 +0900 |
---|---|---|
committer | Seonah Moon <seonah1.moon@samsung.com> | 2017-07-21 16:22:32 +0900 |
commit | 5a2e836b77304d12730747efd8aa24c6f442c69f (patch) | |
tree | f3f54f161e564ceff35533e35e1c92a250f86bfb | |
parent | 4edeecae05b1660a777f99947472bc8d32e34b68 (diff) | |
download | curl-5a2e836b77304d12730747efd8aa24c6f442c69f.tar.gz curl-5a2e836b77304d12730747efd8aa24c6f442c69f.tar.bz2 curl-5a2e836b77304d12730747efd8aa24c6f442c69f.zip |
Add glib2 dependency to support IDN
Change-Id: Ie330340da408b1cf57fca5c30c0f7dac88d85eb7
Signed-off-by: Seonah Moon <seonah1.moon@samsung.com>
-rw-r--r-- | configure.ac | 128 | ||||
-rw-r--r-- | lib/curl_config.h.in | 3 | ||||
-rw-r--r-- | lib/url.c | 11 | ||||
-rw-r--r-- | packaging/curl.spec | 4 |
4 files changed, 144 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac index 1e76c4918..417ba2047 100644 --- a/configure.ac +++ b/configure.ac @@ -2953,6 +2953,134 @@ dnl Let's hope this split URL remains working: dnl http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \ dnl genprogc/thread_quick_ref.htm +dnl ********************************************************************** +dnl Check for GLIB-2.0 (IDN support) +dnl ********************************************************************** + +AC_MSG_CHECKING([whether to build with glib-2.0]) +OPT_IDN="default" +AC_ARG_WITH(glib-2.0, +AC_HELP_STRING([--with-glib2=PATH],[Enable glib-2.0 usage]) +AC_HELP_STRING([--without-glib2],[Disable glib-2.0 usage]), + [OPT_IDN=$withval]) +case "$OPT_IDN" in + no) + dnl --without-glib2 option used + want_idn="no" + AC_MSG_RESULT([no]) + ;; + default) + dnl configure option not specified + want_idn="yes" + want_idn_path="default" + AC_MSG_RESULT([(assumed) yes]) + ;; + yes) + dnl --with-glib2 option used without path + want_idn="yes" + want_idn_path="default" + AC_MSG_RESULT([yes]) + ;; + *) + dnl --with-glib2 option used with path + want_idn="yes" + want_idn_path="$withval" + AC_MSG_RESULT([yes ($withval)]) + ;; +esac + +if test "$want_idn" = "yes"; then + dnl idn library support has been requested + clean_CPPFLAGS="$CPPFLAGS" + clean_LDFLAGS="$LDFLAGS" + clean_LIBS="$LIBS" + PKGCONFIG="no" + # + if test "$want_idn_path" != "default"; then + dnl path has been specified + IDN_PCDIR="$want_idn_path/lib$libsuff/pkgconfig" + CURL_CHECK_PKGCONFIG(glib-2.0, [$IDN_PCDIR]) + if test "$PKGCONFIG" != "no"; then + IDN_LIBS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl + $PKGCONFIG --libs-only-l glib-2.0 2>/dev/null` + IDN_LDFLAGS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl + $PKGCONFIG --libs-only-L glib-2.0 2>/dev/null` + IDN_CPPFLAGS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl + $PKGCONFIG --cflags-only-I glib-2.0 2>/dev/null` + IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'` + else + dnl pkg-config not available or provides no info + IDN_LIBS="-lglib-2.0" + IDN_LDFLAGS="-L$want_idn_path/lib$libsuff" + IDN_CPPFLAGS="-I$want_idn_path/include" + IDN_DIR="$want_idn_path/lib$libsuff" + fi + else + dnl path not specified + CURL_CHECK_PKGCONFIG(glib-2.0) + if test "$PKGCONFIG" != "no"; then + IDN_LIBS=`$PKGCONFIG --libs-only-l glib-2.0 2>/dev/null` + IDN_LDFLAGS=`$PKGCONFIG --libs-only-L glib-2.0 2>/dev/null` + IDN_CPPFLAGS=`$PKGCONFIG --cflags-only-I glib-2.0 2>/dev/null` + IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'` + else + dnl pkg-config not available or provides no info + IDN_LIBS="-lglib-2.0" + fi + fi + # + if test "$PKGCONFIG" != "no"; then + AC_MSG_NOTICE([pkg-config: IDN_LIBS: "$IDN_LIBS"]) + AC_MSG_NOTICE([pkg-config: IDN_LDFLAGS: "$IDN_LDFLAGS"]) + AC_MSG_NOTICE([pkg-config: IDN_CPPFLAGS: "$IDN_CPPFLAGS"]) + AC_MSG_NOTICE([pkg-config: IDN_DIR: "$IDN_DIR"]) + else + AC_MSG_NOTICE([IDN_LIBS: "$IDN_LIBS"]) + AC_MSG_NOTICE([IDN_LDFLAGS: "$IDN_LDFLAGS"]) + AC_MSG_NOTICE([IDN_CPPFLAGS: "$IDN_CPPFLAGS"]) + AC_MSG_NOTICE([IDN_DIR: "$IDN_DIR"]) + fi + # + CPPFLAGS="$IDN_CPPFLAGS $CPPFLAGS" + LDFLAGS="$IDN_LDFLAGS $LDFLAGS" + LIBS="$IDN_LIBS $LIBS" + # + AC_MSG_CHECKING([if g_hostname_to_ascii can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([g_hostname_to_ascii]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_glib2="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_glib2="no" + ]) + # + if test "$tst_links_glib2" = "yes"; then + AC_DEFINE(USE_GLIB2_HOSTNAME, 1, [Define to 1 if you have the `glib-2.0' library (-lglib-2.0).]) + dnl different versions of libidn have different setups of these: + + AC_SUBST([IDN_ENABLED], [1]) + curl_idn_msg="enabled (glib-2.0)" + if test -n "$IDN_DIR" -a "x$cross_compiling" != "xyes"; then + LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$IDN_DIR" + export LD_LIBRARY_PATH + AC_MSG_NOTICE([Added $IDN_DIR to LD_LIBRARY_PATH]) + fi + else + AC_MSG_WARN([Cannot find libraries for IDN support: IDN disabled]) + CPPFLAGS="$clean_CPPFLAGS" + LDFLAGS="$clean_LDFLAGS" + LIBS="$clean_LIBS" + fi + +fi + +dnl Let's hope this split URL remains working: +dnl http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \ +dnl genprogc/thread_quick_ref.htm + + dnl ********************************************************************** dnl Check for nghttp2 diff --git a/lib/curl_config.h.in b/lib/curl_config.h.in index 60e9d2381..21bf76d74 100644 --- a/lib/curl_config.h.in +++ b/lib/curl_config.h.in @@ -921,6 +921,9 @@ /* to enable Apple OS native SSL/TLS support */ #undef USE_DARWINSSL +/* Define to 1 if you have the `glib-2.0' library (-lglib-2.0). */ +#undef USE_GLIB2_HOSTNAME + /* if GnuTLS is enabled */ #undef USE_GNUTLS @@ -65,6 +65,8 @@ #elif defined(USE_WIN32_IDN) /* prototype for curl_win32_idn_to_ascii() */ bool curl_win32_idn_to_ascii(const char *in, char **out); +#elif defined(USE_GLIB2_HOSTNAME) +#include <glib.h> #endif /* USE_LIBIDN2 */ #include "urldata.h" @@ -4072,6 +4074,15 @@ static void fix_hostname(struct connectdata *conn, struct hostname *host) } else infof(data, "Failed to convert %s to ACE;\n", host->name); +#elif defined(USE_GLIB2_HOSTNAME) + gchar *ace_hostname = NULL; + ace_hostname = g_hostname_to_ascii(host->name); + if(ace_hostname) { + host->encalloc = (char *)ace_hostname; + host->name = host->encalloc; + } + else + infof(data, "Failed to convert %s to ACE;\n", host->name); #else infof(data, "IDN support not present, can't parse Unicode domains\n"); #endif diff --git a/packaging/curl.spec b/packaging/curl.spec index dc405a263..fc16745e7 100644 --- a/packaging/curl.spec +++ b/packaging/curl.spec @@ -9,8 +9,8 @@ URL: http://curl.haxx.se/ Source0: %{name}-%{version}.tar.gz Source1001: %{name}.manifest +BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(openssl) -BuildRequires: pkgconfig(libidn) BuildRequires: pkgconfig(zlib) BuildRequires: pkgconfig(libcares) BuildRequires: pkgconfig(libnghttp2) @@ -70,7 +70,7 @@ CFLAGS+=" -DTIZEN_TV_EXT" %endif --with-ca-path==/etc/ssl/certs \ --with-ca-bundle=/etc/ssl/ca-bundle.pem \ ---with-libidn \ +--with-glib2 \ --with-lber-lib=lber \ --enable-manual --enable-versioned-symbols --enable-ares --enable-debug --enable-curldebug \ --disable-static \ |