]> arthur.barton.de Git - netatalk.git/blobdiff - macros/iconv.m4
Spotlight: use async Tracker SPARQL API
[netatalk.git] / macros / iconv.m4
index 82f7aac4385a7370a6125a68250727f129cbd6f6..4805662d7e3933d04aa648c41cc0d322691e7a23 100644 (file)
@@ -1,47 +1,73 @@
-AC_DEFUN([AM_ICONV],
+AC_DEFUN([AC_NETATALK_CHECK_ICONV],
 [
 
 dnl    #################################################
 dnl    # check for libiconv support
-       AC_MSG_CHECKING(whether to use libiconv)
+       saved_CPPFLAGS="$CPPFLAGS"
         savedcflags="$CFLAGS"
         savedldflags="$LDFLAGS"
+       ICONV_CFLAGS=""
+       ICONV_LIBS=""
+
        AC_ARG_WITH(libiconv,
-       [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
+       [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include [[default=auto]]],
        [ case "$withval" in
          no)
-           AC_MSG_RESULT(no)
+           ;;
+         yes)
            ;;
          *)
-           AC_MSG_RESULT(yes)
-           CFLAGS="$CFLAGS -I$withval/include"
-           LDFLAGS="$LDFLAGS -L$withval/lib"
-           AC_CHECK_LIB(iconv, iconv_open, [
-                                if test "$withval" != "/usr" && "$withval" != ""; then
-                                    ICONV_CFLAGS="-I$withval/include"
-                                    ICONV_LIBS ="-L$withval/lib"
-                                fi
-                                ICONV_LIBS="$ICONV_LIBS -liconv"
-                        ])
-           AC_DEFINE_UNQUOTED(WITH_LIBICONV, "${withval}",[Path to iconv])
+           ICONV_CFLAGS="-I$withval/include"
+           ICONV_LIBS="-L$withval/$atalk_libname"
            ;;
          esac ],
-         AC_MSG_RESULT(no)
-       )
+         withval="no"
+       )       
+
+       CFLAGS="$ICONV_CFLAGS $CFLAGS"
+        LDFLAGS="$LDFLAGS $ICONV_LIBS -liconv"
+
+       AC_CACHE_CHECK([for libiconv],netatalk_cv_iconv,[
+          AC_TRY_LINK([
+#include <stdlib.h>
+#include <iconv.h>
+],[
+       iconv_t cd = iconv_open("","");
+        iconv(cd,NULL,NULL,NULL,NULL);
+        iconv_close(cd);
+], netatalk_cv_iconv=yes, netatalk_cv_iconv=no, netatalk_cv_iconv=cross)])
+
+       if test x"$netatalk_cv_iconv" = x"yes"; then
+           ICONV_LIBS="$ICONV_LIBS -liconv"
+        else
+dnl        # unset C-/LDFLAGS so we can detect glibc iconv, if available
+           CFLAGS="$savedcflags"
+           LDFLAGS="$savedldflags"
+           ICONV_LIBS=""
+           ICONV_CFLAGS=""
+           if test x"$withval" != x"no"; then
+               AC_MSG_ERROR([libiconv not found])
+           fi
+       fi
+
+
+       CFLAGS_REMOVE_USR_INCLUDE(ICONV_CFLAGS)
+       LIB_REMOVE_USR_LIB(ICONV_LIBS)
        AC_SUBST(ICONV_CFLAGS)
        AC_SUBST(ICONV_LIBS)
 
 dnl    ############
 dnl    # check for iconv usability
+
        AC_CACHE_CHECK([for working iconv],netatalk_cv_HAVE_USABLE_ICONV,[
-               AC_TRY_RUN([
-       #include <iconv.h>
-       main() {
-              iconv_t cd = iconv_open("MAC", "UTF8");
-              if (cd == 0 || cd == (iconv_t)-1) return -1;
-              return 0;
-       }
-       ], netatalk_cv_HAVE_USABLE_ICONV=yes,netatalk_cv_HAVE_USABLE_ICONV=no,netatalk_cv_HAVE_USABLE_ICONV=cross)])
+               AC_TRY_RUN([\
+#include <iconv.h>
+main() {
+       iconv_t cd = iconv_open("ASCII", "UTF-8");
+       if (cd == 0 || cd == (iconv_t)-1) return -1;
+       return 0;
+}
+], netatalk_cv_HAVE_USABLE_ICONV=yes,netatalk_cv_HAVE_USABLE_ICONV=no,netatalk_cv_HAVE_USABLE_ICONV=cross)])
 
        if test x"$netatalk_cv_HAVE_USABLE_ICONV" = x"yes"; then
            AC_DEFINE(HAVE_USABLE_ICONV,1,[Whether to use native iconv])
@@ -49,26 +75,46 @@ dnl # check for iconv usability
 
 dnl    ###########
 dnl    # check if iconv needs const
-       if test x"$cv_HAVE_USABLE_ICONV" = x"yes"; then
+       if test x"$netatalk_cv_HAVE_USABLE_ICONV" = x"yes"; then
                AC_CACHE_VAL(am_cv_proto_iconv, [
-               AC_TRY_COMPILE([
-               #include <stdlib.h>
-               #include <iconv.h>
-               extern
-               #ifdef __cplusplus
-               "C"
-               #endif
-               #if defined(__STDC__) || defined(__cplusplus)
-               size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
-               #else
-               size_t iconv();
-               #endif
-               ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+               AC_TRY_COMPILE([\
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
                am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
                AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
                        [Define as const if the declaration of iconv() needs const.])
        fi
+
+dnl     ###########
+dnl     # check if (lib)iconv supports UCS-2-INTERNAL
+       if test x"$netatalk_cv_HAVE_USABLE_ICONV" = x"yes"; then
+           AC_CACHE_CHECK([whether iconv supports UCS-2-INTERNAL],netatalk_cv_HAVE_UCS2INTERNAL,[
+               AC_TRY_RUN([\
+#include <iconv.h>
+int main() {
+       iconv_t cd = iconv_open("ASCII", "UCS-2-INTERNAL");
+       if (cd == 0 || cd == (iconv_t)-1) return -1;
+       return 0;
+}
+], netatalk_cv_HAVE_UCS2INTERNAL=yes,netatalk_cv_HAVE_UCS2INTERNAL=no,netatalk_cv_HAVEUCS2INTERNAL=cross)])
+
+       if test x"$netatalk_cv_HAVE_UCS2INTERNAL" = x"yes"; then
+               AC_DEFINE(HAVE_UCS2INTERNAL,1,[Whether UCS-2-INTERNAL is supported])
+       fi
+       fi
+
         CFLAGS="$savedcflags"
         LDFLAGS="$savedldflags"
+       CPPFLAGS="$saved_CPPFLAGS"
        
 ])