Fixed release creation.
[gnupg.git] / configure.ac
index d77d4ea..34b726b 100644 (file)
-dnl configure.ac script for GnuPG
-dnl Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-dnl               2005 Free Software Foundation, Inc.
-dnl
-dnl This file is part of GnuPG.
-dnl
-dnl GnuPG is free software; you can redistribute it and/or modify
-dnl it under the terms of the GNU General Public License as published by
-dnl the Free Software Foundation; either version 2 of the License, or
-dnl (at your option) any later version.
-dnl 
-dnl GnuPG is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-dnl GNU General Public License for more details.
-dnl 
-dnl You should have received a copy of the GNU General Public License
-dnl along with this program; if not, write to the Free Software
-dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
-dnl MA 02110-1301, USA
-dnl
-dnl (Process this file with autoconf to produce a configure script.)
-
-AC_PREREQ(2.59)
-min_automake_version="1.9.3"
-
-# 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.4.3-cvs, bug-gnupg@gnu.org)
+# configure.ac - for GnuPG 2.0
+# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+#               2006, 2007 Free Software Foundation, Inc.
+# 
+# This file is part of GnuPG.
+# 
+# GnuPG is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+# 
+# GnuPG is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+# Process this file with autoconf to produce a configure script.
+AC_PREREQ(2.61)
+min_automake_version="1.10"
+
+# Remember to change the version number immediately *after* a release.
+# Set my_issvn to "yes" for non-released code.  Remember to run an
+# "svn up" and "autogen.sh" right before creating a distribution.
+m4_define([my_version], [2.0.9])
+m4_define([my_issvn], [yes])
+
+
+m4_define([svn_revision], m4_esyscmd([echo -n $( (svn info 2>/dev/null \
+            || echo 'Revision: 0')|sed -n '/^Revision:/ {s/[^0-9]//gp;q;}')]))
+AC_INIT([gnupg], my_version[]m4_if(my_issvn,[yes],[-svn[]svn_revision]),
+        [bug-gnupg@gnupg.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=no
 
-AC_CONFIG_AUX_DIR(scripts)
-AC_CONFIG_SRCDIR(g10/gpg.c)
-AC_CANONICAL_HOST
-AM_INIT_AUTOMAKE([std-options])
-AM_CONFIG_HEADER(config.h)
+NEED_GPG_ERROR_VERSION=1.4
 
-AC_GNU_SOURCE
+NEED_LIBGCRYPT_API=1
+NEED_LIBGCRYPT_VERSION=1.2.2
 
-dnl
-dnl  Check for random module options
-dnl
-AC_MSG_CHECKING([which random module to use])
-AC_ARG_ENABLE(static-rnd,
-    [  --enable-static-rnd=[egd|unix|linux|auto]  ],
-[use_static_rnd=$enableval], [use_static_rnd=default] )
+NEED_LIBASSUAN_API=1
+NEED_LIBASSUAN_VERSION=1.0.4
 
-if test "$use_static_rnd" = no; then
-    use_static_rnd=default
-fi
+NEED_KSBA_API=1
+NEED_KSBA_VERSION=1.0.2
 
-case "$use_static_rnd" in
-    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)
-      ;;
-esac
 
-AC_ARG_WITH(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.
-                    For details see cipher/rndegd.c])
-
-
-dnl
-dnl See whether the user wants to disable checking for /dev/random
-
-AC_MSG_CHECKING([whether use of /dev/random is requested])
-AC_ARG_ENABLE(dev-random,
-[  --disable-dev-random    disable the use of dev random],
-    try_dev_random=$enableval, try_dev_random=yes)
-AC_MSG_RESULT($try_dev_random)
-
-
-dnl
-dnl  Check other options
-dnl
-
-AC_MSG_CHECKING([whether assembler modules are requested])
-AC_ARG_ENABLE(asm,
-[  --disable-asm           do not use assembler modules],
-     try_asm_modules=$enableval, try_asm_modules=yes)
-AC_MSG_RESULT($try_asm_modules)
-
-AC_MSG_CHECKING([whether memory guard is requested])
-AC_ARG_ENABLE(m-guard,
-    [  --enable-m-guard        enable memory guard facility],
-    use_m_guard=$enableval, use_m_guard=no)
-AC_MSG_RESULT($use_m_guard)
-if test "$use_m_guard" = yes ; then
-    AC_DEFINE(M_GUARD,1,[Define to use the (obsolete) malloc guarding feature])
-fi
+PACKAGE=$PACKAGE_NAME
+PACKAGE_GT=${PACKAGE_NAME}2
+VERSION=$PACKAGE_VERSION
+
+AC_CONFIG_AUX_DIR(scripts)
+AC_CONFIG_SRCDIR(sm/gpgsm.c)
+AM_CONFIG_HEADER(config.h)
+AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
+AC_CANONICAL_HOST
+AB_INIT
+
+AC_GNU_SOURCE
 
-# We don't have a test to check whether as(1) knows about the
-# non executable stack option.  Thus we provide an option to enable
-# it.
-AC_MSG_CHECKING([whether non excutable stack support is requested])
-AC_ARG_ENABLE(noexecstack,
-              AC_HELP_STRING([--enable-noexecstack],
-                             [enable non executable stack support (gcc only)]),
-              noexecstack_support=$enableval, noexecstack_support=no)
-AC_MSG_RESULT($noexecstack_support)
+# Some status variables.
+have_gpg_error=no
+have_libgcrypt=no 
+have_libassuan=no
+have_ksba=no
+have_pth=no
+have_libusb=no
+
+use_bzip2=yes
+use_exec=yes
+disable_keyserver_path=no
+use_camellia=no
+
+
+GNUPG_BUILD_PROGRAM(gpg, yes)
+GNUPG_BUILD_PROGRAM(gpgsm, yes)
+GNUPG_BUILD_PROGRAM(agent, yes)
+GNUPG_BUILD_PROGRAM(scdaemon, yes)
+GNUPG_BUILD_PROGRAM(tools, yes)
+GNUPG_BUILD_PROGRAM(doc, yes)
+GNUPG_BUILD_PROGRAM(symcryptrun, no)
+
+AC_SUBST(PACKAGE)
+AC_SUBST(PACKAGE_GT)
+AC_SUBST(VERSION)
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
+AC_DEFINE_UNQUOTED(PACKAGE_GT, "$PACKAGE_GT",
+                                [Name of this package for gettext])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
+AC_DEFINE_UNQUOTED(PACKAGE_BUGREPORT, "$PACKAGE_BUGREPORT",
+                                        [Bug report address])
+AC_DEFINE_UNQUOTED(NEED_LIBGCRYPT_VERSION, "$NEED_LIBGCRYPT_VERSION",
+                                       [Required version of Libgcrypt])
+AC_DEFINE_UNQUOTED(NEED_KSBA_VERSION, "$NEED_KSBA_VERSION",
+                                       [Required version of Libksba])
+
+
+
+# The default is to use the modules from this package and the few
+# other packages in a standard place; i.e where this package gets
+# installed.  With these options it is possible to override these
+# ${prefix} depended values with fixed paths, which can't be replaced
+# at make time.  See also am/cmacros.am and the defaults in AH_BOTTOM.
+AC_ARG_WITH(agent-pgm,
+    [  --with-agent-pgm=PATH  Use PATH as the default for the agent)],
+          GNUPG_AGENT_PGM="$withval", GNUPG_AGENT_PGM="" )
+AC_SUBST(GNUPG_AGENT_PGM)
+AM_CONDITIONAL(GNUPG_AGENT_PGM, test -n "$GNUPG_AGENT_PGM")
+show_gnupg_agent_pgm="(default)"
+test -n "$GNUPG_AGENT_PGM" && show_gnupg_agent_pgm="$GNUPG_AGENT_PGM"
+
+AC_ARG_WITH(pinentry-pgm,
+    [  --with-pinentry-pgm=PATH  Use PATH as the default for the pinentry)],
+          GNUPG_PINENTRY_PGM="$withval", GNUPG_PINENTRY_PGM="" )
+AC_SUBST(GNUPG_PINENTRY_PGM)
+AM_CONDITIONAL(GNUPG_PINENTRY_PGM, test -n "$GNUPG_PINENTRY_PGM")
+show_gnupg_pinentry_pgm="(default)"
+test -n "$GNUPG_PINENTRY_PGM" && show_gnupg_pinentry_pgm="$GNUPG_PINENTRY_PGM"
+
+
+AC_ARG_WITH(scdaemon-pgm,
+    [  --with-scdaemon-pgm=PATH  Use PATH as the default for the scdaemon)],
+          GNUPG_SCDAEMON_PGM="$withval", GNUPG_SCDAEMON_PGM="" )
+AC_SUBST(GNUPG_SCDAEMON_PGM)
+AM_CONDITIONAL(GNUPG_SCDAEMON_PGM, test -n "$GNUPG_SCDAEMON_PGM")
+show_gnupg_scdaemon_pgm="(default)"
+test -n "$GNUPG_SCDAEMON_PGM" && show_gnupg_scdaemon_pgm="$GNUPG_SCDAEMON_PGM"
+
+
+AC_ARG_WITH(dirmngr-pgm,
+    [  --with-dirmngr-pgm=PATH  Use PATH as the default for the dirmngr)],
+          GNUPG_DIRMNGR_PGM="$withval", GNUPG_DIRMNGR_PGM="" )
+AC_SUBST(GNUPG_DIRMNGR_PGM)
+AM_CONDITIONAL(GNUPG_DIRMNGR_PGM, test -n "$GNUPG_DIRMNGR_PGM")
+show_gnupg_dirmngr_pgm="(default)"
+test -n "$GNUPG_DIRMNGR_PGM" && show_gnupg_dirmngr_pgm="$GNUPG_DIRMNGR_PGM"
+
+AC_ARG_WITH(protect-tool-pgm,
+    [  --with-protect-tool-pgm=PATH  Use PATH as the default for the protect-tool)],
+          GNUPG_PROTECT_TOOL_PGM="$withval", GNUPG_PROTECT_TOOL_PGM="" )
+AC_SUBST(GNUPG_PROTECT_TOOL_PGM)
+AM_CONDITIONAL(GNUPG_PROTECT_TOOL_PGM, test -n "$GNUPG_PROTECT_TOOL_PGM")
+show_gnupg_protect_tool_pgm="(default)"
+test -n "$GNUPG_PROTECT_TOOL_PGM" \
+      && show_gnupg_protect_tool_pgm="$GNUPG_PROTECT_TOOL_PGM"
+
+
+# Some folks want to use only the agent from this packet.  Make it
+# easier for them by providing the configure option
+# --enable-only-agent.
+AC_ARG_ENABLE(agent-only,
+    AC_HELP_STRING([--enable-agent-only],[build only the gpg-agent]),
+    build_agent_only=$enableval)
 
 # SELinux support includes tracking of sensitive files to avoid
 # leaking their contents through processing these files by gpg itself
@@ -121,168 +165,32 @@ AC_ARG_ENABLE(selinux-support,
               selinux_support=$enableval, selinux_support=no)
 AC_MSG_RESULT($selinux_support)
 
-
-AC_MSG_CHECKING([whether the new iconv based code is requested])
-AC_ARG_ENABLE(gnupg-iconv,
-              AC_HELP_STRING([--disable-gnupg-iconv],
-                             [disable the new iconv code]),
-              gnupg_use_iconv=$enableval, gnupg_use_iconv=yes)
-AC_MSG_RESULT($gnupg_use_iconv)
-
-AC_MSG_CHECKING([whether to require signing subkeys to have back signatures])
-AC_ARG_ENABLE(backsigs,
-              AC_HELP_STRING([--enable-backsigs],
-                             [require signing subkeys to have back signatures]),
-              do_backsigs=$enableval, do_backsigs=no)
-AC_MSG_RESULT($do_backsigs)
-
-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
-card_support=yes
-agent_support=yes
-disable_keyserver_path=no
-
-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
-   card_support=no
-   agent_support=no)
-
-
-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)
-AC_MSG_RESULT($card_support)
-
-
-# Note that we may later disable the agent support based on the platform.
-AC_MSG_CHECKING([whether gpg-agent support is requested])
-AC_ARG_ENABLE(agent-support,
-              AC_HELP_STRING([--disable-agent-support],
-                             [disable gpg-agent support]),
-              agent_support=$enableval)
-AC_MSG_RESULT($agent_support)
-
-
-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
+# Allow disabling of bzib2 support.
+# It 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)
 
+# Check whether testing support for Camellia has been requested
+AC_MSG_CHECKING([whether to enable the CAMELLIA cipher for gpg])
+AC_ARG_ENABLE(camellia,
+   AC_HELP_STRING([--enable-camellia],[enable the CAMELLIA cipher for gpg]),
+   use_camellia=$enableval)
+AC_MSG_RESULT($use_camellia)
+if test x"$use_camellia" = xyes ; then
+   AC_DEFINE(USE_CAMELLIA,1,[Define to include the CAMELLIA cipher into gpg])
+   AC_MSG_WARN([[
+***
+*** The Camellia cipher for gpg is for testing only and 
+*** is NOT for production use!
+***]])
+fi
+
+
+# Configure option to allow or disallow execution of external
+# programs, like a photo viewer.
 AC_MSG_CHECKING([whether to enable external program execution])
 AC_ARG_ENABLE(exec,
     AC_HELP_STRING([--disable-exec],[disable all external program execution]),
@@ -326,7 +234,7 @@ if test "$use_exec" = yes ; then
   AC_MSG_RESULT($enableval)
 
   if test "$gnupg_cv_enable_keyserver_helpers" = yes ; then
-dnl LDAP is defined only after we confirm the library is available later
+    # LDAP is defined only after we confirm the library is available later
     AC_MSG_CHECKING([whether LDAP keyserver support is requested])
     AC_ARG_ENABLE(ldap,
       AC_HELP_STRING([--disable-ldap],[disable LDAP keyserver interface only]),
@@ -346,6 +254,13 @@ dnl LDAP is defined only after we confirm the library is available later
       try_finger=$enableval, try_finger=yes)
     AC_MSG_RESULT($try_finger)
 
+    AC_MSG_CHECKING([whether generic object key fetching support is requested])
+    AC_ARG_ENABLE(generic,
+      AC_HELP_STRING([--disable-generic],
+        [disable generic object key fetching interface only]),
+      try_generic=$enableval, try_generic=yes)
+    AC_MSG_RESULT($try_generic)
+
     AC_MSG_CHECKING([whether email keyserver support is requested])
     AC_ARG_ENABLE(mailto,
       AC_HELP_STRING([--enable-mailto],
@@ -364,71 +279,181 @@ dnl LDAP is defined only after we confirm the library is available later
     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="$withval"], [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
+#
+# Check for the key/uid cache size.  This can't be zero, but can be
+# pretty small on embedded systems.  This is used for the gpg part.
+#
 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)
-
+        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])
+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
-dnl
+
+
+#
+# Check whether we want to use Linux capabilities
+#
 AC_MSG_CHECKING([whether use of capabilities is requested])
 AC_ARG_WITH(capabilities,
     [  --with-capabilities     use linux capabilities [default=no]],
 [use_capabilities="$withval"],[use_capabilities=no])
 AC_MSG_RESULT($use_capabilities)
 
+#
 # To avoid double inclusion of config.h which might happen at some
-# places, we add the usual double inclusion protection.
+# places, we add the usual double inclusion protection at the top of
+# config.h.
+#
 AH_TOP([
 #ifndef GNUPG_CONFIG_H_INCLUDED
 #define GNUPG_CONFIG_H_INCLUDED
 ])
 
+#
+# Stuff which goes at the bottom of config.h.
+#
 AH_BOTTOM([
+/* This is the major version number of GnuPG so that
+   source included files can test for this.  Note, that
+   we use 2 here even for GnuPG 1.9.x. */
+#define GNUPG_MAJOR_VERSION 2
+
+/* Now to separate file name parts.
+   Please note that the string version must not contain more
+   than one character because the code assumes strlen()==1 */
+#ifdef HAVE_DOSISH_SYSTEM
+#define DIRSEP_C '\\'
+#define DIRSEP_S "\\"
+#define EXTSEP_C '.'
+#define EXTSEP_S "."
+#define PATHSEP_C ';'
+#define PATHSEP_S ";"
+#define EXEEXT_S ".exe"
+#else
+#define DIRSEP_C '/'
+#define DIRSEP_S "/"
+#define EXTSEP_C '.'
+#define EXTSEP_S "."
+#define PATHSEP_C ':'
+#define PATHSEP_S ":"
+#define EXEEXT_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 '-'
+
+/* Some global constants. */
+#ifdef HAVE_DRIVE_LETTERS
+#define GNUPG_DEFAULT_HOMEDIR "c:/gnupg"
+#elif defined(__VMS)
+#define GNUPG_DEFAULT_HOMEDIR "/SYS\$LOGIN/gnupg" 
+#else
+#define GNUPG_DEFAULT_HOMEDIR "~/.gnupg"
+#endif 
+#define GNUPG_PRIVATE_KEYS_DIR "private-keys-v1.d"
+
+/* For some systems (DOS currently), we hardcode the path here.  For
+   POSIX systems the values are constructed by the Makefiles, so that
+   the values may be overridden by the make invocations; this is to
+   comply with the GNU coding standards. */
+#ifdef HAVE_DRIVE_LETTERS
+ /* FIXME: We need to use a function to determine these values depending 
+    on the actual installation directory. */
+#define GNUPG_BINDIR      "c:\\gnupg"
+#define GNUPG_LIBEXECDIR  "c:\\gnupg"
+#define GNUPG_LIBDIR      "c:\\gnupg"
+#define GNUPG_DATADIR     "c:\\gnupg"
+#define GNUPG_SYSCONFDIR  "c:\\gnupg"
+#endif
+
+/* Derive some other constants. */
 #if !(defined(HAVE_FORK) && defined(HAVE_PIPE) && defined(HAVE_WAITPID))
 #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"
+/* We didn't define endianness above, so get it from OS macros.  This
+   is intended for making fat binary builds on OS X. */
+#if !defined(BIG_ENDIAN_HOST) && !defined(LITTLE_ENDIAN_HOST)
+#if defined(__BIG_ENDIAN__)
+#define BIG_ENDIAN_HOST 1
+#elif defined(__LITTLE_ENDIAN__)
+#define LITTLE_ENDIAN_HOST 1
+#else
+#error "No endianness found"
+#endif
+#endif
+
+
+/* Hack used for W32: ldap.m4 also tests for the ASCII version of
+   ldap_start_tls_s because that is the actual symbol used in the
+   library.  winldap.h redefines it to our commonly used value,
+   thus we define our usual macro here.  */
+#ifdef HAVE_LDAP_START_TLS_SA
+# ifndef HAVE_LDAP_START_TLS_S
+#  define HAVE_LDAP_START_TLS_S 1
+# endif
+#endif
+
+
+/* Tell libgcrypt not to use its own libgpg-error implementation. */
+#define USE_LIBGPG_ERROR 1
+
+/* We use jnlib, so tell other modules about it.  */
+#define HAVE_JNLIB_LOGGING 1
+
+/* Our HTTP code is used in estream mode.  */
+#define HTTP_USE_ESTREAM 1
+
+/* Under W32 we do an explicit socket initialization, thus we need to
+   avoid the on-demand initialization which would also install an atexit
+   handler.  */
+#define HTTP_NO_WSASTARTUP
+
+/* We always include support for the OpenPGP card.  */
+#define ENABLE_CARD_SUPPORT 1
+
+/* We don't want the old assuan codes anymore. */
+#define _ASSUAN_ONLY_GPG_ERRORS 1
+
+/* We explicitly need to disable PTH's soft mapping as Debian
+   currently enables it by default for no reason. */
+#define PTH_SYSCALL_SOFT 0
+
+/* We want to use the libgcrypt provided memory allocation for
+   asprintf.  */
+#define _ESTREAM_PRINTF_MALLOC        gcry_malloc
+#define _ESTREAM_PRINTF_FREE          gcry_free
+#define _ESTREAM_PRINTF_EXTRA_INCLUDE "util.h"
 
 #endif /*GNUPG_CONFIG_H_INCLUDED*/
 ])
 
-AM_MAINTAINER_MODE
 
-dnl Checks for programs.
+AM_MAINTAINER_MODE
 
+# Checks for programs.
+AC_MSG_NOTICE([checking for programs])
 AC_PROG_MAKE_SET
 AM_SANITY_CHECK
 missing_dir=`cd $ac_aux_dir && pwd`
@@ -437,26 +462,46 @@ AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_PROG_AWK
 AC_PROG_CC
 AC_PROG_CPP
+AM_PROG_CC_C_O
+if test "x$ac_cv_prog_cc_c89" = "xno" ; then
+  AC_MSG_ERROR([[No C-89 compiler found]])
+fi
+AC_PROG_INSTALL
+AC_PROG_LN_S
 AC_PROG_RANLIB
 AC_CHECK_TOOL(AR, ar, :)
 AC_PATH_PROG(PERL,"perl")
+AC_CHECK_TOOL(WINDRES, windres, :)
 AC_ISC_POSIX
+gl_EARLY
 AC_SYS_LARGEFILE
-AC_PROG_INSTALL
-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)
 GNUPG_CHECK_FAQPROG
-GNUPG_CHECK_DOCBOOK_TO_TEXI
 GNUPG_CHECK_USTAR
 
-MPI_OPT_FLAGS=""
+# We need to compile and run a program on the build machine.  A
+# comment in libgpg-error says that the AC_PROG_CC_FOR_BUILD macro in
+# the AC archive is broken for autoconf 2.57.  Given that tehre is no
+# newer version of that macro, we assume that it is also broken for
+# autoconf 2.61 and thus we use a simple but usually sufficient
+# approach.
+AC_MSG_CHECKING(for cc for build)
+if test "$cross_compiling" = "yes"; then
+  CC_FOR_BUILD="${CC_FOR_BUILD-cc}"
+else
+  CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
+fi
+AC_MSG_RESULT($CC_FOR_BUILD)
+AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler])
+
+
 
 try_gettext=yes
 have_dosish_system=no
-need_dlopen=yes
+have_w32_system=no
+use_simple_gettext=no
 case "${host}" in
     *-mingw32*)
         # special stuff for Windoze NT
@@ -469,13 +514,11 @@ case "${host}" in
                   [because the Unix gettext has too much overhead on
                    MingW32 systems and these systems lack Posix functions,
                    we use a simplified version of gettext])
-        AC_DEFINE(HAVE_W32_SYSTEM,1,
-                  [Defined if we run on a W32 API based system])
         disable_keyserver_path=yes
         have_dosish_system=yes
-        need_dlopen=no
+        have_w32_system=yes
         try_gettext="no"
-        agent_support=no
+       use_simple_gettext=yes
         ;;
     i?86-emx-os2 | i?86-*-os2*emx )
         # OS/2 with the EMX environment
@@ -483,7 +526,6 @@ case "${host}" in
         AC_DEFINE(HAVE_DRIVE_LETTERS)
         have_dosish_system=yes
         try_gettext="no"
-        agent_support=no
         ;;
 
     i?86-*-msdosdjgpp*)
@@ -492,9 +534,14 @@ case "${host}" in
         AC_DEFINE(HAVE_DRIVE_LETTERS)
         have_dosish_system=yes
         try_gettext="no"
-        agent_support=no
         ;;
 
+    *-*-freebsd*)
+       # FreeBSD
+       CPPFLAGS="$CPPFLAGS -I/usr/local/include"
+       LDFLAGS="$LDFLAGS -L/usr/local/lib"
+       ;;
+
     *-*-hpux*)
         if test -z "$GCC" ; then
             CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
@@ -509,11 +556,11 @@ case "${host}" in
         ;;
     *-dec-osf5*)
         if test -z "$GCC" ; then
-            # Use the newer compiler `-msg_disable ptrmismatch' to
+            # Use the newer compiler `-msg_disable ptrmismatch1' to
             # get rid of the unsigned/signed char mismatch warnings.
             # Using this may hide other pointer mismatch warnings, but
            # it at least lets other warning classes through
-            CFLAGS="$CFLAGS -msg_disable ptrmismatch"
+            CFLAGS="$CFLAGS -msg_disable ptrmismatch1"
         fi
         ;;
     m68k-atari-mint)
@@ -524,129 +571,306 @@ 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 
+             [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)
 
+AM_CONDITIONAL(USE_SIMPLE_GETTEXT, test x"$use_simple_gettext" = xyes)
+
+if test "$have_w32_system" = yes; then
+   AC_DEFINE(HAVE_W32_SYSTEM,1, [Defined if we run on a W32 API based system])
+fi
+AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
+
 if test "$disable_keyserver_path" = yes; then
     AC_DEFINE(DISABLE_KEYSERVER_PATH,1,
-              [define to disable exec-path for keyserver helpers])
+              [Defined to disable exec-path for keyserver helpers])
 fi
 
-AC_SUBST(MPI_OPT_FLAGS)
-GNUPG_SYS_SYMBOL_UNDERSCORE
+# (These need to go after AC_PROG_CC so that $EXEEXT is defined)
+AC_DEFINE_UNQUOTED(EXEEXT,"$EXEEXT",[The executable file extension, if any])
 
-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")
+  AC_SUBST(GPGKEYS_HKP,"gpg2keys_hkp$EXEEXT")
 fi
 
 if test x"$try_finger" = xyes ; then
-  AC_SUBST(GPGKEYS_FINGER,"gpgkeys_finger$EXEEXT")
+  AC_SUBST(GPGKEYS_FINGER,"gpg2keys_finger$EXEEXT")
+fi
+
+
+
+#
+# Checks for libraries.
+#
+AC_MSG_NOTICE([checking for libraries])
+
+
+#
+# libgpg-error is a library with error codes shared between GnuPG
+# related projects.
+#
+AM_PATH_GPG_ERROR("$NEED_GPG_ERROR_VERSION",
+                  have_gpg_error=yes,have_gpg_error=no)
+
+
+#
+# Libgcrypt is our generic crypto library
+#
+AM_PATH_LIBGCRYPT("$NEED_LIBGCRYPT_API:$NEED_LIBGCRYPT_VERSION",
+        have_libgcrypt=yes,have_libgcrypt=no)
+
+
+#
+# libassuan is used for IPC
+#
+AM_PATH_LIBASSUAN("$NEED_LIBASSUAN_API:$NEED_LIBASSUAN_VERSION",
+                  have_libassuan=yes,have_libassuan=no)
+if test "$have_libassuan" = "yes"; then
+  have_libassuan=no
+  AM_PATH_LIBASSUAN_PTH("$NEED_LIBASSUAN_API:$NEED_LIBASSUAN_VERSION",
+                        have_libassuan=yes,have_libassuan=no)
+  AM_CHECK_LIBASSUAN("$NEED_LIBASSUAN_API:1.0.1",
+       [AC_DEFINE(HAVE_ASSUAN_SET_IO_MONITOR, 1,
+         [Define to 1 if you have the `assuan_set_io_monitor' function.])],)  
+  AC_DEFINE_UNQUOTED(GNUPG_LIBASSUAN_VERSION, "$libassuan_version",
+            [version of the libbassuan library])
+fi
+
+
+
+#
+# libksba is our X.509 support library
+#
+AM_PATH_KSBA("$NEED_KSBA_API:$NEED_KSBA_VERSION",have_ksba=yes,have_ksba=no)
+
+
+#
+# libusb allows us to use the integrated CCID smartcard reader driver.
+#
+# FiXME: Use GNUPG_CHECK_LIBUSB and modify to use separate AC_SUBSTs.
+AC_CHECK_LIB(usb, usb_bulk_write,
+              [ LIBUSB_LIBS="$LIBUSB_LIBS -lusb"
+                AC_DEFINE(HAVE_LIBUSB,1,
+                         [defined if libusb is available])
+                have_libusb=yes
+             ])
+AC_SUBST(LIBUSB_LIBS)
+AC_CHECK_FUNCS(usb_create_match)
+
+#
+# Check wether it is necessary to link against libdl.
+#
+gnupg_dlopen_save_libs="$LIBS"
+LIBS=""
+AC_SEARCH_LIBS(dlopen, c dl,,,)
+DL_LIBS=$LIBS
+AC_SUBST(DL_LIBS)
+LIBS="$gnupg_dlopen_save_libs"
+
+#
+# Checks for symcryptrun:
+#
+
+# libutil has openpty() and login_tty().
+AC_CHECK_LIB(util, openpty,
+              [ LIBUTIL_LIBS="$LIBUTIL_LIBS -lutil"
+                AC_DEFINE(HAVE_LIBUTIL,1,
+                         [defined if libutil is available])
+             ])
+AC_SUBST(LIBUTIL_LIBS)
+
+# shred is used to clean temporary plain text files.
+AC_PATH_PROG(SHRED, shred, /usr/bin/shred)
+AC_DEFINE_UNQUOTED(SHRED,
+       "${SHRED}", [defines the filename of the shred program])
+
+
+
+#
+# Check whether the GNU Pth library is available
+# Note, that we include a Pth emulation for W32.
+#
+GNUPG_PATH_PTH
+if test "$have_pth" = "yes"; then
+  AC_DEFINE(USE_GNU_PTH, 1,
+              [Defined if the GNU Portable Thread Library should be used])
+else
+  AC_MSG_WARN([[
+***
+*** To support concurrent access to the gpg-agent and the SCdaemon
+*** we need the support of the GNU Portable Threads Library.
+*** Download it from ftp://ftp.gnu.org/gnu/pth/
+*** On a Debian GNU/Linux system you might want to try 
+***   apt-get install libpth-dev
+***]])
 fi
 
-dnl Must check for network library requirements before doing link tests
-dnl for ldap, for example. If ldap libs are static (or dynamic and without
-dnl ELF runtime link paths), then link will fail and LDAP support won't
-dnl be detected.
 
+AC_MSG_NOTICE([checking for networking options])
+
+#
+# Must check for network library requirements before doing link tests
+# for ldap, for example. If ldap libs are static (or dynamic and without
+# ELF runtime link paths), then link will fail and LDAP support won't
+# be detected.
+#
 AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname,
        [NETLIBS="-lnsl $NETLIBS"]))
 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 and our 
-dnl PKA feature.
+#
+# Now try for the resolver functions so we can use DNS for SRV, PA and CERT.
+#
+if test x"$try_hkp" = xyes || test x"$try_http" = xyes ; then
+  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)
+fi
+
+AC_ARG_ENABLE(dns-pka,
+   AC_HELP_STRING([--disable-dns-pka],
+       [disable the use of PKA records in DNS]),
+   use_dns_pka=$enableval,use_dns_pka=yes)
 
-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)
+AC_ARG_ENABLE(dns-cert,
+   AC_HELP_STRING([--disable-dns-cert],
+       [disable the use of CERT records in DNS]),
+   use_dns_cert=$enableval,use_dns_cert=yes)
 
-if (test x"$try_hkp" = xyes || test x"$try_http" = xyes) && test x"$use_dns_srv" = xyes ; then
-  _srv_save_libs=$LIBS
+if test x"$use_dns_pka" = xyes || test x"$use_dns_srv" = xyes \
+   || test x"$use_dns_cert" = xyes; then
+  _dns_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(__res_query,resolv bind,,have_resolver=no))
   AC_SEARCH_LIBS(dn_expand,resolv bind,,
-                 AC_SEARCH_LIBS(__dn_expand,resolv bind,,use_dns_srv=no))
+                 AC_SEARCH_LIBS(__dn_expand,resolv bind,,have_resolver=no))
   AC_SEARCH_LIBS(dn_skipname,resolv bind,,
-                 AC_SEARCH_LIBS(__dn_skipname,resolv bind,,use_dns_srv=no))
+                 AC_SEARCH_LIBS(__dn_skipname,resolv bind,,have_resolver=no))
 
-  if test x"$use_dns_srv" = xyes ; then
+  if test x"$have_resolver" != xno ; 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.
+    # enabling any code that calls it.  At some point I'll rewrite the
+    # code to use the BIND 8 resolver API.
 
+    AC_MSG_CHECKING([whether the resolver is usable])
     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)
+[[unsigned char answer[PACKETSZ];
+  res_query("foo.bar",C_IN,T_A,answer,PACKETSZ);
+  dn_skipname(0,0); 
+  dn_expand(0,0,0,0,0);
+]])],have_resolver=yes,have_resolver=no)
+    AC_MSG_RESULT($have_resolver)
+
+    # This is Apple-specific and somewhat bizarre as they changed the
+    # define in bind 8 for some reason.
+
+    if test x"$have_resolver" != xyes ; then
+       AC_MSG_CHECKING(
+             [whether I can make the resolver usable with BIND_8_COMPAT])
+       AC_LINK_IFELSE([AC_LANG_PROGRAM([#define BIND_8_COMPAT
+#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);
+  dn_skipname(0,0); dn_expand(0,0,0,0,0);
+]])],[have_resolver=yes ; need_compat=yes])
+       AC_MSG_RESULT($have_resolver)
+    fi
   fi
 
-  if test x"$use_dns_srv" = xyes ; then
-     AC_DEFINE(USE_DNS_SRV,1,[define to use DNS SRV])
-     SRVLIBS=$LIBS
-     AC_DEFINE(USE_DNS_PKA,1,[define to use our experimental DNS PKA])
-  fi
+  if test x"$have_resolver" = xyes ; then
+     DNSLIBS=$LIBS
 
-  LIBS=$_srv_save_libs
-fi
+     if test x"$use_dns_srv" = xyes ; then
+        AC_DEFINE(USE_DNS_SRV,1,[define to use DNS SRV])
+     fi
 
-AC_SUBST(SRVLIBS)
+     if test x"$use_dns_pka" = xyes ; then
+        AC_DEFINE(USE_DNS_PKA,1,[define to use our experimental DNS PKA])
+     fi
 
-# Check for LDAP
+     if test x"$use_dns_cert" = xyes ; then
+        AC_DEFINE(USE_DNS_CERT,1,[define to use DNS CERT])
+     fi
 
-if test "$try_ldap" = yes ; then
-   GNUPG_CHECK_LDAP($NETLIBS)
+     if test x"$need_compat" = xyes ; then
+        AC_DEFINE(BIND_8_COMPAT,1,[an Apple OSXism])
+     fi
+  else
+     use_dns_srv=no
+     use_dns_pka=no
+     use_dns_cert=no
+  fi
+
+  LIBS=$_dns_save_libs
 fi
 
-# Which keyserver helpers are we building?
+AC_SUBST(DNSLIBS)
 
-AC_ARG_ENABLE(old-keyserver-helpers,
-   AC_HELP_STRING([--enable-old-keyserver-helpers],[enable old keyserver helpers]),old_ks=$enableval,old_ks=no)
+AM_CONDITIONAL(USE_DNS_SRV, test x"$use_dns_srv" = xyes)
 
-if test "$old_ks" = yes ; then
-   AC_SUBST(GPGKEYS_HTTP,"gpgkeys_http$EXEEXT")
-else
-   LIBCURL_CHECK_CONFIG([yes],,[with_curl=yes],[fake_curl=yes])
-   AC_SUBST(GPGKEYS_CURL,"gpgkeys_curl$EXEEXT")
+#
+# Check for LDAP
+#
+if test "$try_ldap" = yes ; then
+   GNUPG_CHECK_LDAP($NETLIBS)
 fi
 
+#
+# Check for curl.  We fake the curl API if libcurl isn't installed.
+#
+LIBCURL_CHECK_CONFIG([yes],,,[fake_curl=yes])
 AM_CONDITIONAL(FAKE_CURL,test x"$fake_curl" = xyes)
-AM_CONDITIONAL(WITH_CURL,test x"$with_curl" = xyes || test x"$fake_curl" = xyes)
 
-if test x"$fake_curl" = xyes ; then
-   AC_DEFINE(FAKE_CURL,1,[define to fake the libcurl API internally])
-fi
+# Generic, for us, means curl
 
-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 x"$try_generic" = xyes ; then
+   AC_SUBST(GPGKEYS_CURL,"gpg2keys_curl$EXEEXT")
+fi
 
+#
+# Check for sendmail
+#
+# This isn't necessarily sendmail itself, but anything that gives a
+# sendmail-ish interface to the outside world.  That includes Exim,
+# Postfix, etc.  Basically, anything that can handle "sendmail -t".
 if test "$try_mailto" = yes ; then
-  AC_ARG_WITH(mailprog,[  --with-mailprog=NAME    use "NAME -t" for mail transport],,with_mailprog=yes)
+  AC_ARG_WITH(mailprog,
+      AC_HELP_STRING([--with-mailprog=NAME],
+                     [use "NAME -t" for mail transport]),
+             ,with_mailprog=yes)
 
-  if test "$with_mailprog" = yes ; then
+  if test x"$with_mailprog" = xyes ; then
     AC_PATH_PROG(SENDMAIL,sendmail,,$PATH:/usr/sbin:/usr/libexec:/usr/lib)
     if test "$ac_cv_path_SENDMAIL" ; then
-      GPGKEYS_MAILTO="gpgkeys_mailto"
+      GPGKEYS_MAILTO="gpg2keys_mailto"
     fi
-  elif test "$with_mailprog" != no ; then
+  elif test x"$with_mailprog" != xno ; then
     AC_MSG_CHECKING([for a mail transport program])
     AC_SUBST(SENDMAIL,$with_mailprog)
     AC_MSG_RESULT($with_mailprog)
-    GPGKEYS_MAILTO="gpgkeys_mailto"
+    GPGKEYS_MAILTO="gpg2keys_mailto"
   fi
 fi
 
 AC_SUBST(GPGKEYS_MAILTO)
 
+#
+# Construct a printable name of the OS
+#
 case "${host}" in
     *-mingw32*)
         PRINTABLE_OS_NAME="MingW32"
@@ -659,7 +883,7 @@ case "${host}" in
         ;;
     i?86-*-msdosdjgpp*)
         PRINTABLE_OS_NAME="MSDOS/DJGPP"
-        try_extensions=no
+        try_dynload=no
         ;;
     *-linux*)
         PRINTABLE_OS_NAME="GNU/Linux"
@@ -673,28 +897,19 @@ AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
 
 
 #
-# 1. Set names of random devices
+# Checking for iconv
 #
-NAME_OF_DEV_RANDOM="/dev/random"
-NAME_OF_DEV_URANDOM="/dev/urandom"
-case "${host}" in
-    *-openbsd*)
-        NAME_OF_DEV_RANDOM="/dev/srandom"
-        NAME_OF_DEV_URANDOM="/dev/urandom"
-        ;;
-esac
-AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM",
-                   [defined to the name of the strong random device])
-AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM",
-                   [defined to the name of the weaker random device])
-AC_SUBST(MPI_OPT_FLAGS)
-
+AM_ICONV
 
-dnl Checks for libraries.
 
-AM_GNU_GETTEXT_VERSION(0.14.1)
+#
+# Check for gettext
+#
+AC_MSG_NOTICE([checking for gettext])
+AM_PO_SUBDIRS
+AM_GNU_GETTEXT_VERSION([0.17])
 if test "$try_gettext" = yes; then
-  AM_GNU_GETTEXT(,[need-ngettext])
+  AM_GNU_GETTEXT([external],[need-ngettext])
 
   # gettext requires some extra checks.  These really should be part of
   # the basic AM_GNU_GETTEXT macro.  TODO: move other gettext-specific
@@ -705,74 +920,42 @@ else
   USE_NLS=no
   USE_INCLUDED_LIBINTL=no
   BUILD_INCLUDED_LIBINTL=no
+  POSUB=po
   AC_SUBST(USE_NLS)
   AC_SUBST(USE_INCLUDED_LIBINTL)
   AC_SUBST(BUILD_INCLUDED_LIBINTL)
-  AM_PO_SUBDIRS
+  AC_SUBST(POSUB)
 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
-      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
-fi
+# We use HAVE_LANGINFO_CODESET in a couple of places.
+AM_LANGINFO_CODESET
 
-AC_SUBST(DLLIBS)
+# Checks required for our use locales
+gt_LC_MESSAGES
 
-if test "$card_support" = yes ; then
-  AC_DEFINE(ENABLE_CARD_SUPPORT,1,[Define to include OpenPGP card support])
-fi
-
-if test "$agent_support" = yes ; then
-  AC_DEFINE(ENABLE_AGENT_SUPPORT,1,[Define to include gpg-agent support])
-fi
-
-if test "$try_extensions" = yes ; then
-  AC_DEFINE(USE_DYNAMIC_LINKING,1,[Define to enable the use of extensions])
-fi
 
+#
+# SELinux support
+#
 if test "$selinux_support" = yes ; then
   AC_DEFINE(ENABLE_SELINUX_HACKS,1,[Define to enable SELinux support])
 fi
 
-if test "$gnupg_use_iconv" = yes ; then
-  AC_DEFINE(USE_GNUPG_ICONV,1,[Define to use the new iconv based code])
-fi
-
-if test "$do_backsigs" = no ; then
-  AC_DEFINE(FAKE_BACKSIGS,1,[Define to fake missing backsigs])
-fi
 
-AM_CONDITIONAL(ENABLE_CARD_SUPPORT, test "$card_support" = yes)
-AM_CONDITIONAL(ENABLE_AGENT_SUPPORT, test "$agent_support" = yes)
-
-dnl Checks for header files.
+#
+# Checks for header files.
+#
+AC_MSG_NOTICE([checking for header files])
 AC_HEADER_STDC
-AC_CHECK_HEADERS([unistd.h langinfo.h termio.h locale.h getopt.h pwd.h])
+AC_CHECK_HEADERS([string.h unistd.h langinfo.h termio.h locale.h getopt.h])
+AC_CHECK_HEADERS([pty.h pwd.h inttypes.h])
+AC_HEADER_TIME
 
-# Note that we do not check for iconv here because this is done anyway
-# by the gettext checks and thus it allows us to disable the use of
-# iconv by using --disable-nls.
 
-dnl Checks for typedefs, structures, and compiler characteristics.
+#
+# Checks for typedefs, structures, and compiler characteristics.
+#
+AC_MSG_NOTICE([checking for system characteristics])
 AC_C_CONST
 AC_C_INLINE
 AC_C_VOLATILE
@@ -781,8 +964,16 @@ AC_TYPE_MODE_T
 AC_TYPE_SIGNAL
 AC_DECL_SYS_SIGLIST
 
-GNUPG_CHECK_ENDIAN
+AC_ARG_ENABLE(endian-check,
+              AC_HELP_STRING([--disable-endian-check],
+             [disable the endian check and trust the OS provided macros]),
+             endiancheck=$enableval,endiancheck=yes)
+
+if test x"$endiancheck" = xyes ; then
+  GNUPG_CHECK_ENDIAN
+fi
 
+# fixme: we should get rid of the byte type
 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
@@ -793,13 +984,27 @@ AC_CHECK_SIZEOF(unsigned short)
 AC_CHECK_SIZEOF(unsigned int)
 AC_CHECK_SIZEOF(unsigned long)
 AC_CHECK_SIZEOF(unsigned long long)
+AC_CHECK_SIZEOF(time_t,,[[
+#include <stdio.h>
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif
+]])
 
-# Ensure that we have UINT64_C before we bother to check for uint64_t
-gt_HEADER_INTTYPES_H
-AC_CACHE_CHECK([for UINT64_C], [gnupg_cv_uint64_c_works],
-               AC_COMPILE_IFELSE(AC_LANG_PROGRAM([
-uint64_t foo=UINT64_C(42);]),gnupg_cv_uint64_c_works=yes,gnupg_cv_uint64_c_works=no))
 
+# Ensure that we have UINT64_C before we bother to check for uint64_t
+# Fixme: really needed in gnupg?  I think it is only useful in libcgrypt.
+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
@@ -810,228 +1015,49 @@ 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.
+#
+# Checks for library functions.
+#
+AC_MSG_NOTICE([checking for library functions])
+AC_CHECK_DECLS(getpagesize)
 AC_FUNC_FSEEKO
 AC_FUNC_VPRINTF
 AC_FUNC_FORK
-AC_CHECK_FUNCS(strerror stpcpy strsep strlwr tcgetattr strtoul mmap)
-AC_CHECK_FUNCS(strcasecmp strncasecmp ctermid times unsetenv getpwnam getpwuid)
-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 getaddrinfo)
-AC_REPLACE_FUNCS(mkdtemp timegm isascii memrchr)
+AC_CHECK_FUNCS([strerror strlwr tcgetattr mmap])
+AC_CHECK_FUNCS([strcasecmp strncasecmp ctermid times gmtime_r])
+AC_CHECK_FUNCS([unsetenv getpwnam getpwuid fcntl ftruncate])
+AC_CHECK_FUNCS([gettimeofday getrusage setrlimit clock_gettime])
+AC_CHECK_FUNCS([atexit raise getpagesize strftime nl_langinfo setlocale])
+AC_CHECK_FUNCS([waitpid wait4 sigaction sigprocmask pipe stat getaddrinfo])
+AC_CHECK_FUNCS([ttyname rand ftello])
 
 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
-# it is broken.  It has been reported that some Solaris and HP UX systems 
-# raise an SIGILL
-#
-AC_CACHE_CHECK([for gethrtime], 
-               [gnupg_cv_func_gethrtime],
-               [AC_TRY_LINK([#include <sys/times.h>],[
-                   hrtime_t tv;
-                   tv = gethrtime();
-                 ],
-                 [gnupg_cv_func_gethrtime=yes],
-                 [gnupg_cv_func_gethrtime=no])
-               ])
-if test $gnupg_cv_func_gethrtime = yes; then
-     AC_DEFINE([HAVE_GETHRTIME], 1,
-               [Define if you have the `gethrtime(2)' function.])
-     AC_CACHE_CHECK([whether gethrtime is broken], 
-               [gnupg_cv_func_broken_gethrtime],
-               [AC_TRY_RUN([
-                   #include <sys/times.h>
-                   int main () {
-                   hrtime_t tv;
-                   tv = gethrtime(); 
-                 }
-                 ],
-                 [gnupg_cv_func_broken_gethrtime=no],
-                 [gnupg_cv_func_broken_gethrtime=yes],
-                 [gnupg_cv_func_broken_gethrtime=assume-no])
-                ])
-    if test $gnupg_cv_func_broken_gethrtime = yes; then
-      AC_DEFINE([HAVE_BROKEN_GETHRTIME], 1,
-      [Define if `gethrtime(2)' does not work correctly i.e. issues a SIGILL.])
-    fi
-fi
-     
-
-GNUPG_CHECK_MLOCK
-GNUPG_FUNC_MKDIR_TAKES_ONE_ARG
-
-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
-  AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
-  if test "$ac_cv_lib_cap_cap_init" = "yes"; then
-     AC_DEFINE(USE_CAPABILITIES,1,
-               [define if capabilities should be used])
-     AC_SUBST(CAPLIBS,"-lcap")
-     use_capabilities=yes
-  fi
-fi
-if test "$use_capabilities" = "no" ; then
-    AC_MSG_WARN([[
-***
-*** The use of capabilities on this system is not possible.
-*** You need a recent Linux kernel and some patches:
-***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
-***   fcap-module-990613.tar.gz     (kernel module)
-***   libcap-1.92.tar.gz            (user mode library and utilities)
-*** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
-*** set (filesystems menu). Be warned: This code is *really* ALPHA.
-***]])
-fi
-fi
-
-
-GNUPG_CHECK_IPC
-if test "$ac_cv_header_sys_shm_h" = "yes"; then
-  AC_DEFINE(USE_SHM_COPROCESSING,1,
-            [define if the shared memory interface should be made available])
-fi
-
-dnl
-dnl check whether we have a random device
-dnl
-if test "$try_dev_random" = yes ; then
-    AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
-    [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
-      ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
-    if test "$ac_cv_have_dev_random" = yes; then
-        AC_DEFINE(HAVE_DEV_RANDOM,1,
-                 [defined if the system supports a random device] )
-    fi
-else
-    AC_MSG_CHECKING(for random device)
-    ac_cv_have_dev_random=no
-    AC_MSG_RESULT(has been disabled)
-fi
+#
+# These are needed by libjnlib - fixme: we should use a jnlib.m4
+#
+AC_CHECK_FUNCS([memicmp stpcpy strsep strlwr strtoul memmove stricmp strtol])
+AC_CHECK_FUNCS([memrchr isascii timegm getrusage setrlimit stat setlocale])
+AC_CHECK_FUNCS([flockfile funlockfile fopencookie funopen])
 
+#
+# gnulib checks
+#
+gl_SOURCE_BASE([gl])
+gl_M4_BASE([gl/m4])
+gl_MODULES([setenv mkdtemp xsize strpbrk])
+gl_INIT
 
-dnl
-dnl Figure out the default random module.
-dnl
-random_modules=""
-if test "$use_static_rnd" = default; then
-     if test "$ac_cv_have_dev_random" = yes; then
-        random_modules="rndlinux"
-     else
-         case "${host}" 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" = auto; then
-     random_modules="rndlinux rndegd rndunix"
-     AC_DEFINE(USE_ALL_RANDOM_MODULES, 1)
-  else
-     random_modules="rnd$use_static_rnd";
-  fi
-fi
 
-if test -z "$random_modules"; then
-   AC_MSG_ERROR(no random module available)
-fi
-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
-
-dnl setup assembler stuff
-AC_MSG_CHECKING(for mpi assembler functions)
-if test -f $srcdir/mpi/config.links ; then
-    . $srcdir/mpi/config.links
-    AC_CONFIG_LINKS("$mpi_ln_list")
-    ac_cv_mpi_extra_asm_modules="$mpi_extra_modules"
-    ac_cv_mpi_sflags="$mpi_sflags"
-    ac_cv_mpi_config_done="yes"
-    AC_MSG_RESULT(done)
-else
-    AC_MSG_RESULT(failed)
-    AC_MSG_ERROR([mpi/config.links missing!])
-fi
-MPI_EXTRA_ASM_OBJS=""
-show_extraasm=""
-if test "$ac_cv_mpi_extra_asm_modules" != ""; then
-for i in $ac_cv_mpi_extra_asm_modules; do
-    show_extraasm="$show_extraasm $i"
-    MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o"
-done
-fi
-AC_SUBST(MPI_EXTRA_ASM_OBJS)
-MPI_SFLAGS="$ac_cv_mpi_sflags"
-AC_SUBST(MPI_SFLAGS)
+#
+# W32 specific test
+#
+GNUPG_FUNC_MKDIR_TAKES_ONE_ARG
 
+#
 # Sanity check regex.  Tests adapted from mutt.
-
+#
 AC_MSG_CHECKING([whether regular expression support is requested])
 AC_ARG_ENABLE(regex,
   AC_HELP_STRING([--disable-regex],
@@ -1040,20 +1066,28 @@ AC_ARG_ENABLE(regex,
 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="$withval"],[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
+  _cppflags="${CPPFLAGS}"
+  _ldflags="${LDFLAGS}"
+  AC_ARG_WITH(regex,
+     AC_HELP_STRING([--with-regex=DIR],[look for regex in DIR]),
+      [
+      if test -d "$withval" ; then
+        CPPFLAGS="${CPPFLAGS} -I$withval/include"
+        LDFLAGS="${LDFLAGS} -L$withval/lib"
+      fi
+      ],withval="")     
 
-  if test $gnupg_cv_included_regex = no ; then
-     AC_CACHE_CHECK([whether your system's regexp library is broken],
+  # Does the system have regex functions at all?
+  AC_SEARCH_LIBS([regcomp], [regex])
+  AC_CHECK_FUNC(regcomp, gnupg_cv_have_regex=yes, gnupg_cv_have_regex=no)
+
+  if test $gnupg_cv_have_regex = no; then
+    use_regex=no
+  else
+    if test x"$cross_compiling" = xyes; then
+      AC_MSG_WARN([cross compiling; assuming regexp libray is not broken])
+    else
+      AC_CACHE_CHECK([whether your system's regexp library is broken],
        [gnupg_cv_regex_broken],
        AC_TRY_RUN([
 #include <unistd.h>
@@ -1061,31 +1095,31 @@ if test "$use_regex" = yes ; then
 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)
+      if test $gnupg_cv_regex_broken = yes; then
+        AC_MSG_WARN([your regex is broken - disabling regex use])
+        use_regex=no
+      fi
+    fi
   fi
-else
+  CPPFLAGS="${_cppflags}"
+  LDFLAGS="${_ldflags}"
+fi
 
-  AC_DEFINE(DISABLE_REGEX,1,[ Define to disable regular expression support ])
+if test "$use_regex" != yes ; then
+  AC_DEFINE(DISABLE_REGEX,1, [Define to disable regular expression support])
 fi
+AM_CONDITIONAL(DISABLE_REGEX, test x"$use_regex" != xyes)
+
 
-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
-if test "$g10_force_zlib" = "yes"; then
-  :
-else
-  _cppflags="${CPPFLAGS}"
-  _ldflags="${LDFLAGS}"
 
-  AC_ARG_WITH(zlib,
+#
+# Do we have zlib? Must do it here because Solaris failed
+# when compiling a conftest (due to the "-lz" from LIBS).
+# Note that we combine zlib and bzlib2 in ZLIBS.
+#
+_cppflags="${CPPFLAGS}"
+_ldflags="${LDFLAGS}"
+AC_ARG_WITH(zlib,
   [  --with-zlib=DIR         use libz in DIR],[
     if test -d "$withval"; then
       CPPFLAGS="${CPPFLAGS} -I$withval/include"
@@ -1093,22 +1127,15 @@ else
     fi
   ])
 
-  AC_CHECK_HEADER(zlib.h,
+AC_CHECK_HEADER(zlib.h,
       AC_CHECK_LIB(z, deflateInit2_,
-       use_local_zlib=no
        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)
-fi
 
+#
+# Check whether we can support bzip2
+# 
 if test "$use_bzip2" = yes ; then
   _cppflags="${CPPFLAGS}"
   _ldflags="${LDFLAGS}"
@@ -1121,10 +1148,9 @@ if test "$use_bzip2" = yes ; then
       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.
-
+  # 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,
@@ -1138,19 +1164,18 @@ if test "$use_bzip2" = yes ; then
          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.
-GNUPG_CHECK_LIBUSB
 
 # Check for readline support
 GNUPG_CHECK_READLINE
 
+#
 # 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. 
+#
 if test "$development_version" != yes; then
   changequote(,)dnl
   tmp_pat='[a-zA-Z]'
 
 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
 
+GNUPG_CHECK_GNUMAKE
 
-# add some extra libs here so that previous tests don't fail for
-# mysterious reasons - the final link step should bail out. 
-case "${host}" in
-    *-mingw32*)
-dnl      NETLIBS="$NETLIBS -lwsock32"
-       W32LIBS="-lwsock32"
-        ;;
-    *)
-       ;;
-esac
+# Add some extra libs here so that previous tests don't fail for
+# mysterious reasons - the final link step should bail out.
+# W32SOCKLIBS is also defined so that if can be used for tools not
+# requiring any network stuff but linking to code in libcommon which
+# tracks in winsock stuff (e.g. init_common_subsystems.
+if test "$have_w32_system" = yes; then
+   W32SOCKLIBS="-lws2_32"
+   NETLIBS="${NETLIBS} ${W32SOCKLIBS}"
+fi
 
 AC_SUBST(NETLIBS)
-AC_SUBST(W32LIBS)
+AC_SUBST(W32SOCKLIBS)
 
-# Special options used with gcc.
+#
+# Setup gcc specific options
+#
+AC_MSG_NOTICE([checking for cc features])
 if test "$GCC" = yes; then
     # Note that it is okay to use CFLAGS here because this are just
     # warning options and the user should have a chance of overriding
-    #them.
+    # them.
     if test "$USE_MAINTAINER_MODE" = "yes"; then
         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
-        CFLAGS="$CFLAGS -Wformat-nonliteral"
+        CFLAGS="$CFLAGS -Wformat -Wno-format-y2k -Wformat-security"
     else
         CFLAGS="$CFLAGS -Wall"
     fi
 
     AC_MSG_CHECKING([if gcc supports -Wno-pointer-sign])
-
     _gcc_cflags_save=$CFLAGS
     CFLAGS="-Wno-pointer-sign"
-
     AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),_gcc_psign=yes,_gcc_psign=no)
     AC_MSG_RESULT($_gcc_psign)
-
     CFLAGS=$_gcc_cflags_save;
-
     if test x"$_gcc_psign" = xyes ; then
        CFLAGS="$CFLAGS -Wno-pointer-sign"
     fi
 
-    # Non exec stack hack.  Fixme: Write a test to check whether as
-    # can cope with it and use the enable-noexecstack option only to
-    # disable it in case it is required on sime platforms.
-    if test "$noexecstack_support" = yes; then
-        NOEXECSTACK_FLAGS="-Wa,--noexecstack"
+    AC_MSG_CHECKING([if gcc supports -Wpointer-arith])
+    _gcc_cflags_save=$CFLAGS
+    CFLAGS="-Wpointer-arith"
+    AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),_gcc_psign=yes,_gcc_psign=no)
+    AC_MSG_RESULT($_gcc_psign)
+    CFLAGS=$_gcc_cflags_save;
+    if test x"$_gcc_psign" = xyes ; then
+       CFLAGS="$CFLAGS -Wpointer-arith"
     fi
 fi
-AC_SUBST(NOEXECSTACK_FLAGS)
 
 
-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)
+#
+# This is handy for debugging so the compiler doesn't rearrange
+# things and eliminate variables.
+#
+AC_ARG_ENABLE(optimization,
+   AC_HELP_STRING([--disable-optimization],
+                  [disable compiler optimization]),
+                  [if test $enableval = no ; then
+                      CFLAGS=`echo $CFLAGS | sed 's/-O[[0-9]]//'`
+                   fi])
+
+#
+# Prepare building of estream
+#
+estream_INIT
+
+
+#
+# Decide what to build
+#
+missing_pth=no
+if test $have_ksba = no; then
+  build_gpgsm=no
+  build_scdaemon=no
+fi
+
+build_agent_threaded=""
+if test "$build_agent" = "yes"; then
+  if test $have_pth = no; then
+     build_agent_threaded="(not multi-threaded)"
+     missing_pth=yes
+  fi
+fi
+
+build_scdaemon_extra=""
+if test "$build_scdaemon" = "yes"; then
+  tmp=""
+  if test $have_pth = no; then
+     build_scdaemon_extra="not multi-threaded"
+     tmp=", "
+     missing_pth=yes
+  fi
+  if test $have_libusb = no; then
+     build_scdaemon_extra="${tmp}without internal CCID driver"
+     tmp=", "
+  fi
+  if test -n "$build_scdaemon_extra"; then
+     build_scdaemon_extra="(${build_scdaemon_extra})"
+  fi
+fi
+
+
+if test "$build_agent_only" = "yes" ; then
+  build_gpg=no
+  build_gpgsm=no
+  build_scdaemon=no
+  build_tools=no
+  build_doc=no
+fi
+
+
+AM_CONDITIONAL(BUILD_GPG,   test "$build_gpg" = "yes")
+AM_CONDITIONAL(BUILD_GPGSM, test "$build_gpgsm" = "yes")
+AM_CONDITIONAL(BUILD_AGENT, test "$build_agent" = "yes")
+AM_CONDITIONAL(BUILD_SCDAEMON, test "$build_scdaemon" = "yes")
+AM_CONDITIONAL(BUILD_TOOLS, test "$build_tools" = "yes")
+AM_CONDITIONAL(BUILD_DOC,   test "$build_doc" = "yes")
+AM_CONDITIONAL(BUILD_SYMCRYPTRUN, test "$build_symcryptrun" = "yes")
+
+AM_CONDITIONAL(RUN_GPG_TESTS,
+       test x$cross_compiling = xno -a "$build_gpg" = yes )
+
+
+#
+# Print errors here so that they are visible all
+# together and the user can acquire them all together.
+#
+die=no
+if test "$have_gpg_error" = "no"; then
+   die=yes
+   AC_MSG_NOTICE([[
+***  
+*** You need libgpg-error to build this program.
+**  This library is for example available at
+***   ftp://ftp.gnupg.org/gcrypt/libgpg-error
+*** (at least version $NEED_GPG_ERROR_VERSION is required.)
+***]])
+fi
+if test "$have_libgcrypt" = "no"; then
+   die=yes
+   AC_MSG_NOTICE([[
+***  
+*** You need libgcrypt to build this program.
+**  This library is for example available at
+***   ftp://ftp.gnupg.org/gcrypt/libgcrypt/
+*** (at least version $NEED_LIBGCRYPT_VERSION using API $NEED_LIBGCRYPT_API is required.)
+***]])
+fi
+if test "$have_libassuan" = "no"; then
+   die=yes
+   AC_MSG_NOTICE([[
 ***
-*** 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:
+*** You need libassuan with Pth support to build this program.
+*** This library is for example available at
+***   ftp://ftp.gnupg.org/gcrypt/libassuan/
+*** (at least version $NEED_LIBASSUAN_VERSION (API $NEED_LIBASSUAN_API) is required).
+***]])
+fi
+if test "$have_ksba" = "no"; then
+    AC_MSG_NOTICE([[
 ***
-***           http://www.gnupg.org/download/#EGD
+*** You need libksba to build this program.
+*** This library is for example available at
+***   ftp://ftp.gnupg.org/gcrypt/libksba/
+*** (at least version $NEED_KSBA_VERSION using API $NEED_KSBA_API is required).
+***]])
+fi
+if test "$missing_pth" = "yes"; then
+    AC_MSG_NOTICE([[
 ***
-*** You may want to run ./configure with --enable-static-rnd=egd or
-*** --enable-static-rnd=auto to use it.
+*** It is now required to build with support for the
+*** GNU Portable Threads Library (Pth). Please install this
+*** library first.  The library is for example available at
+***   ftp://ftp.gnu.org/gnu/pth/
+*** On a Debian GNU/Linux system you can install it using 
+***   apt-get install libpth-dev
+*** To build GnuPG for Windows you need to use the W32PTH
+*** package; available at:
+***   ftp://ftp.g10code.com/g10code/w32pth/
 ***]])
+   die=yes
 fi
 
-# Note the \\\\ for backslashes.  Autoconf eats one layer, leaving \\
-
-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_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 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
-   than one character because the using code assumes strlen()==1 */
-#ifdef HAVE_DOSISH_SYSTEM
-#define DIRSEP_C '\\\\'
-#define EXTSEP_C '.'
-#define DIRSEP_S "\\\\"
-#define EXTSEP_S "."
-#define PATHSEP_C ';'
-#define PATHSEP_S ";"
-#else
-#define DIRSEP_C '/'
-#define EXTSEP_C '.'
-#define DIRSEP_S "/"
-#define EXTSEP_S "."
-#define PATHSEP_C ':'
-#define PATHSEP_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
-    echo "g10defs.h is unchanged"
-    rm -f g10defs.tmp
-else
-    rm -f g10defs.h
-    mv g10defs.tmp g10defs.h
-    echo "g10defs.h created"
+if test "$die" = "yes"; then
+    AC_MSG_ERROR([[
+***
+*** Required libraries not found. Please consult the above messages
+*** and install them before running configure again.
+***]])
 fi
-]],[[
-prefix=$prefix
-exec_prefix=$exec_prefix
-libdir=$libdir
-libexecdir=$libexecdir
-datadir=$datadir
-DATADIRNAME=$DATADIRNAME
-]])
 
 
-AC_CONFIG_FILES([
+
+AC_CONFIG_FILES([ m4/Makefile 
 Makefile
-m4/Makefile
-intl/Makefile
 po/Makefile.in
-util/Makefile
-mpi/Makefile
-cipher/Makefile
+gl/Makefile
+include/Makefile
+jnlib/Makefile
+common/Makefile
+kbx/Makefile
 g10/Makefile
+sm/Makefile
+agent/Makefile
+scd/Makefile
 keyserver/Makefile
-keyserver/gpgkeys_mailto
-keyserver/gpgkeys_test
-doc/Makefile
-tools/Makefile
+keyserver/gpg2keys_mailto
+keyserver/gpg2keys_test
 tools/gpg-zip
-zlib/Makefile
-checks/Makefile
+tools/Makefile
+doc/Makefile
+tests/Makefile
+tests/openpgp/Makefile
+tests/pkits/Makefile
 ])
 AC_OUTPUT
 
-# Give some feedback
-echo
-echo   "                Configured for: $PRINTABLE_OS_NAME ($host)"
-if test -n "$show_extraasm"; then
-  echo "  Extra cpu specific functions:$show_extraasm"
+
+echo "
+        GnuPG v${VERSION} has been configured as follows:
+        
+        Platform:  $PRINTABLE_OS_NAME ($host)
+
+        OpenPGP:   $build_gpg
+        S/MIME:    $build_gpgsm
+        Agent:     $build_agent $build_agent_threaded
+        Smartcard: $build_scdaemon $build_scdaemon_extra
+
+        Protect tool:      $show_gnupg_protect_tool_pgm
+        Default agent:     $show_gnupg_agent_pgm
+        Default pinentry:  $show_gnupg_pinentry_pgm
+        Default scdaemon:  $show_gnupg_scdaemon_pgm
+        Default dirmngr:   $show_gnupg_dirmngr_pgm
+"
+if test x"$use_regex" != xyes ; then
+echo "
+        Warning: No regular expression support available.
+                 OpenPGP trust signatures won't work.
+                 gpg-check-pattern will not be build.
+"
+fi
+if test  x"$use_camellia" = xyes ; then
+  echo
+  echo "WARNING: The Camellia cipher for gpg is for testing only"
+  echo "         and is NOT for production use!"
+  echo
 fi
-echo
+