From 089cbd4a8e8108306ba92b01746ecd261e9fdd7c Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 13 May 2006 17:13:46 +0000 Subject: r15568: Simplify detection of iconv libraries a fair bit and fix it to work on FreeBSD. Based very loosely on a patch by Timur Bakevey Fixes #3688 (This used to be commit ea7b28572b453da8eced565a49e4c10e7ebd2e28) --- source4/lib/charset/config.m4 | 114 +++++++++++++++++++++++++----------------- 1 file changed, 69 insertions(+), 45 deletions(-) (limited to 'source4/lib/charset') diff --git a/source4/lib/charset/config.m4 b/source4/lib/charset/config.m4 index 9812c356ff..cbcae29f10 100644 --- a/source4/lib/charset/config.m4 +++ b/source4/lib/charset/config.m4 @@ -1,6 +1,47 @@ -dnl # ICONV/CHARSET subsystem +dnl SMB_CHECK_ICONV(action-if-found,action-if-not-found) +AC_DEFUN(SMB_CHECK_ICONV,[ + AC_CHECK_HEADERS(iconv.h giconv.h) -ICONV_LOCATION=standard + AC_TRY_RUN([#include +#ifdef HAVE_GICONV_H +#include +#endif +#ifdef HAVE_ICONV_H +#include +#endif + +int main() +{ + iconv_t cd = iconv_open("ASCII","UCS-2LE"); + if (cd == 0 || cd == (iconv_t)-1) return -1; + return 0; +} + ],[$1],[$2]) +]) + +dnl SMB_CHECK_ICONV_DIR(dir,action-if-found,action-if-not-found) +AC_DEFUN(SMB_CHECK_ICONV_DIR, +[ + if test -f "$1/include/iconv.h" -o -f "$1/include/giconv.h"; then + CPPFLAGS="-I$1/include" + LDFLAGS="-L$1/lib" + LIBS=-liconv + + SMB_CHECK_ICONV([$2], + [ + LIBS=-lgiconv + SMB_CHECK_ICONV([$2],[$3]) + ]) + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + else + $2 + fi +]) + +ICONV_FOUND=no LOOK_DIRS="/usr /usr/local /sw" AC_ARG_WITH(libiconv, [ --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ], @@ -9,57 +50,40 @@ AC_ARG_WITH(libiconv, AC_MSG_ERROR(I won't take no for an answer) else if test "$withval" != "yes" ; then - LOOK_DIRS="$withval $LOOK_DIRS" + SMB_CHECK_ICONV_DIR($withval, [ + ICONV_FOUND=yes; + ICONV_CPPFLAGS="$CPPFLAGS" + ICONV_LIBS="$LIBS" + ICONV_LDFLAGS="$LDFLAGS" + ], [AC_MSG_ERROR([No iconv library found in $withval])]) fi fi ]) -ICONV_FOUND="no" -for i in $LOOK_DIRS ; do - save_LIBS=$LIBS - save_LDFLAGS=$LDFLAGS - save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="-I$i/include" - LDFLAGS="-L$i/lib" - LIBS= - export LDFLAGS LIBS CPPFLAGS -dnl Try to find iconv(3) - jm_ICONV($i) - - TMP_ICONV_LIBS="$LIBS" - - CPPFLAGS=$save_CPPFLAGS - LDFLAGS=$save_LDFLAGS - LIBS=$save_LIBS - export LDFLAGS LIBS CPPFLAGS +if test x$ICONV_FOUND = xno; then + SMB_CHECK_ICONV([ICONV_FOUND=yes]) +fi - if test -n "$ICONV_FOUND" ; then - LIB_ADD_DIR(ICONV_LDFLAGS, $i/lib) - CFLAGS_ADD_DIR(ICONV_CPPFLAGS, $i/include) - ICONV_LIBS="$TMP_ICONV_LIBS" - break - fi +for i in $LOOK_DIRS ; do + if test x$ICONV_FOUND = xyes; then + break + fi + + SMB_CHECK_ICONV_DIR($withval, [ + ICONV_FOUND=yes; + ICONV_CPPFLAGS="$CPPFLAGS" + ICONV_LIBS="$LIBS" + ICONV_LDFLAGS="$LDFLAGS" + ], []) done -############ -# check for iconv in libc -AC_CACHE_CHECK([for working iconv],samba_cv_HAVE_NATIVE_ICONV,[ -AC_TRY_RUN([ -#include -main() { - iconv_t cd = iconv_open("ASCII", "UCS-2LE"); - if (cd == 0 || cd == (iconv_t)-1) return -1; - return 0; -} -], -samba_cv_HAVE_NATIVE_ICONV=yes,samba_cv_HAVE_NATIVE_ICONV=no,samba_cv_HAVE_NATIVE_ICONV=cross)]) -if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then - AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv]) -fi - -if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then +if test x"$ICONV_FOUND" = x"no"; then AC_MSG_WARN([Sufficient support for iconv function was not found. - Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!]) + Install libiconv from http://www.gnu.org/software/libiconv/ for better charset compatibility!]) + SMB_ENABLE(ICONV,NO) +else + AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether external iconv is available]) + SMB_ENABLE(ICONV,YES) fi SMB_EXT_LIB(ICONV,[${ICONV_LIBS}],[${ICONV_CFLAGS}],[${ICONV_CPPFLAGS}],[${ICONV_LDFLAGS}]) -- cgit