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/aclocal.m4 | 92 --------------------------------- source4/include/system/iconv.h | 6 +-- source4/lib/charset/config.m4 | 114 +++++++++++++++++++++++++---------------- 3 files changed, 71 insertions(+), 141 deletions(-) diff --git a/source4/aclocal.m4 b/source4/aclocal.m4 index 4264ddf633..9c7b4e85c1 100644 --- a/source4/aclocal.m4 +++ b/source4/aclocal.m4 @@ -222,98 +222,6 @@ AC_DEFUN(LIB_REMOVE_USR_LIB,[ $1=[$]ac_new_flags ]) -dnl From Bruno Haible. - -AC_DEFUN(jm_ICONV, -[ - dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and - dnl those with the standalone portable libiconv installed). - AC_MSG_CHECKING(for iconv in $1) - jm_cv_func_iconv="no" - jm_cv_lib_iconv=no - jm_cv_giconv=no - AC_TRY_LINK([#include -#include ], - [iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd);], - jm_cv_func_iconv=yes - jm_cv_giconv=yes) - - if test "$jm_cv_func_iconv" != yes; then - AC_TRY_LINK([#include -#include ], - [iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd);], - jm_cv_func_iconv=yes) - - if test "$jm_cv_lib_iconv" != yes; then - jm_save_LIBS="$LIBS" - LIBS="$LIBS -lgiconv" - AC_TRY_LINK([#include -#include ], - [iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd);], - jm_cv_lib_iconv=yes - jm_cv_func_iconv=yes - jm_cv_giconv=yes) - LIBS="$jm_save_LIBS" - - if test "$jm_cv_func_iconv" != yes; then - jm_save_LIBS="$LIBS" - LIBS="$LIBS -liconv" - AC_TRY_LINK([#include -#include ], - [iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd);], - jm_cv_lib_iconv=yes - jm_cv_func_iconv=yes) - LIBS="$jm_save_LIBS" - fi - fi - fi - - if test "$jm_cv_func_iconv" = yes; then - if test "$jm_cv_giconv" = yes; then - AC_DEFINE(HAVE_GICONV, 1, [What header to include for iconv() function: giconv.h]) - AC_MSG_RESULT(yes) - ICONV_FOUND=yes - else - AC_DEFINE(HAVE_ICONV, 1, [What header to include for iconv() function: iconv.h]) - AC_MSG_RESULT(yes) - ICONV_FOUND=yes - fi - else - AC_MSG_RESULT(no) - fi - if test "$jm_cv_lib_iconv" = yes; then - if test "$jm_cv_giconv" = yes; then - LIBS="$LIBS -lgiconv" - else - LIBS="$LIBS -liconv" - fi - fi -]) - -dnl CFLAGS_ADD_DIR(CFLAGS, $INCDIR) -dnl This function doesn't add -I/usr/include into CFLAGS -AC_DEFUN(CFLAGS_ADD_DIR,[ -if test "$2" != "/usr/include" ; then - $1="$$1 -I$2" -fi -]) - -dnl LIB_ADD_DIR(LDFLAGS, $LIBDIR) -dnl This function doesn't add -L/usr/lib into LDFLAGS -AC_DEFUN(LIB_ADD_DIR,[ -if test "$2" != "/usr/lib" ; then - $1="$$1 -L$2" -fi -]) - sinclude(build/m4/public.m4) sinclude(build/m4/core.m4) sinclude(build/m4/ax_cflags_gcc_option.m4) diff --git a/source4/include/system/iconv.h b/source4/include/system/iconv.h index a0c1c18fa2..d9111bb07e 100644 --- a/source4/include/system/iconv.h +++ b/source4/include/system/iconv.h @@ -20,14 +20,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifdef HAVE_NATIVE_ICONV -#ifdef HAVE_ICONV +#ifdef HAVE_ICONV_H #include #endif -#ifdef HAVE_GICONV +#ifdef HAVE_GICONV_H #include #endif -#endif #ifdef HAVE_CTYPE_H #include 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