Merged from silc_1_0_branch.
[silc.git] / configure.in.pre
index 42d38a6c9443fdcefef9335e32352e9fa5eae28f..671dac894b0f2fabe6e7c1f8ce2c30b203f3873e 100644 (file)
 
 AC_INIT(includes/silcversion.h)
 
-#
 # Put here any platform specific stuff
 #
 AC_CANONICAL_SYSTEM
 case "$target" in
+  *-*-freebsd*)
+    check_threads=true
+    ;;
   *-*-*bsd*)
     check_threads=false
     ;;
@@ -32,9 +34,10 @@ case "$target" in
 esac
 
 # ./prepare script will automatically put the correct version. Do not edit!
+#
 AM_INIT_AUTOMAKE(SILC_PACKAGE, SILC_VERSION)
 AC_PREREQ(2.52)
-AM_CONFIG_HEADER(includes/silcdefs.h)
+AC_CONFIG_HEADERS(includes/silcdefs.h)
 
 AC_PROG_CC
 AC_C_INLINE
@@ -45,29 +48,77 @@ AC_SUBST(LN_S)
 
 # Distribution definition. ./prepare will automatically add here a correct
 # value. Do not edit!
+#
 silc_dist=SILC_PACKAGE
 SILC_DIST_SUBDIRS="SILC_DISTRIBUTION_SUBDIRS"
 AC_DEFINE(SILC_DIST_DEFINE)
 
 # XXX
 # Compiler flags
+#
 if test "$GCC"; then
   CFLAGS="-Wall -finline-functions $CFLAGS"
 fi
 
+#
+# Library versioning.
+#
+# Do the releases and library versioning according to following rules:
+#
+#  - If any code has changed in library, increment [LIB]_REVISION
+#  - If functions were added, set [LIB]_REVISION to 0
+#  - If functions were added, removed or changed, increment [LIB]_CURRENT
+#  - If functions were added, increment [LIB]_AGE
+#  - If functions were removed, set [LIB]_AGE to 0
+#
+# where [LIB] is LIBSILC and LIBSILCCLIENT, and where "functions" means
+# functions public interfaces.
+#
+# The LIB_BASE_VERSION defines the SILC software major.minor version and 
+# it is increment only when these version numbers actually change.
+#
+
+# Base version for libraries.  Do not change this unless SILC version
+# changes too.
+LIB_BASE_VERSION=1.0
+
+# libsilc versions
+LIBSILC_CURRENT=1
+LIBSILC_REVISION=0
+LIBSILC_AGE=1
+
+# libsilcclient versions
+LIBSILCCLIENT_CURRENT=1
+LIBSILCCLIENT_REVISION=1
+LIBSILCCLIENT_AGE=0
+
+# Substitute the version numbers
+AC_SUBST(LIB_BASE_VERSION)
+AC_SUBST(LIBSILC_CURRENT)
+AC_SUBST(LIBSILC_REVISION)
+AC_SUBST(LIBSILC_AGE)
+AC_SUBST(LIBSILCCLIENT_CURRENT)
+AC_SUBST(LIBSILCCLIENT_REVISION)
+AC_SUBST(LIBSILCCLIENT_AGE)
+
+#
 # Program checking
+#
 AC_PROG_INSTALL
 AC_PROG_RANLIB
 AC_PROG_MAKE_SET
+AC_DISABLE_SHARED
 AC_PROG_LIBTOOL
 AC_PATH_PROG(sedpath, sed)
 
 # Header checking
+#
 AC_HEADER_STDC
 AC_HEADER_TIME
 AC_HEADER_STAT
 
 # More header checking
+#
 AC_CHECK_HEADERS(unistd.h string.h getopt.h errno.h fcntl.h assert.h)
 AC_CHECK_HEADERS(sys/types.h sys/stat.h sys/time.h stddef.h)
 AC_CHECK_HEADERS(netinet/in.h netinet/tcp.h xti.h netdb.h)
@@ -76,6 +127,7 @@ AC_CHECK_HEADERS(ncurses.h signal.h ctype.h utime.h)
 AC_CHECK_HEADERS(arpa/inet.h sys/mman.h limits.h termios.h locale.h langinfo.h)
 
 # Data type checking
+#
 AC_TYPE_SIGNAL
 AC_TYPE_SIZE_T
 AC_TYPE_MODE_T
@@ -83,65 +135,69 @@ AC_TYPE_UID_T
 AC_TYPE_PID_T
 
 AC_CHECK_SIZEOF(long long, 0)
-AC_DEFINE_UNQUOTED(SILC_SIZEOF_LONG_LONG, $ac_cv_sizeof_long_long)
+AC_SUBST(SILC_SIZEOF_LONG_LONG, $ac_cv_sizeof_long_long)
 AC_CHECK_SIZEOF(long, 0)
-AC_DEFINE_UNQUOTED(SILC_SIZEOF_LONG, $ac_cv_sizeof_long)
+AC_SUBST(SILC_SIZEOF_LONG, $ac_cv_sizeof_long)
 AC_CHECK_SIZEOF(int, 0)
-AC_DEFINE_UNQUOTED(SILC_SIZEOF_INT, $ac_cv_sizeof_int)
+AC_SUBST(SILC_SIZEOF_INT, $ac_cv_sizeof_int)
 AC_CHECK_SIZEOF(short, 0)
-AC_DEFINE_UNQUOTED(SILC_SIZEOF_SHORT, $ac_cv_sizeof_short)
+AC_SUBST(SILC_SIZEOF_SHORT, $ac_cv_sizeof_short)
 AC_CHECK_SIZEOF(char, 0)
-AC_DEFINE_UNQUOTED(SILC_SIZEOF_CHAR, $ac_cv_sizeof_char)
+AC_SUBST(SILC_SIZEOF_CHAR, $ac_cv_sizeof_char)
 AC_CHECK_SIZEOF(void *, 0)
-AC_DEFINE_UNQUOTED(SILC_SIZEOF_VOID_P, $ac_cv_sizeof_void_p)
+AC_SUBST(SILC_SIZEOF_VOID_P, $ac_cv_sizeof_void_p)
 
 # Function and library checking
-AC_CHECK_FUNC(gethostbyname, ac_gethostbyname_found=1,ac_gethostbyname_found=0)
-if test x$ac_gethostbyname_found = x0; then
+#
+AC_CHECK_FUNC(gethostbyname, [],
+  [
     AC_CHECK_LIB(nsl, gethostbyname, LIBS="$LIBS -lnsl")
-    AC_CHECK_FUNC(res_gethostbyname, ac_res_ghbn_found=1, ac_res_ghbn_found=0)
-    if test x$ac_res_ghbn_found = x0; then
-        AC_CHECK_LIB(resolv, res_gethostbyname,  LIBS="$LIBS -lresolv")
-    fi
-fi
-AC_CHECK_FUNC(socket, ac_socket_found=1, ac_socket_found=0)
-if test x$ac_socket_found = x0; then
-    AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
-fi
+    AC_CHECK_FUNC(res_gethostbyname, [],
+       AC_CHECK_LIB(resolv, res_gethostbyname, LIBS="$LIBS -lresolv")
+    )
+  ])
+AC_CHECK_FUNC(socket, [],
+  AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
+)
 AC_CHECK_FUNCS(gethostname gethostbyaddr getservbyname getservbyport)
-AC_CHECK_FUNCS(select listen bind shutdown close connect)
-AC_CHECK_FUNCS(fcntl setsockopt time)
-AC_CHECK_FUNCS(chmod stat fstat getenv putenv strerror ctime gettimeofday)
+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)
-AC_CHECK_FUNCS(strchr strstr strcpy strncpy memcpy memset memmove utime)
-AC_CHECK_FUNCS(pthread_create nl_langinfo)
+AC_CHECK_FUNCS(setgroups initgroups nl_langinfo)
+AC_CHECK_FUNCS(strchr strstr strcpy strncpy memcpy memset memmove)
 
 # SIM support checking
 # XXX These needs to be changed as more supported platforms appear.
 # 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,
-    AC_DEFINE(SILC_SIM)
-    sim_support=true
-    LIBS="$LIBS -ldl",
- [AC_CHECK_LIB(c, dlopen,
-    AC_DEFINE(SILC_SIM)
-    sim_support=true
-  ]))
-)
+  [
+    AC_CHECK_LIB(dl, dlopen,
+      [
+        AC_DEFINE(SILC_SIM)
+        sim_support=true
+        LIBS="$LIBS -ldl"
+      ],
+      [
+        AC_CHECK_LIB(c, dlopen,
+          [
+            AC_DEFINE(SILC_SIM)
+            sim_support=true
+          ])
+      ])
+   ])
 
 AM_CONDITIONAL(SILC_SIM, test x$sim_support = xtrue)
 if test x$sim_support = xtrue; then
-  AC_MSG_RESULT(enabled SIM support)
+  AC_MSG_RESULT(Enabled SIM support.)
 else
-  AC_MSG_RESULT(no SIM support found)
+  AC_MSG_RESULT(No SIM support found.)
 fi
 
-
-#
 # lib/contrib conditionals
 #
 AC_CHECK_HEADER(regex.h, have_regex=1, have_regex=0)
@@ -149,180 +205,351 @@ AM_CONDITIONAL(HAVE_REGEX, test x$have_regex = x1)
 AC_CHECK_FUNC(getopt_long, have_getopt_long=1, have_getopt_long=0)
 AM_CONDITIONAL(HAVE_GETOPT_LONG, test x$have_getopt_long = x1)
 
+
+##
+##  Enable/disable checking
+##
+
+# IPv6 support
 #
-# Installation
+AC_MSG_CHECKING(whether to enable IPv6 support)
+AC_ARG_ENABLE(ipv6,
+  [  --enable-ipv6           enable IPv6 support],
+  [
+    case "${enableval}" in
+      yes)
+        want_ipv6=true
+        check_ipv6=false
+       summary_ipv6="yes"
+        AC_DEFINE(HAVE_IPV6)
+        AC_MSG_RESULT(yes)
+        ;;
+      *)
+        want_ipv6=false
+        check_ipv6=false
+       summary_ipv6="no"
+        AC_MSG_RESULT(no)
+        ;;
+    esac
+  ],
+    check_ipv6=true
+  )
+
+if test x$check_ipv6 = xtrue; then
+  summary_ipv6="no"
+  AC_TRY_COMPILE(
+    [
+      #ifdef HAVE_SYS_TYPES_H
+      #include <sys/types.h>
+      #endif
+      #ifdef HAVE_NETINET_TCP_H
+      #include <netinet/tcp.h>
+      #endif
+      #ifdef HAVE_NETDB_H
+      #include <netdb.h>
+      #endif
+      #include <sys/socket.h>
+      #ifdef HAVE_NETINET_IN_H
+      #include <netinet/in.h>
+      #endif
+    ],
+    [
+      struct sockaddr_in6 sin6;
+      int family = AF_INET6;
+    ],
+    [
+      AC_DEFINE(HAVE_IPV6)
+      AC_MSG_RESULT(yes)
+      summary_ipv6="yes"
+    ],
+      AC_MSG_RESULT(no)
+    )
+fi
+
+# Debug checking
 #
+AC_MSG_CHECKING(whether to enable debugging)
+summary_debug="no"
+AC_ARG_ENABLE(debug,
+  [  --enable-debug          enable debugging],
+  [
+    case "${enableval}" in
+      yes)
+        AC_MSG_RESULT(yes)
+        AC_DEFINE(SILC_DEBUG)
+        CFLAGS="-O -g $CFLAGS"
+       summary_debug="yes"
+        ;;
+      *)
+        AC_MSG_RESULT(no)
+        CFLAGS="-O2 -g $CFLAGS"
+        ;;
+    esac
+  ],
+  [
+    CFLAGS="-O2 -g $CFLAGS"
+    AC_MSG_RESULT(no)
+  ])
+
+# Stack trace checking
+#
+AC_MSG_CHECKING(whether to enable stack tracing)
+summary_stacktrace="no"
+AC_ARG_ENABLE(stack-trace,
+  [  --enable-stack-trace    enable memory stack trace],
+  [
+    case "${enableval}" in
+    yes)
+      AC_MSG_RESULT(yes)
+      AC_DEFINE(SILC_STACKTRACE)
+      summary_stacktrace="yes"
+      ;;
+    *)
+      AC_MSG_RESULT(no)
+      ;;
+    esac
+  ],
+    AC_MSG_RESULT(no)
+  )
+
+# Disable all assembler optimizations
+#
+AC_MSG_CHECKING(whether to enable assembler optimizations)
+summary_asm="no"
+AC_ARG_ENABLE(asm,
+  [  --disable-asm           do not use assembler optimizations],
+  [
+    AC_MSG_RESULT(no)
+  ],
+  [
+    AC_MSG_RESULT(yes)
+    summary_asm="yes"
+  ])
+
+
+##
+##  Installation
+##
 
 # Default installation destination
+#
 AC_PREFIX_DEFAULT(/usr/local/silc)
-
 if test "x$prefix" != xNONE; then
-       silc_prefix="$prefix"
+  silc_prefix="$prefix"
 else
-       silc_prefix="$ac_default_prefix"
+  silc_prefix="$ac_default_prefix"
 fi
 
 # etc directory
+#
 if test "x$sysconfdir" != 'x${prefix}/etc'; then
-       ETCDIR="$sysconfdir"
+  ETCDIR="$sysconfdir"
 else
-       ETCDIR="$silc_prefix/etc"
+  ETCDIR="$silc_prefix/etc"
 fi
+
 AC_ARG_WITH(etcdir,
-[  --with-etcdir[=PATH]      Directory for system files [/etc/silc]],
-[ case "$withval" in
-  no)
-    ;;
-  yes)
-    ETCDIR="$withval"
-    ;;
-  *)
-    ETCDIR="$withval"
-    ;;
-  esac ],
-)
+  [[  --with-etcdir=DIR       directory for system files [/etc/silc]]],
+  [
+    case "$withval" in
+      no|yes)
+        ;;
+      *)
+        ETCDIR="$withval"
+        ;;
+    esac
+  ])
 AC_SUBST(ETCDIR)
 AC_DEFINE_UNQUOTED(SILC_ETCDIR, "$ETCDIR")
 
 # help directory
+#
 HELPDIR="$silc_prefix/help"
 AC_ARG_WITH(helpdir,
-[  --with-helpdir[=PATH]     Directory for SILC help files [PREFIX/help]],
-[ case "$withval" in
-  no)
-    ;;
-  yes)
-    HELPDIR="$withval"
-    ;;
-  *)
-    HELPDIR="$withval"
-    ;;
-  esac ],
-)
+  [[  --with-helpdir=DIR      directory for SILC help files [PREFIX/help]]],
+  [
+    case "$withval" in
+      no|yes)
+        ;;
+      *)
+       HELPDIR="$withval"
+       ;;
+    esac
+  ])
 AC_SUBST(HELPDIR)
 AC_DEFINE_UNQUOTED(SILC_HELPDIR, "$HELPDIR")
 
 # doc directory
+#
 DOCDIR="$silc_prefix/doc"
 AC_ARG_WITH(docdir,
-[  --with-docdir[=PATH]      Directory for SILC documentation [PREFIX/doc]],
-[ case "$withval" in
-  no)
-    ;;
-  yes)
-    DOCDIR="$withval"
-    ;;
-  *)
-    DOCDIR="$withval"
-    ;;
-  esac ],
-)
+  [[  --with-docdir=DIR       directory for SILC documentation [PREFIX/doc]]],
+  [
+    case "$withval" in
+      no|yes)
+        ;;
+      *)
+        DOCDIR="$withval"
+        ;;
+    esac
+  ])
 AC_SUBST(DOCDIR)
 AC_DEFINE_UNQUOTED(SILC_DOCDIR, "$DOCDIR")
 
 # SIM modules directory
+#
 MODULESDIR="$silc_prefix/modules"
 AC_ARG_WITH(simdir,
-[  --with-simdir[=PATH]      Directory for SIM modules [PREFIX/modules]],
-[ case "$withval" in
-  no)
-    ;;
-  yes)
-    MODULESDIR="$withval"
-    ;;
-  *)
-    MODULESDIR="$withval"
-    ;;
-  esac ],
-)
+  [[  --with-simdir=DIR       directory for SIM modules [PREFIX/modules]]],
+  [
+    case "$withval" in
+      no|yes)
+        ;;
+      *)
+        MODULESDIR="$withval"
+        ;;
+    esac
+  ])
 AC_SUBST(MODULESDIR)
 AC_DEFINE_UNQUOTED(SILC_MODULESDIR, "$MODULESDIR")
 
 # Logs directory
+#
 LOGSDIR="$silc_prefix/logs"
 AC_ARG_WITH(logsdir,
-[  --with-logsdir[=PATH]     Directory for Server logs [PREFIX/logs]],
-[ case "$withval" in
-  no)
-    ;;
-  yes)
-    LOGSDIR="$withval"
-    ;;
-  *)
-    LOGSDIR="$withval"
-    ;;
-  esac ],
-)
+  [[  --with-logsdir=DIR      directory for SILC Server logs [PREFIX/logs]]],
+  [
+    case "$withval" in
+      no|yes)
+        ;;
+      *)
+        LOGSDIR="$withval"
+        ;;
+    esac
+  ])
 AC_SUBST(LOGSDIR)
 AC_DEFINE_UNQUOTED(SILC_LOGSDIR, "$LOGSDIR")
 
+# silcd config file checking
+#
+summary_silcd_configfile="/etc/silc/silcd.conf"
+AC_ARG_WITH(silcd-config-file,
+  [[  --with-silcd-config-file=FILE  use FILE as default configuration file
+                                 for SILC Server [/etc/silc/silcd.conf]]],
+    AC_DEFINE_UNQUOTED(SILC_SERVER_CONFIG_FILE, "$withval")
+    summary_silcd_configfile="$withval"
+  )
+
+# silcd pid file checking
+#
+if test "x$localstatedir" != 'x${prefix}/var'; then
+  PIDFILE="$localstatedir/silcd.pid"
+else
+  PIDFILE="$silc_prefix/var/silcd.pid"
+fi
+
+AC_ARG_WITH(silcd-pid-file,
+  [[  --with-silcd-pid-file=FILE     use FILE as default pid file for SILC
+                                 Server [/var/run/silcd.pid]]],
+  [
+    case "$withval" in
+      no|yes)
+        ;;
+      *)
+        PIDFILE="$withval"
+        ;;
+    esac
+  ])
+AC_SUBST(PIDFILE)
+
+
+##
+##  With/without checkings
+##
+
 # SOCKS4 support checking
+#
+SAVE_LIBS="$LIBS"
+SAVE_CFLAGS="$CFLAGS"
+SAVE_LDFLAGS="$LDFLAGS"
 AC_MSG_CHECKING(whether to support SOCKS4)
 AC_ARG_WITH(socks4,
-[  --with-socks4[=PATH]      Compile with SOCKS4 support],
-[ case "$withval" in
-  no)
-    AC_MSG_RESULT(no)
-    ;;
-  *)
-    AC_MSG_RESULT(yes)
-    socks=4
-
-    if test -d "$withval/include"; then
-      CFLAGS="$CFLAGS -I$withval/include"
-    else
-      CFLAGS="$CFLAGS -I$withval"
-    fi
-    if test -d "$withval/lib"; then
-      withval="-L$withval/lib -lsocks"
-    else
-      withval="-L$withval -lsocks"
-    fi
-
-    LIBS="$withval $LIBS"
+  [[  --with-socks4[=DIR]     with SOCKS4 support [search in DIR/lib and DIR/include]]],
+  [
+    case "$withval" in
+      no)
+        AC_MSG_RESULT(no)
+        ;;
+      *)
+        AC_MSG_RESULT(yes)
+        socks=4
+    
+        if test -d "$withval/include"; then
+          CFLAGS="$CFLAGS -I$withval/include"
+        fi
+        if test -d "$withval/lib"; then
+          LDFLAGS="$LDFLAGS -L$withval/lib"
+        fi
+    
+        LIBS="-lsocks $LIBS"
+        ;;
+    esac
 
     AC_TRY_LINK([],
-                [ Rconnect(); ],
-                [],
-                [ AC_MSG_ERROR(Could not find SOCKS4 library.)])
-      ;;
-  esac ],
-  AC_MSG_RESULT(no)
-)
+      [
+        Rconnect();
+      ], [],
+      [
+        AC_MSG_ERROR(Could not find SOCKS4 library.)
+        LIBS="$SAVE_LIBS"
+        CFLAGS="$SAVE_CFLAGS"
+        LDFLAGS="$SAVE_LDFLAGS"
+      ])
+  ],
+    AC_MSG_RESULT(no)
+  )
 
 # SOCKS5 support checking
+#
+SAVE_LIBS="$LIBS"
+SAVE_CFLAGS="$CFLAGS"
+SAVE_LDFLAGS="$LDFLAGS"
 AC_MSG_CHECKING(whether to support SOCKS5)
 AC_ARG_WITH(socks5,
-[  --with-socks5[=PATH]      Compile with SOCKS5 support],
-[ case "$withval" in
-  no)
-    AC_MSG_RESULT(no)
-    ;;
-  *)
-    AC_MSG_RESULT(yes)
-    socks=5
-
-    if test -d "$withval/include"; then
-      CFLAGS="$CFLAGS -I$withval/include"
-    else
-      CFLAGS="$CFLAGS -I$withval"
-    fi
-    if test -d "$withval/lib"; then
-      withval="-L$withval/lib -lsocks5"
-    else
-      withval="-L$withval -lsocks5"
-    fi
-
-    LIBS="$withval $LIBS"
+  [[  --with-socks5[=DIR]     with SOCKS5 support [search in DIR/lib and DIR/include]]],
+  [
+    case "$withval" in
+      no)
+        AC_MSG_RESULT(no)
+        ;;
+      *)
+        AC_MSG_RESULT(yes)
+        socks=5
+
+        if test -d "$withval/include"; then
+          CFLAGS="$CFLAGS -I$withval/include"
+        fi
+        if test -d "$withval/lib"; then
+          LDFLAGS="$LDFLAGS -L$withval/lib"
+        fi
+
+        LIBS="-lsocks5 $LIBS"
+        ;;
+    esac
 
     AC_TRY_LINK([],
-                [ SOCKSconnect(); ],
-                [],
-                [ AC_MSG_ERROR(Could not find SOCKS5 library.)])
-      ;;
-  esac ],
-  AC_MSG_RESULT(no)
-)
+      [
+        SOCKSconnect();
+      ], [],
+      [
+        AC_MSG_ERROR(Could not find SOCKS5 library.)
+        LIBS="$SAVE_LIBS"
+        CFLAGS="$SAVE_CFLAGS"
+        LDFLAGS="$SAVE_LDFLAGS"
+      ])
+  ],
+    AC_MSG_RESULT(no)
+  )
 
 if test "x$socks" = "x4"; then
   AC_DEFINE(SOCKS)
@@ -355,269 +582,346 @@ if test "x$socks" = "x5"; then
   AC_DEFINE(Rgethostbyname, SOCKSgethostbyname)
 fi
 
-#
 # MP library checking. First check whether user wants to use GMP and use
 # it if found. If not or not defined then compile the MPI library in the
 # source tree.
 #
-AC_MSG_CHECKING(whether to support GMP)
+mp_gmp=false
+SAVE_LIBS="$LIBS"
+SAVE_CFLAGS="$CFLAGS"
+SAVE_LDFLAGS="$LDFLAGS"
+AC_MSG_CHECKING(whether to search for GMP)
 AC_ARG_WITH(gmp,
-[  --with-gmp[=PATH]         Compile with GMP support instead of MPI],
-[ case "$withval" in
-  no)
-    AC_MSG_RESULT(no)
-    mp_gmp=false
-    ;;
-  *)
-    AC_MSG_RESULT(yes)
+  [[  --with-gmp[=DIR]        use GMP instead of MPI [search in DIR/lib and DIR/include]]],
+  [
+    case "$withval" in
+      no)
+        AC_MSG_RESULT(no)
+        ;;
+      *)
+        AC_MSG_RESULT(yes)
+    
+        if test -d "$withval/include"; then
+          CFLAGS="$CFLAGS -I$withval/include"
+        fi
+        if test -d "$withval/lib"; then
+          LDFLAGS="$LDFLAGS -L$withval/lib"
+        fi
+    
+        LIBS="-lgmp $LIBS"
+        ;;
+    esac
 
-    if test -d "$withval/include"; then
-      CFLAGS="$CFLAGS -I$withval/include"
-    else
-      CFLAGS="$CFLAGS -I$withval"
-    fi
-    if test -d "$withval/lib"; then
-      withval="-L$withval/lib -lgmp"
-    else
-      withval="-L$withval -lgmp"
-    fi
-
-    LIBS="$withval $LIBS"
-    mp_gmp=false
     AC_CHECK_LIB(gmp, __gmpz_init,
-      mp_gmp=true
-      AC_DEFINE(SILC_MP_GMP)
-      AC_MSG_RESULT(Using GMP as MP library)
-    )
-      ;;
-  esac ],
-  AC_MSG_RESULT(no)
-  mp_gmp=false
-)
+      [
+        mp_gmp=true
+        AC_DEFINE(SILC_MP_GMP)
+        AC_MSG_RESULT(Using GMP as a MP library.)
+      ],
+      [
+        LIBS="$SAVE_LIBS"
+        CFLAGS="$SAVE_CFLAGS"
+        LDFLAGS="$SAVE_LDFLAGS"
+      ])
+  ],
+    AC_MSG_RESULT(no)
+  )
 
 AM_CONDITIONAL(SILC_MP_GMP, test x$mp_gmp = xtrue)
 AM_CONDITIONAL(SILC_MP_NSS_MPI, test x$mp_gmp = xfalse)
 if test x$mp_gmp = xfalse; then
   AC_DEFINE(SILC_MP_NSS_MPI)
-  AC_MSG_RESULT(Using NSS MPI as MP library)
-fi
-
-AC_ARG_WITH(silcd-config-file,
-[  --with-silcd-config-file[=PATH]
-                          Use PATH as default configuration file in SILC
-                          server [/etc/silc/silcd.conf]],
-[ AC_DEFINE_UNQUOTED(SILC_SERVER_CONFIG_FILE, "$withval") ])
-
-if test "x$localstatedir" != 'x${prefix}/var'; then
-       PIDFILE="$localstatedir/silcd.pid"
-else
-       PIDFILE="$silc_prefix/var/silcd.pid"
+  AC_MSG_RESULT(Using NSS MPI as a MP library.)
 fi
-AC_ARG_WITH(silcd-pid-file,
-[  --with-silcd-pid-file[=PATH]
-                          Use PATH as default pid file in SILC
-                          server [/var/run/silcd.pid]],
-[ case "$withval" in
-       no)
-               ;;
-       yes)
-               PIDFILE="$withval"
-               ;;
-       *)
-               PIDFILE="$withval"
-               ;;
-       esac ],
-)
-AC_SUBST(PIDFILE)
-
-#
-# Native WIN32 compilation under cygwin
-#
-AC_ARG_WITH(win32,
-[  --with-win32            Compile native WIN32 code (-mno-cygwin)],
-[ AC_DEFINE(SILC_WIN32)
-  win32_support=true
-  CFLAGS="-mno-cygwin $CFLAGS"
-  LIBS="$LIBS -lwsock32" ])
-
-AM_CONDITIONAL(SILC_WIN32, test x$win32_support = xtrue)
-
-#
-# Native EPOC support (disabled by default)
-#
-AM_CONDITIONAL(SILC_EPOC, test xfalse = xtrue)
 
+# iconv support
 #
-# Native BeOS support (disabled by default)
-#
-AM_CONDITIONAL(SILC_BEOS, test xfalse = xtrue)
-
-#
-# Native OS2 support (disabled by default)
-#
-AM_CONDITIONAL(SILC_OS2, test xfalse = xtrue)
-
-#
-# --without-irssi
-#
-without_irssi=false
-AC_ARG_WITH(irssi,
-[  --without-irssi         Compile without Irssi SILC Client],
-[ without_irssi=true
-  SILC_DIST_SUBDIRS=`echo $SILC_DIST_SUBDIRS | $sedpath -e 's/irssi//'`
-])
-
-#
-# --without-silcd
-#
-without_silcd=false
-AC_ARG_WITH(silcd,
-[  --without-silcd         Compile without SILC Server],
-[ without_silcd=true
-  SILC_DIST_SUBDIRS=`echo $SILC_DIST_SUBDIRS | $sedpath -e 's/silcd//'`
-])
-
-#
-# IPv6 support
-#
-AC_MSG_CHECKING(for IPv6 support)
-AC_ARG_ENABLE(ipv6,
-[  --enable-ipv6           Enable IPv6 support],
-[ case "${enableval}" in
-  yes)
-    want_ipv6=true
-    check_ipv6=false
-    AC_DEFINE(HAVE_IPV6)
-    AC_MSG_RESULT(yes)
-    ;;
-  *)
-    want_ipv6=false
-    check_ipv6=false
+check_iconv=true
+has_iconv=false
+SAVE_LIBS="$LIBS"
+SAVE_CFLAGS="$CFLAGS"
+SAVE_LDFLAGS="$LDFLAGS"
+SAVE_CPPFLAGS="$CPPFLAGS"
+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]]],
+  [
+    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)
+        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_MSG_RESULT(no)
-    ;;
-esac ], check_ipv6=true)
-
-if test x$check_ipv6 = xtrue; then
-  AC_TRY_COMPILE([#ifdef HAVE_NETINET_TCP_H
-                 #include <netinet/tcp.h>
-                 #endif
-                 #ifdef HAVE_NETDB_H
-                 #include <netdb.h>
-                 #endif
-                 #include <sys/socket.h>
-                 #ifdef HAVE_NETDB_IN_H
-                 #include <netinet/in.h>
-                 #endif],
-                 [struct sockaddr_in6 sin6;
-                  int family = AF_INET6;
-                 ], [AC_DEFINE(HAVE_IPV6)
-                     AC_MSG_RESULT(yes)], [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...)
+
+  # 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=false
+        ],
+        [
+          echo "no"
+          LIBS="$SAVE_LIBS"
+          CFLAGS="$SAVE_CFLAGS"
+          LDFLAGS="$SAVE_LDFLAGS"
+          CPPFLAGS="$SAVE_CPPFLAGS"
+        ])
+     ])
 fi
 
-#
-# Debug checking
-#
-AC_MSG_CHECKING(for enabled debugging)
-AC_ARG_ENABLE(debug,
-[  --enable-debug          Enable debugging],
-[ case "${enableval}" in
-  yes)
-    AC_MSG_RESULT(yes)
-    AC_DEFINE(SILC_DEBUG)
-    CFLAGS="-O -g $CFLAGS"
-    ;;
-  *)
-    AC_MSG_RESULT(no)
-    CFLAGS="-O2 -g $CFLAGS"
-    ;;
-esac ], CFLAGS="-O2 -g $CFLAGS"
-        AC_MSG_RESULT(no))
+if test x$check_iconv = xtrue; then
+  # search for iconv library..
+  SAVE_LIBS="$LIBS"
+  SAVE_CFLAGS="$CFLAGS"
+  SAVE_LDFLAGS="$LDFLAGS"
+  SAVE_CPPFLAGS="$CPPFLAGS"
+    
+  for dir in `echo "/usr/local /usr/pkg /usr/contrib"`; do
+    if test x$has_iconv = xfalse; then
+      AC_MSG_RESULT(searching in $dir...)
+     
+      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.])
+            ],
+            [
+              echo "no"
+              has_iconv=false
+              LIBS="$SAVE_LIBS"    
+              CFLAGS="$SAVE_CFLAGS"
+              LDFLAGS="$SAVE_LDFLAGS"
+              CPPFLAGS="$SAVE_CPPFLAGS"
+            ])
+         ],
+         [
+           CFLAGS="$SAVE_CFLAGS"
+           LDFLAGS="$SAVE_LDFLAGS"
+           CPPFLAGS="$SAVE_CPPFLAGS"
+         ])
+      fi
+    done
+fi
 
-AC_MSG_CHECKING(for enabled stack tracing)
-AC_ARG_ENABLE(stack-trace,
-[  --enable-stack-trace    Enable memory stack trace],
-[ case "${enableval}" in
-  yes)
-    AC_MSG_RESULT(yes)
-    AC_DEFINE(SILC_STACKTRACE)
-    ;;
-  *)
-    AC_MSG_RESULT(no)
-    ;;
-esac ], AC_MSG_RESULT(no))
+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).
+  #
+  AC_CACHE_CHECK([whether this iconv is good enough], ac_iconv_good,
+    AC_TRY_RUN(
+      [
+        #include <iconv.h>
+        int main() {
+          iconv_t cd;
+        changequote(, )dnl
+          char buf[4];
+        changequote([, ])dnl
+          char *ob;
+          size_t obl;
+          ob = buf, obl = sizeof(buf);
+          return ((cd = iconv_open("UTF-8", "UTF-8")) != (iconv_t)(-1) &&
+                 (iconv(cd, 0, 0, &ob, &obl) ||
+                 !(ob == buf && obl == sizeof(buf)) ||
+                 iconv_close(cd)));
+        }
+      ],
+      [
+        ac_iconv_good=yes
+      ],
+      [
+        ac_iconv_good=no
+      ],
+      [
+        ac_iconv_good=yes
+      ])
+    )
 
-#
-# Disable all assembler optimizations
-#
-AC_ARG_ENABLE(asm,
-[  --disable-asm           Do not use assembler optimizations ],
-[])
+  if test x$ac_iconv_good = xno; then
+    AC_MSG_RESULT(Try using libiconv instead.)
+  fi
+fi
 
+# POSIX threads support
 #
-# Threads support
-#
-AC_ARG_ENABLE(threads,
-[  --disable-threads       Do not compile with multi-thread support],
-[ case "${enableval}" in
-  yes)
-    want_threads=true
-    check_threads=true
-    ;;
-  *)
-    want_threads=false
-    check_threads=false
-    ;;
-esac ])
+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
-want_threads=false
-AC_CHECK_HEADERS(pthread.h,
-       [ AC_DEFINE(SILC_HAVE_PTHREAD)
-          want_threads=true ],
-       [ if test -f /usr/pkg/include/pthread.h ; then
-           AC_DEFINE(SILC_HAVE_PTHREAD)
-           AC_MSG_RESULT(Found pthread.h in /usr/pkg/include/)
-           CFLAGS="$CFLAGS -I/usr/pkg/include"
-            want_threads=true
-          elif test -f /usr/contrib/include/pthread.h ; then
-           AC_DEFINE(SILC_HAVE_PTHREAD)
-           AC_MSG_RESULT(Found pthread.h in /usr/contrib/include/)
-           CFLAGS="$CFLAGS -I/usr/contrib/include"
-            want_threads=true
+  SAVE_LIBS="$LIBS"
+  SAVE_CFLAGS="$CFLAGS"
+  SAVE_LDFLAGS="$LDFLAGS"
+  SAVE_CPPFLAGS="$CPPFLAGS"
+  
+  AC_MSG_RESULT(yes)
+  AC_CHECK_HEADERS(pthread.h,
+    [
+      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, LIBS="$SAVE_LIBS")
+              ;;
+            *)
+              LIBS="$SAVE_LIBS"
+              ;;
+          esac
+        ])
+    ],
+    [
+      # search for pthread library..
+      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...)
+  
+          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
-       ])
-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=""
-  )))
+          # 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
+
+                  LIBS="$SAVE_LIBS"
+                  CFLAGS="$SAVE_CFLAGS"
+                  LDFLAGS="$SAVE_LDFLAGS"
+                  CPPFLAGS="$SAVE_CPPFLAGS"
+                ])
+            ],
+            [
+              CFLAGS="$SAVE_CFLAGS"
+              LDFLAGS="$SAVE_LDFLAGS"
+              CPPFLAGS="$SAVE_CPPFLAGS"
+            ])
+        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"
-  case $host in
-    *-aix*)
+
+  # XXX possibly incomplete
+  case "${target}" in
+    *-*-aix*)
       CFLAGS="$CFLAGS -D_THREAD_SAFE"
       if test x"$GCC" = xyes; then
         CFLAGS="$CFLAGS -mthreads"
       fi
       ;;
-    *-freebsd2.2*)
+    *-*-freebsd*)
       CFLAGS="$CFLAGS -D_THREAD_SAFE"
       ;;
-    *-sysv5uw7*)  # UnixWare 7
+    *-*-sysv5uw7*)  # UnixWare 7
       if test "$GCC" != "yes"; then
         CFLAGS="$CFLAGS -Kthread"
       else
@@ -627,91 +931,106 @@ if test x$want_threads = xtrue; then
     *-dg-dgux*)  # DG/UX
       CFLAGS="$CFLAGS -D_POSIX4A_DRAFT10_SOURCE"
       ;;
-    esac
+   esac
 
-  LIBS="$TMP_LIBS $LIBS"
+  AC_CHECK_FUNC(pthread_create)
+  AC_DEFINE(SILC_HAVE_PTHREAD)
+  AC_DEFINE(SILC_THREADS)
 fi
 
-
+# Native WIN32 compilation under cygwin
 #
-# iconv support
+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)
+
+# Native EPOC support (disabled by default)
 #
-AC_ARG_WITH(iconv,
-[  --with-iconv[=PATH]       Search for libiconv in DIR/include and DIR/lib],
-[      for dir in `echo "$withval" | tr : ' '`; do
-               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
-       done
-])
-
-AC_CHECK_HEADER(iconv.h,
-       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_iconv_found=0)]
-       )], [ac_iconv_h_found=0]
-)
+AM_CONDITIONAL(SILC_EPOC, test xfalse = xtrue)
 
-#if test x$ac_iconv_found = x0 -o x$ac_iconv_h_found = x0; then
-#      AC_MSG_ERROR([Unable to find an iconv support. See INSTALL for help.])
-#fi
-
-if test x$ac_iconv_found = x1; 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).
-AC_CACHE_CHECK([whether this iconv is good enough], ac_iconv_good,
-        AC_TRY_RUN([
-#include <iconv.h>
-int main()
-{
-  iconv_t cd;
-changequote(, )dnl
-  char buf[4];
-changequote([, ])dnl
-  char *ob;
-  size_t obl;
-  ob = buf, obl = sizeof(buf);
-  return ((cd = iconv_open("UTF-8", "UTF-8")) != (iconv_t)(-1) &&
-          (iconv(cd, 0, 0, &ob, &obl) ||
-           !(ob == buf && obl == sizeof(buf)) ||
-           iconv_close(cd)));
-}
-                ],
-                ac_iconv_good=yes,
-                ac_iconv_good=no,
-                ac_iconv_good=yes)
-)
-if test x$ac_iconv_good = xno; then
-  AC_MSG_ERROR(Try using libiconv instead.)
-fi
+# Native BeOS support (disabled by default)
+#
+AM_CONDITIONAL(SILC_BEOS, test xfalse = xtrue)
 
-fi # iconv
+# Native OS2 support (disabled by default)
+#
+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)
+  ])
+
+libtoolfix=true
+AC_MSG_CHECKING(whether to do libtoolfix)
+AC_ARG_WITH(libtoolfix,
+  [  --without-libtoolfix     Do not fix libtool, for package builders],
+  [
+    AC_MSG_RESULT(no)
+    libtoolfix=false
+  ],
+  [
+    AC_MSG_RESULT(yes)
+  ])
+
+AC_SUBST(ETCDIR)
+AC_DEFINE_UNQUOTED(SILC_ETCDIR, "$ETCDIR")
+
+
+
+##
+##  Misc
+##
+
 # Other configure scripts
 #
 if test x$without_irssi = xfalse; then
   if test "x$silc_dist" = "xsilc-client" ||
      test "x$silc_dist" = "xsilc-toolkit"; then
-  AC_CONFIG_SUBDIRS(irssi)
+    AC_CONFIG_SUBDIRS(irssi)
   fi
 fi
 
-AC_CONFIG_SUBDIRS(lib/silcmath/mpi)
+if test x$mp_gmp = xfalse; then
+  AC_CONFIG_SUBDIRS(lib/silcmath/mpi)
+fi
+
 #AC_CONFIG_SUBDIRS(lib/zlib)
 
 SILC_TOP_SRCDIR=`pwd`
@@ -723,6 +1042,17 @@ INCLUDE_DEFINES_INT="include \$(top_srcdir)/Makefile.defines_int"
 AC_SUBST(INCLUDE_DEFINES_INT)
 AC_SUBST(SILC_DIST_SUBDIRS)
 
+#
+# Fix the libtool to support run-time configuration.  This allows us
+# to in run-time specify when to compile shared/static libraries without
+# need to reconfigure the entire libtool.
+#
+if test x$libtoolfix = xtrue; then
+  ./libtoolfix $SILC_TOP_SRCDIR/ltmain.sh
+fi
+AM_CONDITIONAL(SILC_LIBTOOLFIX, test x$libtoolfix = xtrue)
+
+
 #
 # Makefile outputs
 #
@@ -735,7 +1065,9 @@ includes/Makefile
 lib/Makefile
 lib/contrib/Makefile
 lib/silccore/Makefile
+lib/silccore/tests/Makefile
 lib/silccrypt/Makefile
+lib/silccrypt/tests/Makefile
 lib/silcmath/Makefile
 lib/silcmath/mpi/Makefile.defines
 lib/silcmath/mpi/Makefile.defines_int
@@ -750,39 +1082,118 @@ lib/silcutil/epoc/Makefile
 lib/silcsftp/Makefile
 lib/silcsftp/tests/Makefile
 doc/example_silcd.conf
+includes/silcincludes.h
 )
 
 if test "x$silc_dist" = "xsilc-client" ||
    test "x$silc_dist" = "xsilc-toolkit"; then
-AC_CONFIG_FILES(lib/silcclient/Makefile)
+  AC_CONFIG_FILES(lib/silcclient/Makefile)
 fi
 
 if test x$without_irssi = xfalse ; then
-if test "x$silc_dist" = "xsilc-client" ||
-   test "x$silc_dist" = "xsilc-toolkit"; then
-AC_CONFIG_FILES(
+  if test "x$silc_dist" = "xsilc-client" ||
+     test "x$silc_dist" = "xsilc-toolkit"; then
+    AC_CONFIG_FILES(
 irssi/Makefile.defines
 irssi/Makefile.defines_int
 )
-fi
+  fi
 fi
 
 if test x$without_silcd = xfalse ; then
-if test "x$silc_dist" = "xsilc-server" ||
-   test "x$silc_dist" = "xsilc-toolkit"; then
-AC_CONFIG_FILES(
+  if test "x$silc_dist" = "xsilc-server" ||
+     test "x$silc_dist" = "xsilc-toolkit"; then
+    AC_CONFIG_FILES(
 silcd/Makefile
 )
-fi
+  fi
 fi
 
 if test "x$silc_dist" = "xsilc-toolkit"; then
-AC_CONFIG_FILES(
+  AC_CONFIG_FILES(
 silc/Makefile
 win32/Makefile
 win32/libsilc/Makefile
 win32/libsilcclient/Makefile
+tutorial/Makefile
+tutorial/Makefile.defines
+tutorial/Makefile.defines_int
 )
 fi
 
 AC_OUTPUT
+
+s_bindir=`eval echo $bindir`;s_bindir=`eval echo $s_bindir`
+s_sbindir=`eval echo $sbindir`;s_sbindir=`eval echo $s_sbindir`
+s_mandir=`eval echo $mandir`;s_mandir=`eval echo $s_mandir`
+s_includedir=`eval echo $includedir`;s_includedir=`eval echo $s_includedir`
+
+echo ""
+echo "SILC Configuration Summary:"
+echo "---------------------------"
+echo " Target host ...................: $target"
+echo " Compiler ......................: $CC"
+echo " CFLAGS ........................: $CFLAGS"
+echo " CPPFLAGS ......................: $CPPFLAGS"
+echo " LDFLAGS .......................: $LDFLAGS"
+echo " LIBS ..........................: $LIBS"
+echo ""
+echo " Installation prefix ...........: $prefix"
+echo " bin directory .................: $s_bindir"
+echo " sbin directory ................: $s_sbindir"
+echo " man directory .................: $s_mandir"
+echo " help directory ................: $HELPDIR"
+echo " doc directory .................: $DOCDIR"
+echo " logs directory ................: $LOGSDIR"
+echo " SIM directory .................: $MODULESDIR"
+echo " include directory .............: $s_includedir"
+echo ""
+
+if test "x$silc_dist" = "xsilc-client" ||
+   test "x$silc_dist" = "xsilc-toolkit"; then
+  irssi="yes"
+  if test x$without_irssi = xtrue; then
+    irssi="no"
+  fi
+echo " Compile SILC Client ...........: $irssi"
+fi
+
+if test "x$silc_dist" = "xsilc-server" ||
+   test "x$silc_dist" = "xsilc-toolkit"; then
+  silcd="yes"
+  if test x$without_silcd = xtrue; then
+    silcd="no"
+  fi
+echo " Compile SILC Server ...........: $silcd"
+echo " Server configuration file .....: $summary_silcd_configfile"
+echo " Server PID file ...............: $PIDFILE"
+fi
+
+if test x$sim_support = xfalse; then
+  sim_support="no"
+else
+  sim_support="yes"
+fi
+echo " SIM support ...................: $sim_support"
+echo " IPv6 support ..................: $summary_ipv6"
+echo " Assembler optimizations .......: $summary_asm"
+
+mp="MPI"
+if test x$mp_gmp = xtrue; then
+  mp="GMP"
+fi
+echo " Arithmetic library ............: $mp"
+
+threads="no"
+if test x$has_threads = xtrue; then
+  threads="yes"
+fi
+echo " Multi-threads support .........: $threads"
+echo " Debugging enabled .............: $summary_debug"
+echo " Stack-trace enabled ...........: $summary_stacktrace"
+echo ""
+if test "x$silc_dist" = "xsilc-client"; then
+  echo "Compile the sources with 'make' or 'gmake' command (GNU make is required)."
+else
+  echo "Compile the sources with 'make' or 'gmake' command."
+fi