New. Taken from gnupg 1.9.
[gnupg.git] / configure.ac
index c816ab7..8203edd 100644 (file)
@@ -1,5 +1,6 @@
 dnl Configure.ac script for GnuPG
-dnl Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+dnl Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
+dnl               2004 Free Software Foundation, Inc.
 dnl
 dnl This file is part of GnuPG.
 dnl
@@ -20,47 +21,31 @@ dnl
 dnl (Process this file with autoconf to produce a configure script.)
 dnlAC_REVISION($Revision$)dnl
 
-AC_PREREQ(2.52)
+AC_PREREQ(2.59)
+min_automake_version="1.7.9"
 
-# Please enter the version number here and set development_version to
-# yes if the minor number is odd or you feel that the default check 
-# for a development version is not sufficient.
-AC_INIT(gnupg, 1.1.90, bug-gnupg@gnu.org)
+# Remember to change the version number immediately *after* a release
+# and remove the "-cvs" or "rc" suffix immediately *before* a release.
+AC_INIT(gnupg, 1.3.91-cvs, bug-gnupg@gnu.org)
+# Set development_version to yes if the minor number is odd or you
+# feel that the default check for a development version is not
+# sufficient.
 development_version=yes
 
-ALL_LINGUAS="cs da de eo el es et fr gl id it ja nl pl pt_BR pt sv tr"
-static_modules="sha1 md5 rmd160"
-static_random_module=""
-
-PACKAGE=$PACKAGE_NAME
-VERSION=$PACKAGE_VERSION
-
 AC_CONFIG_AUX_DIR(scripts)
 AC_CONFIG_SRCDIR(g10/g10.c)
-AC_CANONICAL_TARGET()
-AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
+AC_CANONICAL_TARGET
+AM_INIT_AUTOMAKE
 AM_CONFIG_HEADER(config.h)
 
-AC_SUBST(PACKAGE)
-AC_SUBST(VERSION)
-AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
-AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
-AC_DEFINE(_GNU_SOURCE,1,[Some tests rely on this (stpcpy) and it should be used for new programs anyway])
-
-AC_PROG_AWK
-
-MODULES_IN_CIPHER=`$AWK '/^EXTRA_PROGRAMS/ { for(i=3;i<=NF;i++) print $i}' \
-                                              $srcdir/cipher/Makefile.am`
+AC_GNU_SOURCE
 
 dnl
 dnl  Check for random module options
 dnl
-dnl  Fixme: get the list of available modules from MODULES_IN_CIPHER
-dnl         and check against this list
-
-AC_MSG_CHECKING([which static random module to use])
+AC_MSG_CHECKING([which random module to use])
 AC_ARG_ENABLE(static-rnd,
-    [  --enable-static-rnd=[egd|unix|linux|none]  ],
+    [  --enable-static-rnd=[egd|unix|linux|auto]  ],
 [use_static_rnd=$enableval], [use_static_rnd=default] )
 
 if test "$use_static_rnd" = no; then
@@ -68,9 +53,12 @@ if test "$use_static_rnd" = no; then
 fi
 
 case "$use_static_rnd" in
-    egd | linux | unix | none | default )
+    egd | linux | unix | default )
       AC_MSG_RESULT($use_static_rnd)
       ;;
+    auto )
+      AC_MSG_RESULT(automagically selected at runtime)
+      ;;
     * )
       AC_MSG_RESULT(invalid argument)
       AC_MSG_ERROR(there is no random module rnd$use_static_rnd)
@@ -78,7 +66,7 @@ case "$use_static_rnd" in
 esac
 
 AC_ARG_WITH(egd-socket,
-    [  --with-egd-socket=NAME  Use NAME for the EGD socket)],
+    [  --with-egd-socket=NAME  use NAME for the EGD socket],
             egd_socket_name="$withval", egd_socket_name="" )
 AC_DEFINE_UNQUOTED(EGD_SOCKET_NAME, "$egd_socket_name",
                    [Define if you don't want the default EGD socket name.
@@ -99,12 +87,6 @@ dnl
 dnl  Check other options
 dnl
 
-AC_MSG_CHECKING([whether use of extensions is requested])
-AC_ARG_ENABLE(dynload,
-[  --disable-dynload       disable use of extensions],
-    try_dynload=$enableval, try_dynload=yes)
-AC_MSG_RESULT($try_dynload)
-
 AC_MSG_CHECKING([whether assembler modules are requested])
 AC_ARG_ENABLE(asm,
 [  --disable-asm           do not use assembler modules],
@@ -120,46 +102,267 @@ if test "$use_m_guard" = yes ; then
     AC_DEFINE(M_GUARD,1,[Define to use the (obsolete) malloc guarding feature])
 fi
 
+AC_MSG_CHECKING([whether SELinux support is requested])
+AC_ARG_ENABLE(selinux-support,
+              AC_HELP_STRING([--enable-selinux-support],
+                             [enable SELinux support]),
+              selinux_support=$enableval, selinux_support=no)
+AC_MSG_RESULT($selinux_support)
+
+AC_MSG_CHECKING([whether OpenPGP card support is requested])
+AC_ARG_ENABLE(card-support,
+              AC_HELP_STRING([--disable-card-support],
+                             [disable OpenPGP card support]),
+              card_support=$enableval, card_support=yes)
+AC_MSG_RESULT($card_support)
+
+AC_MSG_CHECKING([whether readline support is requested])
+AC_ARG_WITH(readline,
+              AC_HELP_STRING([--without-readline],
+                             [do not support fancy command line editing]),
+              [readline_support="$withval"], [readline_support=yes])  
+case "$readline_support" in yes);; no);; *)readline_support=yes;; esac
+AC_MSG_RESULT($readline_support)
+
+
+dnl See if we are disabling any algorithms or features for a smaller
+dnl binary
+
+try_extensions=no
+
+use_rsa=yes
+use_idea=yes
+use_cast5=yes
+use_blowfish=yes
+use_aes=yes
+use_twofish=yes
+use_sha256=yes
+use_sha512=yes
+use_bzip2=yes
+use_exec=yes
+
+AC_ARG_ENABLE(minimal,
+   AC_HELP_STRING([--enable-minimal],[build the smallest gpg binary possible]),
+   use_rsa=no
+   use_idea=no
+   use_cast5=no
+   use_blowfish=no
+   use_aes=no
+   use_twofish=no
+   use_sha256=no
+   use_sha512=no
+   use_bzip2=no
+   use_exec=no)
+
+AC_MSG_CHECKING([whether to enable the RSA public key algorithm])
+AC_ARG_ENABLE(rsa,
+   AC_HELP_STRING([--disable-rsa],[disable the RSA public key algorithm]),
+   use_rsa=$enableval)
+AC_MSG_RESULT($use_rsa)
+if test x"$use_rsa" = xyes ; then
+   AC_DEFINE(USE_RSA,1,[Define to include the RSA public key algorithm])
+fi
+
+AC_MSG_CHECKING([whether to enable the IDEA cipher])
+AC_ARG_ENABLE(idea,
+   AC_HELP_STRING([--disable-idea],[disable the IDEA cipher]),
+   use_idea=$enableval)
+AC_MSG_RESULT($use_idea)
+if test x"$use_idea" = xyes ; then
+   AC_DEFINE(USE_IDEA,1,[Define to include the IDEA cipher])
+
+# We don't need idea but some people claim that they need it for
+# research etc., so we allow to place an idea source code into the
+# cipher directory and statically link it if available, otherwise we
+# link to a stub.  We don't use AC_CHECK_FILE to avoid caching.
+
+   AC_MSG_CHECKING([for idea cipher module])
+   tmp=""
+   if test -f $srcdir/cipher/idea.c; then 
+      IDEA_O=idea.o
+      tmp=idea
+   else
+      IDEA_O=idea-stub.o
+      tmp=no
+      try_extensions=yes
+   fi
+   AC_SUBST(IDEA_O)
+   AC_MSG_RESULT($tmp)
+fi
+
+AC_MSG_CHECKING([whether to enable the CAST5 cipher])
+AC_ARG_ENABLE(cast5,
+   AC_HELP_STRING([--disable-cast5],[disable the CAST5 cipher]),
+   use_cast5=$enableval)
+AC_MSG_RESULT($use_cast5)
+if test x"$use_cast5" = xyes ; then
+   AC_DEFINE(USE_CAST5,1,[Define to include the CAST5 cipher])
+fi
+
+AC_MSG_CHECKING([whether to enable the BLOWFISH cipher])
+AC_ARG_ENABLE(blowfish,
+   AC_HELP_STRING([--disable-blowfish],[disable the BLOWFISH cipher]),
+   use_blowfish=$enableval)
+AC_MSG_RESULT($use_blowfish)
+if test x"$use_blowfish" = xyes ; then
+   AC_DEFINE(USE_BLOWFISH,1,[Define to include the BLOWFISH cipher])
+fi
+
+AC_MSG_CHECKING([whether to enable the AES ciphers])
+AC_ARG_ENABLE(aes,
+   AC_HELP_STRING([--disable-aes],[disable the AES, AES192, and AES256 ciphers]),
+   use_aes=$enableval)
+AC_MSG_RESULT($use_aes)
+if test x"$use_aes" = xyes ; then
+   AC_DEFINE(USE_AES,1,[Define to include the AES, AES192, and AES256 ciphers])
+fi
+
+AC_MSG_CHECKING([whether to enable the TWOFISH cipher])
+AC_ARG_ENABLE(twofish,
+   AC_HELP_STRING([--disable-twofish],[disable the TWOFISH cipher]),
+   use_twofish=$enableval)
+AC_MSG_RESULT($use_twofish)
+if test x"$use_twofish" = xyes ; then
+   AC_DEFINE(USE_TWOFISH,1,[Define to include the TWOFISH cipher])
+fi
+
+AC_MSG_CHECKING([whether to enable the SHA-256 digest])
+AC_ARG_ENABLE(sha256,
+   AC_HELP_STRING([--disable-sha256],[disable the SHA-256 digest]),
+   use_sha256=$enableval)
+AC_MSG_RESULT($use_sha256)
+if test x"$use_sha256" = xyes ; then
+   AC_DEFINE(USE_SHA256,1,[Define to include the SHA-256 digest])
+fi
+
+dnl SHA512 is defined only after we confirm 64-bit support later
+AC_MSG_CHECKING([whether to enable the SHA-384 and SHA-512 digests])
+AC_ARG_ENABLE(sha512,
+   AC_HELP_STRING([--disable-sha512],[disable the SHA-384 and SHA-512 digests]),
+   use_sha512=$enableval)
+AC_MSG_RESULT($use_sha512)
+
+dnl BZLIB is defined only after we confirm the library is available later
+AC_MSG_CHECKING([whether to enable the BZIP2 compression algorithm])
+AC_ARG_ENABLE(bzip2,
+   AC_HELP_STRING([--disable-bzip2],[disable the BZIP2 compression algorithm]),
+   use_bzip2=$enableval)
+AC_MSG_RESULT($use_bzip2)
+
 AC_MSG_CHECKING([whether to enable external program execution])
 AC_ARG_ENABLE(exec,
-    [  --disable-exec          disable external program execution],
-    use_exec=$enableval, use_exec=yes)
+    AC_HELP_STRING([--disable-exec],[disable all external program execution]),
+    use_exec=$enableval)
 AC_MSG_RESULT($use_exec)
 if test "$use_exec" = no ; then
-    AC_DEFINE(NO_EXEC,1,[Define to disable external program execution])
+    AC_DEFINE(NO_EXEC,1,[Define to disable all external program execution])
 fi
 
 if test "$use_exec" = yes ; then
-  AC_MSG_CHECKING([whether LDAP keyserver support is requested])
-  AC_ARG_ENABLE(ldap,
-  [  --disable-ldap          disable LDAP keyserver interface],
-      try_ldap=$enableval, try_ldap=yes)
-  AC_MSG_RESULT($try_ldap)
-
-  AC_MSG_CHECKING([whether experimental external hkp keyserver support is requested])
-  AC_ARG_ENABLE(external-hkp,
-  [  --enable-external-hkp   enable experimental external HKP keyserver interface],
-      try_hkp=$enableval, try_hkp=no)
-  AC_MSG_RESULT($try_hkp)
-
-  if test "$try_hkp" = yes ; then
-    GPGKEYS_HKP="gpgkeys_hkp"
-    AC_DEFINE(USE_EXTERNAL_HKP,1,[define to use the experimental external HKP keyserver interface])
+  AC_MSG_CHECKING([whether to enable photo ID viewing])
+  AC_ARG_ENABLE(photo-viewers,
+      [  --disable-photo-viewers disable photo ID viewers],
+      [if test "$enableval" = no ; then
+         AC_DEFINE(DISABLE_PHOTO_VIEWER,1,[define to disable photo viewing])
+      fi],enableval=yes)
+  gnupg_cv_enable_photo_viewers=$enableval
+  AC_MSG_RESULT($enableval)
+
+  if test "$gnupg_cv_enable_photo_viewers" = yes ; then
+    AC_MSG_CHECKING([whether to use a fixed photo ID viewer])
+    AC_ARG_WITH(photo-viewer,
+        [  --with-photo-viewer=FIXED_VIEWER  set a fixed photo ID viewer],
+        [if test "$withval" = yes ; then
+           withval=no
+        elif test "$withval" != no ; then
+           AC_DEFINE_UNQUOTED(FIXED_PHOTO_VIEWER,"$withval",
+                           [if set, restrict photo-viewer to this])
+        fi],withval=no)
+    AC_MSG_RESULT($withval)
   fi
 
-  AC_MSG_CHECKING([whether email keyserver support is requested])
-  AC_ARG_ENABLE(mailto,
-  [  --disable-mailto        disable email keyserver interface],
-      try_mailto=$enableval, try_mailto=yes)
-  AC_MSG_RESULT($try_mailto)
-fi
+  AC_MSG_CHECKING([whether to enable external keyserver helpers])
+  AC_ARG_ENABLE(keyserver-helpers,
+      [  --disable-keyserver-helpers  disable all external keyserver support],
+      [if test "$enableval" = no ; then
+         AC_DEFINE(DISABLE_KEYSERVER_HELPERS,1,
+                  [define to disable keyserver helpers])
+      fi],enableval=yes)
+  gnupg_cv_enable_keyserver_helpers=$enableval
+  AC_MSG_RESULT($enableval)
+
+  if test "$gnupg_cv_enable_keyserver_helpers" = yes ; then
+    AC_MSG_CHECKING([whether LDAP keyserver support is requested])
+    AC_ARG_ENABLE(ldap,
+    [  --disable-ldap          disable LDAP keyserver interface],
+        try_ldap=$enableval, try_ldap=yes)
+    AC_MSG_RESULT($try_ldap)
+
+    AC_MSG_CHECKING([whether HKP keyserver support is requested])
+    AC_ARG_ENABLE(hkp,
+    [  --disable-hkp           disable HKP keyserver interface],
+        try_hkp=$enableval, try_hkp=yes)
+    AC_MSG_RESULT($try_hkp)
+
+    AC_MSG_CHECKING([whether HTTP key fetching support is requested])
+    AC_ARG_ENABLE(http,
+      AC_HELP_STRING([--disable-http],[disable HTTP key fetching interface]),
+        try_http=$enableval, try_http=yes)
+    AC_MSG_RESULT($try_http)
+
+    AC_MSG_CHECKING([whether Finger key fetching support is requested])
+    AC_ARG_ENABLE(finger,
+      AC_HELP_STRING([--disable-finger],
+                     [disable Finger key fetching interface]),
+        try_finger=$enableval, try_finger=yes)
+    AC_MSG_RESULT($try_finger)
+
+    AC_MSG_CHECKING([whether email keyserver support is requested])
+    AC_ARG_ENABLE(mailto,
+    [  --disable-mailto        disable email keyserver interface],
+        try_mailto=$enableval, try_mailto=yes)
+    AC_MSG_RESULT($try_mailto)
+    fi
 
-AC_MSG_CHECKING([whether included zlib is requested])
+    AC_MSG_CHECKING([whether keyserver exec-path is enabled])
+    AC_ARG_ENABLE(keyserver-path,
+        [  --disable-keyserver-path disable the exec-path option for keyserver helpers],
+        [if test "$enableval" = no ; then
+        AC_DEFINE(DISABLE_KEYSERVER_PATH,1,[define to disable exec-path for keyserver helpers])
+        fi],enableval=yes)
+    AC_MSG_RESULT($enableval)
+  fi
+
+AC_MSG_CHECKING([whether the included zlib is requested])
 AC_ARG_WITH(included-zlib,
     [  --with-included-zlib    use the zlib code included here],
 [g10_force_zlib=yes], [g10_force_zlib=no] )
 AC_MSG_RESULT($g10_force_zlib)
 
+dnl
+dnl Check for the key/uid cache size.  This can't be zero, but can be
+dnl pretty small on embedded systems.
+dnl
+AC_MSG_CHECKING([for the size of the key and uid cache])
+AC_ARG_ENABLE(key-cache,
+       AC_HELP_STRING([--enable-key-cache=SIZE],[Set key cache to SIZE (default 4096)]),,enableval=4096)
+
+if test "$enableval" = "no"; then
+   enableval=5
+elif test "$enableval" = "yes" || test "$enableval" = ""; then
+   enableval=4096
+fi
+
+changequote(,)dnl
+key_cache_size=`echo "$enableval" | sed 's/[A-Za-z]//g'`
+changequote([,])dnl
+
+if test "$enableval" != "$key_cache_size" || test "$key_cache_size" -lt 5; then
+   AC_MSG_ERROR([invalid key-cache size])
+fi
+
+AC_MSG_RESULT($key_cache_size)
+AC_DEFINE_UNQUOTED(PK_UID_CACHE_SIZE,$key_cache_size,[Size of the key and UID caches])
 
 dnl
 dnl Check whether we want to use Linux capabilities
@@ -176,6 +379,10 @@ AH_BOTTOM([
 #define EXEC_TEMPFILE_ONLY
 #endif
 
+/* This is the major version number of GnuPG so that
+   source included files can test for this. */
+#define GNUPG_MAJOR_VERSION 1
+
 #include "g10defs.h"
 ])
 
@@ -184,21 +391,6 @@ AM_MAINTAINER_MODE
 
 dnl Checks for programs.
 
-dnl
-dnl Setup some stuff depending on host/target.
-dnl
-case "${target}" in
-    *-*-mingw32*)
-        disallowed_modules="rndunix rndlinux rndegd"
-        ;;
-    *-*-cygwin*)
-        disallowed_modules="rndunix rndlinux rndegd tiger"
-        ;;
-    *)
-        disallowed_modules="rndw32"
-       ;;
-esac
-
 AC_PROG_MAKE_SET
 AM_SANITY_CHECK
 missing_dir=`cd $ac_aux_dir && pwd`
@@ -209,10 +401,13 @@ AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
 AC_PROG_CC
 AC_PROG_CPP
+AC_PROG_RANLIB
+AC_CHECK_TOOL(AR, ar, :)
 AC_PATH_PROG(PERL,"perl")
 AC_ISC_POSIX
 AC_SYS_LARGEFILE
 AC_PROG_INSTALL
+AC_PROG_LN_S
 AC_PROG_AWK
 AC_CHECK_PROG(DOCBOOK_TO_MAN, docbook-to-man, yes, no)
 AM_CONDITIONAL(HAVE_DOCBOOK_TO_MAN, test "$ac_cv_prog_DOCBOOK_TO_MAN" = yes)
@@ -223,29 +418,30 @@ MPI_OPT_FLAGS=""
 
 
 try_gettext=yes
+have_dosish_system=no
+need_dlopen=yes
 case "${target}" in
-    *-*-mingw32*|*-*-cygwin*)
+    *-*-mingw32*)
         # special stuff for Windoze NT
         ac_cv_have_dev_random=no
         AC_DEFINE(USE_ONLY_8DOT3,1,
                   [set this to limit filenames to the 8.3 format])
         AC_DEFINE(HAVE_DRIVE_LETTERS,1,
                   [defined if we must run on a stupid file system])
-        AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
-                  [defined if we run on some of the PCDOS like systems 
-                   (DOS, Windoze. OS/2) with special properties like
-                    no file modes])
         AC_DEFINE(USE_SIMPLE_GETTEXT,1,
                   [because the Unix gettext has too much overhead on
                    MingW32 systems and these systems lack Posix functions,
                    we use a simplified version of gettext])
+        have_dosish_system=yes
+        need_dlopen=no
         try_gettext="no"
+       LDAPLIBS="-lwldap32"
         ;;
     i?86-emx-os2 | i?86-*-os2*emx )
         # OS/2 with the EMX environment
         ac_cv_have_dev_random=no
         AC_DEFINE(HAVE_DRIVE_LETTERS)
-        AC_DEFINE(HAVE_DOSISH_SYSTEM)
+        have_dosish_system=yes
         try_gettext="no"
         ;;
 
@@ -253,7 +449,7 @@ case "${target}" in
         # DOS with the DJGPP environment
         ac_cv_have_dev_random=no
         AC_DEFINE(HAVE_DRIVE_LETTERS)
-        AC_DEFINE(HAVE_DOSISH_SYSTEM)
+        have_dosish_system=yes
         try_gettext="no"
         ;;
 
@@ -290,12 +486,28 @@ case "${target}" in
        ;;
 esac
 
+if test "$have_dosish_system" = yes; then
+   AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
+             [defined if we run on some of the PCDOS like systems 
+              (DOS, Windoze. OS/2) with special properties like
+              no file modes])
+fi
+AM_CONDITIONAL(HAVE_DOSISH_SYSTEM, test "$have_dosish_system" = yes)
+
 AC_SUBST(MPI_OPT_FLAGS)
 GNUPG_SYS_SYMBOL_UNDERSCORE
-GNUPG_CHECK_PIC
-GNUPG_CHECK_EXPORTDYNAMIC
-if test "$NO_PIC" = yes; then
-    try_dynload=no
+
+dnl These need to go after AC_PROG_CC so that $EXEEXT is defined
+if test x"$try_hkp" = xyes ; then
+  AC_SUBST(GPGKEYS_HKP,"gpgkeys_hkp$EXEEXT")
+fi
+
+if test x"$try_http" = xyes ; then
+  AC_SUBST(GPGKEYS_HTTP,"gpgkeys_http$EXEEXT")
+fi
+
+if test x"$try_finger" = xyes ; then
+  AC_SUBST(GPGKEYS_FINGER,"gpgkeys_finger$EXEEXT")
 fi
 
 dnl Must check for network library requirements before doing link tests
@@ -308,35 +520,83 @@ AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname,
 AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt,
        [NETLIBS="-lsocket $NETLIBS"]))
 
+dnl Now try for the resolver functions so we can use DNS SRV
+
+AC_ARG_ENABLE(dns-srv,
+   AC_HELP_STRING([--disable-dns-srv],
+       [disable the use of DNS SRV in HKP and HTTP]),
+   use_dns_srv=$enableval,use_dns_srv=yes)
+
+if (test x"$try_hkp" = xyes || test x"$try_http" = xyes) && test x"$use_dns_srv" = xyes ; then
+  _srv_save_libs=$LIBS
+  LIBS=""
+  # the double underscore thing is a glibc-ism?
+  AC_SEARCH_LIBS(res_query,resolv bind,,
+                 AC_SEARCH_LIBS(__res_query,resolv bind,,use_dns_srv=no))
+  AC_SEARCH_LIBS(dn_expand,resolv bind,,
+                 AC_SEARCH_LIBS(__dn_expand,resolv bind,,use_dns_srv=no))
+  AC_SEARCH_LIBS(dn_skipname,resolv bind,,
+                 AC_SEARCH_LIBS(__dn_skipname,resolv bind,,use_dns_srv=no))
+
+  if test x"$use_dns_srv" = xyes ; then
+
+    # Make sure that the BIND 4 resolver interface is workable before
+    # enabling SRVs.  At some point I'll rewrite the code to use the
+    # BIND 8 resolver API.
+
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>],
+[[unsigned char answer[PACKETSZ]; res_query("foo.bar",C_IN,T_A,answer,PACKETSZ);]])],,use_dns_srv=no)
+  fi
+
+  if test x"$use_dns_srv" = xyes ; then
+     AC_DEFINE(USE_DNS_SRV,1,[define to use DNS SRV])
+     SRVLIBS=$LIBS
+  else
+     AC_MSG_NOTICE([Resolver functions not found or not usable.  Disabling DNS SRV.])
+  fi
+  LIBS=$_srv_save_libs
+fi
+
+AC_SUBST(SRVLIBS)
+
 # Try and link a LDAP test program to weed out unusable LDAP
-# libraries.  -lldap -llber -lresolv is for OpenLDAP.  -lldapssl41 is
-# for Mozilla LDAP.
+# libraries.  -lldap [-llber [-lresolv]] is for older OpenLDAPs.
+# OpenLDAP, circa 1999, was terrible with creating weird dependencies.
+# This seems to have all been resolved, so I'm simplifying this code
+# significantly.  If all else fails, the user can play
+# guess-the-dependency by using something like ./configure
+# LDAPLIBS="-Lfoo -lbar"
 
 if test "$try_ldap" = yes ; then
-  for LDAPLIBS in "-lldap -llber -lresolv" "-lldapssl41"; do
+  for MY_LDAPLIBS in ${LDAPLIBS+"$LDAPLIBS"} "-lldap" "-lldap -llber" "-lldap -llber -lresolv"; do
     _ldap_save_libs=$LIBS
-    LIBS="$LDAPLIBS $NETLIBS $LIBS"
+    LIBS="$MY_LDAPLIBS $NETLIBS $LIBS"
 
-    AC_MSG_CHECKING([whether LDAP via \"$LDAPLIBS\" is present and sane])
+    AC_MSG_CHECKING([whether LDAP via \"$MY_LDAPLIBS\" is present and sane])
     AC_TRY_LINK([#include <ldap.h>],[ldap_open("foobar",1234);],
                 [gnupg_cv_func_ldap_init=yes],[gnupg_cv_func_ldap_init=no])
     AC_MSG_RESULT([$gnupg_cv_func_ldap_init])
 
-    if test $gnupg_cv_func_ldap_init = no; then
-      AC_MSG_CHECKING([whether I can make LDAP be sane with lber.h])
-      AC_TRY_LINK([#include <lber.h>
-#include <ldap.h>],[ldap_open("foobar",1234);],
-         [gnupg_cv_func_ldaplber_init=yes],[gnupg_cv_func_ldaplber_init=no])
-      AC_MSG_RESULT([$gnupg_cv_func_ldaplber_init])
-    fi
+    if test "$gnupg_cv_func_ldap_init" = yes ; then
+       LDAPLIBS=$MY_LDAPLIBS
+       GPGKEYS_LDAP="gpgkeys_ldap$EXEEXT"
 
-    if test "$gnupg_cv_func_ldaplber_init" = yes ; then
-       AC_DEFINE(NEED_LBER_H,1,[Define if the LDAP library requires including lber.h before ldap.h])
-    fi
+       AC_CHECK_FUNCS(ldap_get_option ldap_set_option ldap_start_tls_s)
+
+       if test "$ac_cv_func_ldap_get_option" != yes ; then
+          AC_MSG_CHECKING([whether LDAP supports ld_errno])
+         AC_TRY_LINK([#include <ldap.h>],[LDAP *ldap; ldap->ld_errno;],
+            [gnupg_cv_func_ldap_ld_errno=yes],
+            [gnupg_cv_func_ldap_ld_errno=no])
+          AC_MSG_RESULT([$gnupg_cv_func_ldap_ld_errno])
 
-    if test "$gnupg_cv_func_ldap_init" = yes || \
-       test "$gnupg_cv_func_ldaplber_init" = yes ; then
-       GPGKEYS_LDAP="gpgkeys_ldap"
+         if test "$gnupg_cv_func_ldap_ld_errno" = yes ; then
+            AC_DEFINE(HAVE_LDAP_LD_ERRNO,1,[Define if the LDAP library supports ld_errno])
+          fi
+       fi
     fi
 
     LIBS=$_ldap_save_libs
@@ -347,39 +607,47 @@ fi
 
 AC_SUBST(GPGKEYS_LDAP)
 AC_SUBST(LDAPLIBS)
+AM_CONDITIONAL(GPGKEYS_LDAP, test "$GPGKEYS_LDAP" != "")
+
+dnl This isn't necessarily sendmail itself, but anything that gives a
+dnl sendmail-ish interface to the outside world.  That includes qmail,
+dnl postfix, etc.  Basically, anything that can handle "sendmail -t".
 
 if test "$try_mailto" = yes ; then
-  AC_PATH_PROG(SENDMAIL,sendmail,,$PATH:/usr/sbin:/usr/libexec:/usr/lib)
+  AC_ARG_WITH(mailprog,[  --with-mailprog=NAME    use "NAME -t" for mail transport],,with_mailprog=yes)
 
-  if test "$ac_cv_path_SENDMAIL" ; then
-    GPGKEYS_MAILTO="gpgkeys_mailto"
+  if test "$with_mailprog" = yes ; then
+    AC_PATH_PROG(SENDMAIL,sendmail,,$PATH:/usr/sbin:/usr/libexec:/usr/lib)
+    if test "$ac_cv_path_SENDMAIL" ; then
+      GPGKEYS_MAILTO="gpgkeys_mailto"
     fi
+  elif test "$with_mailprog" != no ; then
+    AC_MSG_CHECKING([for a mail transport program])
+    AC_SUBST(SENDMAIL,$with_mailprog)
+    AC_MSG_RESULT($with_mailprog)
+    GPGKEYS_MAILTO="gpgkeys_mailto"
   fi
-AC_SUBST(GPGKEYS_MAILTO)
+fi
 
-AC_SUBST(GPGKEYS_HKP)
+AC_SUBST(GPGKEYS_MAILTO)
 
 case "${target}" in
     *-*-mingw32*)
         PRINTABLE_OS_NAME="MingW32"
         ;;
     *-*-cygwin*)
-        PRINTABLE_OS_NAME="Cygwin32"
+        PRINTABLE_OS_NAME="Cygwin"
         ;;
     i?86-emx-os2 | i?86-*-os2*emx )
         PRINTABLE_OS_NAME="OS/2"
         ;;
     i?86-*-msdosdjgpp*)
         PRINTABLE_OS_NAME="MSDOS/DJGPP"
-        try_dynload=no
+        try_extensions=no
         ;;
     *-linux*)
         PRINTABLE_OS_NAME="GNU/Linux"
         ;;
-dnl let that after linux to avoid gnu-linux problems
-    *-gnu*)
-        PRINTABLE_OS_NAME="GNU/Hurd"
-        ;;
     *)
         PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
         ;;
@@ -389,66 +657,14 @@ AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
 
 
 #
-# 1. Set flags to be used for the extension modules
-# 2. Set names of random devices
+# 1. Set names of random devices
 #
 NAME_OF_DEV_RANDOM="/dev/random"
 NAME_OF_DEV_URANDOM="/dev/urandom"
 case "${target}" in
-    *-openbsd* | *-netbsd*)
+    *-openbsd*)
         NAME_OF_DEV_RANDOM="/dev/srandom"
         NAME_OF_DEV_URANDOM="/dev/urandom"
-        DYNLINK_MOD_CFLAGS="-shared -rdynamic $CFLAGS_PIC -Wl,-Bshareable -Wl,-x"
-        ;;
-
-     hpux*)
-       # if using the vendor (ANSI) compiler, arrange to have `-b' passed
-       # to the linker.  If using gcc, it supports `-shared' to do the same.
-        if test -n "$GCC" ; then
-           DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
-        else
-           DYNLINK_MOD_CFLAGS='-Wl,-b'
-        fi
-        ;;
-
-    *-irix6.5*)
-        # Irix 6.5 (and probably a lot earlier, but I only still have
-       # access to 6.5.x) doesn't require any additional flags, as `-KPIC'
-       # is the default.  Also, `-shared' works with the vendor compiler
-       DYNLINK_MOD_CFLAGS="-shared"
-        ;;
-
-    alpha*-dec-osf*)
-       # osf (i.e. OSF/1, Digital UNIX, or Tru64 UNIX, pick any one...)
-       # on alpha doesn't require any PIC flags, everything is PIC.
-       # This may not be the case for osf ports to other machines, so
-       # hence the more specific match for target.
-       #
-       # Also, `-shared' works with the vendor compiler or gcc.
-       # -expect_unresolved turns off warnings about unresolved symbols.
-       DYNLINK_MOD_CFLAGS='-shared -Wl,-expect_unresolved,\*'
-         ;;
-
-    *-solaris*)
-       # -shared is a gcc-ism.  Find pic flags from GNUPG_CHECK_PIC.
-       if test -n "$GCC" ; then
-          DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
-       else
-          DYNLINK_MOD_CFLAGS="-G $CFLAGS_PIC"
-       fi
-       ;;
-
-    *-irix* | *-dec-osf* )
-       DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
-       ;;
-
-    *)
-        # -shared is a gcc-ism.  Find pic flags from GNUPG_CHECK_PIC.
-        if test -n "$GCC" ; then
-           DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"                            
-        else
-           DYNLINK_MOD_CFLAGS="$CFLAGS_PIC"
-        fi
         ;;
 esac
 AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM",
@@ -460,92 +676,99 @@ AC_SUBST(MPI_OPT_FLAGS)
 
 dnl Checks for libraries.
 
+AM_GNU_GETTEXT_VERSION(0.14.1)
 if test "$try_gettext" = yes; then
-AM_GNU_GETTEXT
+  AM_GNU_GETTEXT(,[need-ngettext])
+
+  # gettext requires some extra checks.  These really should be part of
+  # the basic AM_GNU_GETTEXT macro.  TODO: move other gettext-specific
+  # function checks to here.
+
+  AC_CHECK_FUNCS(strchr)
 else
-USE_NLS=no
-USE_INCLUDED_LIBINTL=no
-BUILD_INCLUDED_LIBINTL=no
-AC_SUBST(USE_NLS)
-AC_SUBST(USE_INCLUDED_LIBINTL)
-AC_SUBST(BUILD_INCLUDED_LIBINTL)
-fi
-
-
-if test "$try_dynload" = yes ; then
-  AC_CHECK_LIB(dl,dlopen)
-  if test "$ac_cv_lib_dl_dlopen" = "yes"; then
-    AC_DEFINE(USE_DYNAMIC_LINKING,1,
-              [define to enable the use of extensions])
-    AC_DEFINE(HAVE_DL_DLOPEN,1,
-              [Defined when the dlopen function family is available])
-    DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
-    use_gnupg_extensions=yes
-  else
-    AC_CHECK_FUNCS(dlopen)
-    if test "$ac_cv_func_dlopen" = "yes"; then
-      AC_DEFINE(USE_DYNAMIC_LINKING)
-      AC_DEFINE(HAVE_DL_DLOPEN)
-      DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
-      use_gnupg_extensions=yes
+  USE_NLS=no
+  USE_INCLUDED_LIBINTL=no
+  BUILD_INCLUDED_LIBINTL=no
+  AC_SUBST(USE_NLS)
+  AC_SUBST(USE_INCLUDED_LIBINTL)
+  AC_SUBST(BUILD_INCLUDED_LIBINTL)
+fi
+
+if test "$try_extensions" = yes || test x"$card_support" = xyes ; then
+  if test "$need_dlopen" = yes; then
+    _dl_save_libs=$LIBS
+    LIBS=""
+    AC_SEARCH_LIBS(dlopen,dl,found_dlopen=yes)
+    if test x"$found_dlopen" = "xyes" ; then
+      AC_DEFINE(HAVE_DL_DLOPEN,1,
+                [Defined when the dlopen function family is available])
+      DLLIBS=$LIBS
     else
-      AC_CHECK_LIB(dld,shl_load)
-      if test "$ac_cv_lib_dld_shl_load" = "yes"; then
-        AC_DEFINE(USE_DYNAMIC_LINKING)
-        AC_DEFINE(HAVE_DL_SHL_LOAD,1,
-                  [Defined if the shl_load function family is available])
-        DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
-        use_gnupg_extensions=yes
-dnl -----------------
-dnl  DLD is not ready for use. So I better disable this test
-dnl
-dnl    AC_CHECK_LIB(dld,dld_link)
-dnl    if test "$ac_cv_lib_dld_dld_link" = "yes"; then
-dnl      AC_DEFINE(USE_DYNAMIC_LINKING)
-dnl      AC_DEFINE(HAVE_DLD_DLD_LINK)
-dnl      DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
-dnl      use_gnupg_extensions=yes
-dnl ---------------
+      if test "$try_extensions" = yes ; then
+         AC_MSG_NOTICE([dlopen not found.  Disabling extensions.])
+        try_extensions=no
+      fi
+  
+      if test "$card_support" = yes ; then
+         AC_MSG_WARN([dlopen not found.  Disabling OpenPGP card support.])
+         card_support=no
       fi
     fi
+    LIBS=$_dl_save_libs
   fi
-else
-  AC_MSG_CHECKING(for dynamic loading)
-  DYNLINK_LDFLAGS=
-  DYNLINK_MOD_CFLAGS=
-  use_gnupg_extensions=no
-  AC_MSG_RESULT(has been disabled)
 fi
 
-AM_CONDITIONAL(ENABLE_GNUPG_EXTENSIONS, test "$use_gnupg_extensions" = yes )
-AC_SUBST(DYNLINK_LDFLAGS)
-AC_SUBST(DYNLINK_MOD_CFLAGS)
+AC_SUBST(DLLIBS)
+
+if test "$card_support" = yes ; then
+  AC_DEFINE(ENABLE_CARD_SUPPORT,1,[Define to include OpenPGP card support])
+fi
 
+if test "$try_extensions" = yes ; then
+  AC_DEFINE(USE_DYNAMIC_LINKING,1,[Define to enable the use of extensions])
+fi
+
+if test "$selinux_support" = yes ; then
+  AC_DEFINE(ENABLE_SELINUX_HACKS,1,[Define to enable SELinux support])
+fi
+
+AM_CONDITIONAL(ENABLE_CARD_SUPPORT, test "$card_support" = yes)
 
 dnl Checks for header files.
 AC_HEADER_STDC
-AC_CHECK_HEADERS(unistd.h langinfo.h termio.h locale.h)
+AC_CHECK_HEADERS(unistd.h langinfo.h termio.h locale.h getopt.h)
+
 
 dnl Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
 AC_C_INLINE
+AC_C_VOLATILE
 AC_TYPE_SIZE_T
+AC_TYPE_MODE_T
 AC_TYPE_SIGNAL
 AC_DECL_SYS_SIGLIST
 
 GNUPG_CHECK_ENDIAN
 
-
 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
 
-AC_CHECK_SIZEOF(unsigned short, 2)
-AC_CHECK_SIZEOF(unsigned int, 4)
-AC_CHECK_SIZEOF(unsigned long, 4)
-AC_CHECK_SIZEOF(unsigned long long, 0)
+AC_CHECK_SIZEOF(unsigned short)
+AC_CHECK_SIZEOF(unsigned int)
+AC_CHECK_SIZEOF(unsigned long)
+AC_CHECK_SIZEOF(unsigned long long)
+
+# Ensure that we have UINT64_C before we bother to check for uint64_t
+AC_CACHE_CHECK([for UINT64_C],[gnupg_cv_uint64_c_works],
+   AC_COMPILE_IFELSE(AC_LANG_PROGRAM([#include <inttypes.h>
+uint64_t foo=UINT64_C(42);]),gnupg_cv_uint64_c_works=yes,gnupg_cv_uint64_c_works=no))
+
+if test "$gnupg_cv_uint64_c_works" = "yes" ; then
+   AC_CHECK_SIZEOF(uint64_t)
+fi
 
 if test "$ac_cv_sizeof_unsigned_short" = "0" \
    || test "$ac_cv_sizeof_unsigned_int" = "0" \
@@ -553,16 +776,37 @@ if test "$ac_cv_sizeof_unsigned_short" = "0" \
     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
 fi
 
+dnl Do we have any 64-bit data types?
+if test "$ac_cv_sizeof_unsigned_int" != "8" \
+   && test "$ac_cv_sizeof_unsigned_long" != "8" \
+   && test "$ac_cv_sizeof_unsigned_long_long" != "8" \
+   && test x"$ac_cv_sizeof_uint64_t" != "x8"; then
+    AC_MSG_NOTICE([No 64-bit types.  Disabling SHA-384 and SHA-512.])
+else
+  if test x"$use_sha512" = xyes ; then
+     AC_SUBST(SHA512_O,sha512.o)
+     AC_DEFINE(USE_SHA512,1,[Define to include the SHA-384 and SHA-512 digests])
+  fi
+fi
+
 dnl Checks for library functions.
 AC_FUNC_FSEEKO
 AC_FUNC_VPRINTF
 AC_FUNC_FORK
 AC_CHECK_FUNCS(strerror stpcpy strsep strlwr tcgetattr strtoul mmap)
-AC_CHECK_FUNCS(strcasecmp strncasecmp)
+AC_CHECK_FUNCS(strcasecmp strncasecmp ctermid times unsetenv)
 AC_CHECK_FUNCS(memmove gettimeofday getrusage setrlimit clock_gettime)
 AC_CHECK_FUNCS(atexit raise getpagesize strftime nl_langinfo setlocale)
-AC_CHECK_FUNCS(waitpid wait4 sigaction sigprocmask rand pipe stat)
-AC_REPLACE_FUNCS(mkdtemp)
+AC_CHECK_FUNCS(waitpid wait4 sigaction sigprocmask rand pipe stat getaddrinfo)
+AC_REPLACE_FUNCS(mkdtemp timegm)
+AC_REPLACE_FUNCS(vasprintf)
+AC_CHECK_TYPES([struct sigaction, sigset_t],,,[#include <signal.h>])
+
+# See if getopt is in libiberty.  This is of course not optimal since
+# it might be somewhere other than libiberty, but does cover the
+# mingw32 case.
+
+AC_CHECK_FUNC(getopt,,AC_CHECK_LIB(iberty,getopt,AC_SUBST(GETOPT,"-liberty")))
 
 #
 # check for gethrtime and run a testprogram to see whether
@@ -608,6 +852,12 @@ dnl
 dnl Check whether we can use Linux capabilities as requested
 dnl
 if test "$use_capabilities" = "yes" ; then
+
+AC_MSG_WARN([[
+***
+*** WARNING: using capabilities with GnuPG is experimental code!
+***]])
+
 use_capabilities=no
 AC_CHECK_HEADERS(sys/capability.h)
 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
@@ -615,7 +865,7 @@ if test "$ac_cv_header_sys_capability_h" = "yes" ; then
   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
      AC_DEFINE(USE_CAPABILITIES,1,
                [define if capabilities should be used])
-     LIBS="$LIBS -lcap"
+     AC_SUBST(CAPLIBS,"-lcap")
      use_capabilities=yes
   fi
 fi
@@ -659,143 +909,67 @@ fi
 
 
 dnl
-dnl Figure out the default linkage mode for random modules
+dnl Figure out the default random module.
 dnl
-print_egd_notice=no
+random_modules=""
 if test "$use_static_rnd" = default; then
-  if test "$ac_cv_have_dev_random" = yes; then
-      static_random_module="rndlinux"
-  else
-      case "${target}" in
-          *-*-mingw32*|*-*-cygwin*)
-              static_random_module="rndw32"
-              AC_DEFINE(USE_STATIC_RNDW32,1,
-                       [At some point in the code we need to know that
-                        we use the Windows random module.])
-              ;;
-          i?86-emx-os2|i?86-*-os2*emx)
-              static_random_module="rndos2"
-              ;;
-          m68k-atari-mint)
-              static_random_module="rndatari"
-              ;;
-          i?86-*-msdosdjgpp*)
-              :
-              ;;
-          *)
-              static_random_module="rndunix"
-              print_egd_notice=yes
-             ;;
-      esac
-  fi
+     if test "$ac_cv_have_dev_random" = yes; then
+        random_modules="rndlinux"
+     else
+         case "${target}" in
+            *-*-mingw32*|*-*-cygwin*)
+                random_modules="rndw32"
+                ;;
+            i?86-emx-os2|i?86-*-os2*emx)
+                random_modules="rndos2"
+                ;;
+            m68k-atari-mint)
+                random_modules="rndatari"
+                ;;
+            i?86-*-msdosdjgpp*)
+                :
+                ;;
+            *)
+                random_modules="rndlinux rndegd rndunix"
+                AC_DEFINE(USE_ALL_RANDOM_MODULES, 1, 
+                          [Allow to select random modules at runtime.])
+                ;;
+         esac
+     fi
 else
-  if test "$use_static_rnd" = none; then
-    :
+  if test "$use_static_rnd" = auto; then
+     random_modules="rndlinux rndegd rndunix"
+     AC_DEFINE(USE_ALL_RANDOM_MODULES, 1)
   else
-    static_random_module="rnd$use_static_rnd"
-    if test "$use_static_rnd" = "unix"; then
-        print_egd_notice=yes
-    fi
+     random_modules="rnd$use_static_rnd";
   fi
 fi
 
-
-if test "$print_egd_notice" = "yes"; then
-    AC_MSG_WARN([[
-***
-*** The performance of the UNIX random gatherer module is not very good
-*** and it does not keep the entropy pool over multiple invocations of
-*** GnuPG.  The suggested way to overcome this problem is to use the
-***
-***               Entropy Gathering Daemon (EGD)
-***
-*** which provides a entropy source for the whole system.  It is written
-*** in Perl and available at the GnuPG FTP servers.  For more information
-*** consult the GnuPG webpages:
-***
-***           http://www.gnupg.org/download.html#egd
-***
-*** You may want to run ./configure with --enable-static-rnd=none to be
-*** able to load the EGD client code dynamically; this way you can choose
-*** between RNDUNIX and RNDEGD without recompilation.
-***]])
+if test -z "$random_modules"; then
+   AC_MSG_ERROR(no random module available)
 fi
-
-dnl
-dnl Parse the modules list and build the list
-dnl of static and dynamically linked modules
-dnl
-dnl (We always need a static rmd160)
-static_modules="$static_modules rmd160 $static_random_module"
-STATIC_CIPHER_NAMES=""
-STATIC_CIPHER_OBJS=""
-DYNAMIC_CIPHER_MODS=""
-show_dynlink=""
-for name in $MODULES_IN_CIPHER; do
-    x="yes"
-    for i in $disallowed_modules; do
-        if test "$name" = "$i" ; then x="no" ; fi
-    done;
-    if test $x = yes; then
-        x="no"
-        for i in $static_modules; do
-            if test "$name" = "$i" ; then
-                x="yes"
-            fi
-        done;
-        if test $x = yes; then
-            STATIC_CIPHER_NAMES="$STATIC_CIPHER_NAMES $name"
-            STATIC_CIPHER_OBJS="$STATIC_CIPHER_OBJS $name.o"
-        else
-            DYNAMIC_CIPHER_MODS="$DYNAMIC_CIPHER_MODS $name"
-            show_dynlink="$show_dynlink $name"
-        fi
-    fi
-done
-AC_SUBST(STATIC_CIPHER_OBJS)
-AC_SUBST(STATIC_CIPHER_NAMES)
-AC_SUBST(DYNAMIC_CIPHER_MODS)
-
-dnl
-dnl And build the constructor file
-dnl
-
-test -d cipher || mkdir cipher
-cat <<G10EOF >cipher/construct.c
-/* automatically generated by configure - do not edit */
-
-G10EOF
-show_statlink=""
-for name in $STATIC_CIPHER_NAMES; do
-    echo "void ${name}_constructor(void);" >>cipher/construct.c
-    show_statlink="$show_statlink $name"
-done
-
-cat <<G10EOF >>cipher/construct.c
-
-void
-cipher_modules_constructor(void)
-{
-    static int done = 0;
-    if( done )
-        return;
-    done = 1;
-
-G10EOF
-for name in $STATIC_CIPHER_NAMES; do
-    echo "   ${name}_constructor();" >>cipher/construct.c
+print_egd_warning=no
+for rndmod in $random_modules "" ; do
+  case "$rndmod" in
+    rndlinux)
+         AC_DEFINE(USE_RNDLINUX,1, 
+                  [Defined if the /dev/random based RNG should be used.])
+         ;;
+    rndunix)
+         AC_DEFINE(USE_RNDUNIX,1, 
+                  [Defined if the default Unix RNG should be used.])
+         print_egd_warning=yes
+          ;;
+    rndegd)
+         AC_DEFINE(USE_RNDEGD,1, 
+                  [Defined if the EGD based RNG should be used.])
+         ;;
+    rndw32)
+         AC_DEFINE(USE_RNDW32,1, 
+                  [Defined if the Windows specific RNG should be used.])
+        ;;
+   esac
 done
-echo '}' >>cipher/construct.c
-
-
-
-
-dnl
-dnl Figure how to link the cipher modules
-dnl
-AC_SUBST(STATIC_CIPHER_OBJS)
-AC_SUBST(DYNAMIC_CIPHER_MODS)
-
 
 dnl setup assembler stuff
 AC_MSG_CHECKING(for mpi assembler functions)
@@ -822,6 +996,51 @@ AC_SUBST(MPI_EXTRA_ASM_OBJS)
 MPI_SFLAGS="$ac_cv_mpi_sflags"
 AC_SUBST(MPI_SFLAGS)
 
+# Sanity check regex.  Tests adapted from mutt.
+
+AC_MSG_CHECKING([whether regular expression support is requested])
+AC_ARG_ENABLE(regex,
+[  --disable-regex         do not handle regular expressions in trust sigs],
+     use_regex=$enableval, use_regex=yes)
+AC_MSG_RESULT($use_regex)
+
+if test "$use_regex" = yes ; then
+  AC_MSG_CHECKING([whether the included regex lib is requested])
+  AC_ARG_WITH(included-regex,
+      [  --with-included-regex   use the included GNU regex library],
+      [gnupg_cv_included_regex=yes],[gnupg_cv_included_regex=no])
+  AC_MSG_RESULT($gnupg_cv_included_regex)
+
+  if test $gnupg_cv_included_regex = no ; then
+     # Does the system have regex functions at all?
+     AC_CHECK_FUNC(regcomp,gnupg_cv_included_regex=no,
+                          gnupg_cv_included_regex=yes)
+  fi
+
+  if test $gnupg_cv_included_regex = no ; then
+     AC_CACHE_CHECK([whether your system's regexp library is broken],
+       [gnupg_cv_regex_broken],
+       AC_TRY_RUN([
+#include <unistd.h>
+#include <regex.h>
+main() { regex_t blah ; regmatch_t p; p.rm_eo = p.rm_eo; return regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0); }],
+       gnupg_cv_regex_broken=no, gnupg_cv_regex_broken=yes, gnupg_cv_regex_broken=yes))
+
+     if test $gnupg_cv_regex_broken = yes ; then
+      AC_MSG_WARN(your regex is broken - using the included GNU regex instead.)
+      gnupg_cv_included_regex=yes
+     fi
+  fi
+
+  if test $gnupg_cv_included_regex = yes; then
+     AC_DEFINE(USE_GNU_REGEX,1,[ Define if you want to use the included regex lib ])
+     AC_SUBST(REGEX_O,regex.o)
+  fi
+else
+
+  AC_DEFINE(DISABLE_REGEX,1,[ Define to disable regular expression support ])
+fi
+
 dnl Do we have zlib? Must do it here because Solaris failed
 dnl when compiling a conftest (due to the "-lz" from LIBS).
 use_local_zlib=yes
@@ -842,22 +1061,76 @@ else
   AC_CHECK_HEADER(zlib.h,
       AC_CHECK_LIB(z, deflateInit2_,
        use_local_zlib=no
-       LIBS="$LIBS -lz",
+       ZLIBS="-lz",
        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags})
 fi
+
 if test "$use_local_zlib" = yes ; then
     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
     AC_CONFIG_LINKS(zlib.h:zlib/zlib.h zconf.h:zlib/zconf.h )
     ZLIBS="../zlib/libzlib.a"
 else
     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, false)
-    ZLIBS=
 fi
+
+if test "$use_bzip2" = yes ; then
+  _cppflags="${CPPFLAGS}"
+  _ldflags="${LDFLAGS}"
+  AC_ARG_WITH(bzip2,
+     AC_HELP_STRING([--with-bzip2=DIR],[look for bzip2 in DIR]),
+      [
+      if test -d "$withval" ; then
+        CPPFLAGS="${CPPFLAGS} -I$withval/include"
+        LDFLAGS="${LDFLAGS} -L$withval/lib"
+      fi
+      ],withval="")
+
+# Checking alongside stdio.h as an early version of bzip2 (1.0)
+# required stdio.h to be included before bzlib.h, and Solaris 9 is
+# woefully out of date.
+
+  if test "$withval" != no ; then
+     AC_CHECK_HEADER(bzlib.h,
+        AC_CHECK_LIB(bz2,BZ2_bzCompressInit,
+         [
+         have_bz2=yes
+         ZLIBS="$ZLIBS -lbz2"
+         AC_DEFINE(HAVE_BZIP2,1,
+                 [Defined if the bz2 compression library is available])
+         ],
+         CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
+         CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags},[#include <stdio.h>])
+  fi
+fi
+
+AM_CONDITIONAL(ENABLE_BZIP2_SUPPORT,test x"$have_bz2" = "xyes")
 AC_SUBST(ZLIBS)
 
 
+#
+# libusb allows us to use the integrated CCID smartcard reader driver.
+#
+LIBUSB_LIBS=""
+if test "$card_support" = yes; then
+    AC_CHECK_LIB(usb, usb_bulk_write,
+                 [ LIBUSB_LIBS="$LIBUSB_LIBS -lusb"
+                   AC_DEFINE(HAVE_LIBUSB,1,
+                   [defined if libusb is available])
+                 ])
+fi
+AC_SUBST(LIBUSB_LIBS)
+AC_CHECK_FUNCS(usb_get_busses)
+
+#
+# Check for readline support
+#
+if test "$readline_support" = yes ; then
+    AC_CHECK_LIB(readline, add_history)
+    AC_CHECK_HEADERS([readline/readline.h])
+fi
+
+
 # Allow users to append something to the version string without
 # flagging it as development version.  The user version parts is
 # considered everything after a dash. 
@@ -882,22 +1155,45 @@ GNUPG_CHECK_GNUMAKE
 # mysterious reasons - the final link step should bail out. 
 case "${target}" in
     *-*-mingw32*)
-        LIBS="$LIBS -lws2_32"
+dnl      NETLIBS="$NETLIBS -lwsock32"
+       W32LIBS="-lwsock32"
         ;;
     *)
        ;;
 esac
 
+AC_SUBST(NETLIBS)
+AC_SUBST(W32LIBS)
 
 if test "$GCC" = yes; then
     if test "$USE_MAINTAINER_MODE" = "yes"; then
         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
+        CFLAGS="$CFLAGS -Wformat-nonliteral"
     else
         CFLAGS="$CFLAGS -Wall"
     fi
 fi
 
-AC_SUBST(NETLIBS)
+
+if test "$print_egd_warning" = yes; then
+  AC_MSG_WARN([[
+***
+*** The performance of the UNIX random gatherer module is not very good
+*** and it does not keep the entropy pool over multiple invocations of
+*** GnuPG.  The suggested way to overcome this problem is to use the
+***
+***               Entropy Gathering Daemon (EGD)
+***
+*** which provides a entropy source for the whole system.  It is written
+*** in Perl and available at the GnuPG FTP servers.  For more information
+*** consult the GnuPG webpages:
+***
+***           http://www.gnupg.org/download/#EGD
+***
+*** You may want to run ./configure with --enable-static-rnd=egd or
+*** --enable-static-rnd=auto to use it.
+***]])
+fi
 
 # Note the \\\\ for backslashes.  Autoconf eats one layer, leaving \\
 
@@ -905,19 +1201,20 @@ AC_CONFIG_COMMANDS(g10defs.h,[[
 cat >g10defs.tmp <<G10EOF
 /* Generated automatically by configure */
 #ifdef HAVE_DRIVE_LETTERS
-  #define G10_LOCALEDIR "c:/lib/gnupg/locale"
-  #define GNUPG_LIBDIR  "c:/lib/gnupg"
-  #define GNUPG_DATADIR "c:/lib/gnupg"
-  #define GNUPG_HOMEDIR "c:/gnupg"
+#define G10_LOCALEDIR     "c:\\\\lib\\\\gnupg\\\\locale"
+#define GNUPG_LIBDIR      "c:\\\\lib\\\\gnupg"
+#define GNUPG_LIBEXECDIR  "c:\\\\lib\\\\gnupg"
+#define GNUPG_DATADIR     "c:\\\\lib\\\\gnupg"
+#define GNUPG_HOMEDIR     "c:\\\\gnupg"
+#else
+#define G10_LOCALEDIR     "${datadir}/locale"
+#define GNUPG_LIBDIR      "${libdir}/gnupg"
+#define GNUPG_DATADIR     "${datadir}/gnupg"
+#ifdef __VMS
+#define GNUPG_HOMEDIR "/SYS\$LOGIN/gnupg" 
 #else
-  #define G10_LOCALEDIR "${datadir}/locale"
-  #define GNUPG_LIBDIR  "${libdir}/gnupg"
-  #define GNUPG_DATADIR "${datadir}/gnupg"
-  #ifdef __VMS
-    #define GNUPG_HOMEDIR "/SYS\$LOGIN/gnupg" 
-  #else
-    #define GNUPG_HOMEDIR "~/.gnupg" 
-  #endif
+#define GNUPG_HOMEDIR "~/.gnupg" 
+#endif
 #endif
 /* those are here to be redefined by handcrafted g10defs.h.
    Please note that the string version must not contain more
@@ -933,6 +1230,13 @@ cat >g10defs.tmp <<G10EOF
 #define DIRSEP_S "/"
 #define EXTSEP_S "."
 #endif
+/* This is the same as VERSION, but should be overridden if the
+   platform cannot handle things like dots'.' in filenames.  Set
+   SAFE_VERSION_DOT and SAFE_VERSION_DASH to whatever SAFE_VERSION
+   uses for dots and dashes. */
+#define SAFE_VERSION      VERSION
+#define SAFE_VERSION_DOT  '.'
+#define SAFE_VERSION_DASH '-'
 G10EOF
 cat mpi/mpi-asm-defs.h >>g10defs.tmp 
 if cmp -s g10defs.h g10defs.tmp 2>/dev/null; then
@@ -947,6 +1251,7 @@ fi
 prefix=$prefix
 exec_prefix=$exec_prefix
 libdir=$libdir
+libexecdir=$libexecdir
 datadir=$datadir
 DATADIRNAME=$DATADIRNAME
 ]])
@@ -954,6 +1259,7 @@ DATADIRNAME=$DATADIRNAME
 
 AC_CONFIG_FILES([
 Makefile
+m4/Makefile
 intl/Makefile
 po/Makefile.in
 util/Makefile
@@ -973,14 +1279,7 @@ AC_OUTPUT
 # Give some feedback
 echo
 echo   "                Configured for: $PRINTABLE_OS_NAME ($target)"
-if test -n "$show_dynlink"; then
-  echo "    Dynamically linked modules:$show_dynlink"
-fi
-if test -n "$show_statlink"; then
-  echo "     Statically linked modules:$show_statlink"
-fi
 if test -n "$show_extraasm"; then
   echo "  Extra cpu specific functions:$show_extraasm"
 fi
 echo
-