introduce --with-pthreads[=DIR], use --without-pthreads to disable threads
authorLubomir Sedlacik <salo@silcnet.org>
Sat, 7 Sep 2002 12:30:22 +0000 (12:30 +0000)
committerLubomir Sedlacik <salo@silcnet.org>
Sat, 7 Sep 2002 12:30:22 +0000 (12:30 +0000)
support altogether.  fix --with-iconv on systems which need to bypass broken
native iconv().  be more verbose, cleanups, sort..

CHANGES
configure.in.pre

diff --git a/CHANGES b/CHANGES
index fa532993d0e86a92d914873f3f60d33d382a641e..11270f2f9f922aa4044941186a82c3326a19e829 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,13 @@
+Sat Sep  7 14:22:43 CEST 2002 Lubomir Sedlacik <salo@silcnet.org>
+
+       * Rewritten check for POSIX threads.  Use --with-pthreads[=DIR]
+         for implied search (not needed on platforms which has native
+         pthreads library).  Use --without-pthreads to disable threads.
+         Affected file is configure.in.pre
+
+       * Fixed --with-iconv on platforms which need to bypass (broken)
+          native iconv().  Affected file is configure.in.pre
+
 Sat Sep  7 15:08:13 EEST 2002 Pekka Riikonen <priikone@silcnet.org>
 
        * Moved -C option parsing in Irssi SILC client at same time
index 0a481f49e88545e69aa255e7dbbc96b9d26ad24d..96eadb1d562ecaa24eebc12f3a197ff02402ae2e 100644 (file)
@@ -22,6 +22,9 @@ AC_INIT(includes/silcversion.h)
 #
 AC_CANONICAL_SYSTEM
 case "$target" in
+  *-*-freebsd*)
+    check_threads=true
+    ;;
   *-*-*bsd*)
     check_threads=false
     ;;
@@ -118,7 +121,7 @@ AC_CHECK_FUNCS(select listen bind shutdown close connect setsockopt)
 AC_CHECK_FUNCS(time ctime utime gettimeofday)
 AC_CHECK_FUNCS(chmod fcntl stat fstat getenv putenv strerror)
 AC_CHECK_FUNCS(getpid getgid getsid getpgid getpgrp getuid)
-AC_CHECK_FUNCS(setgroups initgroups pthread_create nl_langinfo)
+AC_CHECK_FUNCS(setgroups initgroups nl_langinfo)
 AC_CHECK_FUNCS(strchr strstr strcpy strncpy memcpy memset memmove)
 
 # SIM support checking
@@ -126,7 +129,8 @@ AC_CHECK_FUNCS(strchr strstr strcpy strncpy memcpy memset memmove)
 # XXX This probably needs to be made platform dependant check.
 #
 sim_support=false
-AC_CHECKING(for SIM support)
+AC_MSG_CHECKING(for SIM support)
+AC_MSG_RESULT()
 AC_CHECK_HEADERS(dlfcn.h,
   AC_CHECK_LIB(dl, dlopen,
     [
@@ -164,7 +168,7 @@ AM_CONDITIONAL(HAVE_GETOPT_LONG, test x$have_getopt_long = x1)
 
 # IPv6 support
 #
-AC_MSG_CHECKING(for IPv6 support)
+AC_MSG_CHECKING(whether to enable IPv6 support)
 AC_ARG_ENABLE(ipv6,
   [  --enable-ipv6           enable IPv6 support],
   [
@@ -213,7 +217,7 @@ fi
 
 # Debug checking
 #
-AC_MSG_CHECKING(for enabled debugging)
+AC_MSG_CHECKING(whether to enable debugging)
 AC_ARG_ENABLE(debug,
   [  --enable-debug          enable debugging],
   [
@@ -236,7 +240,7 @@ AC_ARG_ENABLE(debug,
 
 # Stack trace checking
 #
-AC_MSG_CHECKING(for enabled stack tracing)
+AC_MSG_CHECKING(whether to enable stack tracing)
 AC_ARG_ENABLE(stack-trace,
   [  --enable-stack-trace    enable memory stack trace],
   [
@@ -255,117 +259,15 @@ AC_ARG_ENABLE(stack-trace,
 
 # Disable all assembler optimizations
 #
+AC_MSG_CHECKING(whether to enable assembler optimizations)
 AC_ARG_ENABLE(asm,
-  [  --disable-asm           do not use assembler optimizations])
-
-# Threads support
-#
-want_threads=false
-AC_ARG_ENABLE(threads,
-  [  --disable-threads       do not compile with multi-thread support],
+  [  --disable-asm           do not use assembler optimizations],
   [
-    case "${enableval}" in
-      yes)
-        want_threads=true
-        check_threads=true
-        ;;
-      *)
-        check_threads=false
-        ;;
-    esac
-  ])
-
-if test x$check_threads = xtrue; then
-AC_CHECK_HEADERS(pthread.h,
-  [
-    AC_DEFINE(SILC_HAVE_PTHREAD)
-    want_threads=true
+    AC_MSG_RESULT(no)
   ],
   [
-    if test -f /usr/pkg/include/pthread.h ; then
-      AC_DEFINE(SILC_HAVE_PTHREAD)
-      want_threads=true
-      AC_MSG_RESULT(Found pthread.h in /usr/pkg/include/)
-      CFLAGS="$CFLAGS -I/usr/pkg/include"
-    elif test -f /usr/contrib/include/pthread.h ; then
-      AC_DEFINE(SILC_HAVE_PTHREAD)
-      want_threads=true
-      AC_MSG_RESULT(Found pthread.h in /usr/contrib/include/)
-      CFLAGS="$CFLAGS -I/usr/contrib/include"
-    fi
+    AC_MSG_RESULT(yes)
   ])
-fi
-
-AM_CONDITIONAL(SILC_THREADS, test x$want_threads = xtrue)
-if test x$want_threads = xtrue; then
-  TMP_LIBS="$LIBS"
-  LIBS="-lpthread"
-  AC_TRY_LINK(
-    [
-      #include <pthread.h>
-    ],
-    [
-      pthread_attr_t attr;
-      pthread_attr_init(&attr);
-    ],
-    [
-      AC_DEFINE(SILC_THREADS)
-    ],
-    [
-      LIBS="-L/usr/pkg/lib -lpthread"
-      AC_TRY_LINK(
-        [
-          #include <pthread.h>
-        ],
-       [
-          pthread_attr_t attr;
-          pthread_attr_init(&attr);
-        ],
-        [
-          AC_DEFINE(SILC_THREADS)
-        ],
-        [
-          LIBS="-L/usr/contrib/lib -lpthread"
-          AC_TRY_LINK(
-            [
-              #include <pthread.h>
-            ],
-            [
-              pthread_attr_t attr;
-              pthread_attr_init(&attr);
-            ],
-            [
-              AC_DEFINE(SILC_THREADS)
-            ],
-              LIBS=""
-            )
-         ])
-    ])
-
-  CFLAGS="$CFLAGS -D_REENTRANT"
-  case $host in
-    *-aix*)
-      CFLAGS="$CFLAGS -D_THREAD_SAFE"
-      if test x"$GCC" = xyes; then
-        CFLAGS="$CFLAGS -mthreads"
-      fi
-      ;;
-    *-freebsd2.2*)
-      CFLAGS="$CFLAGS -D_THREAD_SAFE"
-      ;;
-    *-sysv5uw7*)  # UnixWare 7
-      if test "$GCC" != "yes"; then
-        CFLAGS="$CFLAGS -Kthread"
-      else
-        CFLAGS="$CFLAGS -pthread"
-      fi
-      ;;
-    *-dg-dgux*)  # DG/UX
-      CFLAGS="$CFLAGS -D_POSIX4A_DRAFT10_SOURCE"
-      ;;
-  esac
-  LIBS="$TMP_LIBS $LIBS"
-fi
 
 
 ##
@@ -620,7 +522,7 @@ fi
 # source tree.
 #
 mp_gmp=false
-AC_MSG_CHECKING(whether to support GMP)
+AC_MSG_CHECKING(whether to search for GMP)
 AC_ARG_WITH(gmp,
   [[  --with-gmp[=DIR]        use GMP instead of MPI [search in DIR/lib and DIR/include]]],
   [
@@ -664,44 +566,123 @@ fi
 
 # iconv support
 #
+check_iconv=true
+has_iconv=false
+AC_MSG_CHECKING(whether to implicit search for libiconv)
 AC_ARG_WITH(iconv,
   [[  --with-iconv[=DIR]      use libiconv [search in DIR/include and DIR/lib]]],
   [
-    if test -d $dir/include; then
-      CPPFLAGS="$CPPFLAGS -I$dir/include"
-      CFLAGS="$CFLAGS -I$dir/include"
-    fi
-    if test -d $dir/lib; then
-      LDFLAGS="$LDFLAGS -L$dir/lib"
-    fi
-  ])
+    case "${withval}" in
+      no)
+        AC_MSG_RESULT(no)
+
+        AC_CHECK_HEADERS(iconv.h, AC_CHECK_FUNC(iconv, has_iconv=true))
+        check_iconv=false
+        ;;
+      *)
+        AC_MSG_RESULT(yes)
 
-AC_CHECK_HEADER(iconv.h,
+        if test -d $withval/include; then
+          CPPFLAGS="$CPPFLAGS -I$withval/include"
+          CFLAGS="$CFLAGS -I$withval/include"
+        fi
+        if test -d $withval/lib; then
+          LDFLAGS="$LDFLAGS -L$withval/lib"
+        fi
+    esac
+  ],
   [
-    AC_DEFINE(HAVE_ICONV_H, 1, [Define if you have the iconv.h header.])
-    AC_CHECK_FUNC(iconv, ac_iconv_found=1,
-      [
-        LIBS="$LIBS -liconv"
-        AC_MSG_CHECKING(for iconv in -liconv)
-        AC_TRY_LINK(
-          [
-            #include <stdlib.h>
-            #include <iconv.h>
-          ],
-          [
-            iconv_t cd = iconv_open("", "");
-            iconv(cd, NULL, NULL, NULL, NULL);
-            iconv_close(cd);
-          ],
-          [
-            echo "yes"
-            AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
-          ])
-      ])
-   ])
+    AC_MSG_RESULT(no)
+
+    AC_CHECK_HEADERS(iconv.h, AC_CHECK_FUNCS(iconv,
+                                [
+                                  has_iconv=true
+                                  check_iconv=false
+                                 ]))
+  ])
+
+if test x$check_iconv = xtrue; then
+  AC_MSG_RESULT(starting search...)
 
-if test x$ac_iconv_found = x1; then
+  # XXX
+  unset ac_cv_header__iconv_h_ ac_cv_header_iconv_h || true
 
+  AC_CHECK_HEADERS(iconv.h,
+    [
+      LIBS="$LIBS -liconv"
+      AC_MSG_CHECKING(for iconv in -liconv)
+      AC_TRY_LINK(
+        [
+          #include <stdlib.h>
+          #include <iconv.h>
+        ],
+        [
+          iconv_t cd = iconv_open("", "");
+          iconv(cd, NULL, NULL, NULL, NULL);
+          iconv_close(cd);
+        ],
+        [
+          echo "yes"
+          AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+          has_iconv=true 
+          check_iconv=true 
+        ])
+     ])
+fi
+
+if test x$check_iconv = xtrue; then
+  # search for iconv library..
+  SAVE_CPPFLAGS="$CPPFLAGS"
+  SAVE_CFLAGS="$CFLAGS"
+  SAVE_LDFLAGS="$LDFLAGS"
+    
+  for dir in `echo "/usr/local /usr/pkg /usr/contrib"`; do
+    if test x$has_iconv = xfalse; then
+      AC_MSG_RESULT(searching in $dir...)
+    
+      CPPFLAGS="$SAVE_CPPFLAGS"
+      CFLAGS="$SAVE_CFLAGS"
+      LDFLAGS="$SAVE_LDFLAGS"
+      
+      if test -d $dir/include; then
+        CPPFLAGS="$CPPFLAGS -I$dir/include"
+        CFLAGS="$CFLAGS -I$dir/include"
+      fi
+      if test -d $dir/lib; then
+        LDFLAGS="$LDFLAGS -L$dir/lib"
+      fi
+    
+      # XXX
+      unset ac_cv_header__iconv_h_ ac_cv_header_iconv_h || true
+      
+      AC_CHECK_HEADERS(iconv.h,
+        [
+          LIBS="$LIBS -liconv"
+          AC_MSG_CHECKING(for iconv in -liconv)
+          AC_TRY_LINK(
+            [
+              #include <stdlib.h>
+              #include <iconv.h>
+            ],
+            [
+              iconv_t cd = iconv_open("", "");
+              iconv(cd, NULL, NULL, NULL, NULL);
+              iconv_close(cd);
+            ],
+            [
+              echo "yes"
+              has_iconv=true 
+              AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+            ],
+            [
+              has_iconv=false
+            ])
+         ])
+      fi
+    done
+fi
+
+if test x$has_iconv = xtrue; then
   # (1) Some implementations of iconv won't convert from UTF-8 to UTF-8.
   # (2) In glibc-2.1.2 and earlier there is a bug that messes up ob and
   #     obl when args 2 and 3 are 0 (fixed in glibc-2.1.3).
@@ -740,15 +721,133 @@ if test x$ac_iconv_found = x1; then
   fi
 fi
 
+# POSIX threads support
+#
+has_threads=false
+AC_MSG_CHECKING(whether to search for POSIX threads)
+AC_ARG_WITH(pthreads,
+  [[  --with-pthreads[=DIR]   use POSIX threads [search in DIR/include and DIR/lib]]],
+  [ 
+    case "${withval}" in
+      no)
+        check_threads=false
+        ;;
+      *)
+        if test -d $withval/include; then
+          CPPFLAGS="$CPPFLAGS -I$withval/include"
+          CFLAGS="$CFLAGS -I$withval/include"
+        fi
+        if test -d $withval/lib; then
+          LDFLAGS="$LDFLAGS -L$withval/lib"
+        fi
+
+        check_threads=true
+        ;;
+    esac
+  ])
+
+if test x$check_threads = xtrue; then
+  AC_MSG_RESULT(yes)
+  AC_CHECK_HEADERS(pthread.h,
+    [
+      SAVE_LIBS="$LIBS"
+      LIBS="$LIBS -lpthread"
+      AC_CHECK_LIB(pthread, pthread_attr_init, has_threads=true,
+        [
+          # FreeBSD
+          case "${target}" in
+            *-*-freebsd*)
+              LIBS="$SAVE_LIBS -pthread"
+              AC_CHECK_LIB(c_r, pthread_attr_init, has_threads=true)
+              ;;
+          esac
+        ])
+    ],
+    [
+      # search for pthread library..
+      SAVE_CPPFLAGS="$CPPFLAGS"
+      SAVE_CFLAGS="$CFLAGS"
+      SAVE_LDFLAGS="$LDFLAGS"
+
+      for dir in `echo "/usr/local /usr/pkg /usr/contrib /usr/pkg/pthreads /usr/local/pthreads"`; do
+        if test x$has_threads = xfalse; then
+          AC_MSG_RESULT(searching in $dir...)
+  
+          CPPFLAGS="$SAVE_CPPFLAGS"
+          CFLAGS="$SAVE_CFLAGS"
+          LDFLAGS="$SAVE_LDFLAGS"
+  
+          if test -d $dir/include; then
+            CPPFLAGS="$CPPFLAGS -I$dir/include"
+            CFLAGS="$CFLAGS -I$dir/include"
+          fi
+          if test -d $dir/lib; then
+            LDFLAGS="$LDFLAGS -L$dir/lib"
+          fi
+
+          # XXX
+          unset ac_cv_header__pthread_h_ ac_cv_header_pthread_h || true
+
+          AC_CHECK_HEADERS(pthread.h,
+            [ 
+              LIBS="$LIBS -lpthread"
+              AC_CHECK_LIB(pthread, pthread_attr_init, has_threads=true,
+                                                       has_threads=false)
+            ])
+        fi
+      done
+    ])
+else
+  AC_MSG_RESULT(no)
+  has_threads=false
+fi
+
+AM_CONDITIONAL(SILC_THREADS, test x$has_threads = xtrue)
+if test x$has_threads = xtrue; then
+  CFLAGS="$CFLAGS -D_REENTRANT"
+
+  # XXX possibly incomplete
+  case "${target}" in
+    *-*-aix*)
+      CFLAGS="$CFLAGS -D_THREAD_SAFE"
+      if test x"$GCC" = xyes; then
+        CFLAGS="$CFLAGS -mthreads"
+      fi
+      ;;
+    *-*-freebsd*)
+      CFLAGS="$CFLAGS -D_THREAD_SAFE"
+      ;;
+    *-*-sysv5uw7*)  # UnixWare 7
+      if test "$GCC" != "yes"; then
+        CFLAGS="$CFLAGS -Kthread"
+      else
+        CFLAGS="$CFLAGS -pthread"
+      fi
+      ;;
+    *-dg-dgux*)  # DG/UX
+      CFLAGS="$CFLAGS -D_POSIX4A_DRAFT10_SOURCE"
+      ;;
+   esac
+
+  AC_CHECK_FUNC(pthread_create)
+  AC_DEFINE(SILC_HAVE_PTHREAD)
+  AC_DEFINE(SILC_THREADS)
+fi
+
 # Native WIN32 compilation under cygwin
 #
+AC_MSG_CHECKING(whether to compile native WIN32 code)
 AC_ARG_WITH(win32,
   [  --with-win32            compile native WIN32 code (-mno-cygwin)],
   [
+    AC_MSG_RESULT(yes)
     AC_DEFINE(SILC_WIN32)
     win32_support=true
     CFLAGS="-mno-cygwin $CFLAGS"
     LIBS="$LIBS -lwsock32"
+  ],
+  [
+    AC_MSG_RESULT(no)
   ])
 AM_CONDITIONAL(SILC_WIN32, test x$win32_support = xtrue)
 
@@ -767,21 +866,31 @@ AM_CONDITIONAL(SILC_OS2, test xfalse = xtrue)
 # --without-irssi
 #
 without_irssi=false
+AC_MSG_CHECKING(whether to compile Irssi SILC Client)
 AC_ARG_WITH(irssi,
   [  --without-irssi         compile without Irssi SILC Client],
   [
+    AC_MSG_RESULT(no)
     without_irssi=true
     SILC_DIST_SUBDIRS=`echo $SILC_DIST_SUBDIRS | $sedpath -e 's/irssi//'`
+  ],
+  [
+    AC_MSG_RESULT(yes)
   ])
 
 # --without-silcd
 #
 without_silcd=false
+AC_MSG_CHECKING(whether to compile SILC Server)
 AC_ARG_WITH(silcd,
   [  --without-silcd         compile without SILC Server],
   [
+    AC_MSG_RESULT(no)
     without_silcd=true
     SILC_DIST_SUBDIRS=`echo $SILC_DIST_SUBDIRS | $sedpath -e 's/silcd//'`
+  ],
+  [
+    AC_MSG_RESULT(yes)
   ])