Moved random stuff into its own directory.
[libgcrypt.git] / configure.ac
index f2467e5..c81903f 100644 (file)
@@ -1,11 +1,11 @@
 # Configure.ac script for Libgcrypt
 # Configure.ac script for Libgcrypt
-# Copyright (C) 1998, 1999, 2000, 2001,
-#               2002, 2003 Free Software Foundation, Inc.
+# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006,
+#               2007, 2008 Free Software Foundation, Inc.
 #
 # This file is part of Libgcrypt.
 #
 # Libgcrypt is free software; you can redistribute it and/or modify
 #
 # This file is part of Libgcrypt.
 #
 # Libgcrypt is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Lesser general Public License as
+# it under the terms of the GNU Lesser General Public License as
 # published by the Free Software Foundation; either version 2.1 of
 # the License, or (at your option) any later version.
 #
 # published by the Free Software Foundation; either version 2.1 of
 # the License, or (at your option) any later version.
 #
 # GNU Lesser General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public
 # GNU Lesser General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-#
-# (Process this file with autoconf to produce a configure script.)
-AC_REVISION($Revision$)dnl
+# License along with this program; if not, see <http://www.gnu.org/licenses/>.
 
 
-AC_PREREQ(2.52)
-# Version number: Remember to change it immediately *after* a release but
-# remove a "-cvs" prefix right *before* a release and append it soon later.
-AC_INIT(libgcrypt, 1.1.13-cvs, bug-libgcrypt@gnupg.org)
+# (Process this file with autoconf to produce a configure script.)
+AC_REVISION($Revision$)
+AC_PREREQ(2.60)
+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], [1.4.2])
+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([libgcrypt], 
+        [my_version[]m4_if(my_issvn,[yes],[-svn[]svn_revision])],
+        [bug-libgcrypt@gnupg.org])
 # LT Version numbers, remember to change them just *before* a release.
 #   (Interfaces removed:    CURRENT++, AGE=0, REVISION=0)
 #   (Interfaces added:      CURRENT++, AGE++, REVISION=0)
 #   (No interfaces changed:                   REVISION++)
 # LT Version numbers, remember to change them just *before* a release.
 #   (Interfaces removed:    CURRENT++, AGE=0, REVISION=0)
 #   (Interfaces added:      CURRENT++, AGE++, REVISION=0)
 #   (No interfaces changed:                   REVISION++)
-LIBGCRYPT_LT_CURRENT=6
-LIBGCRYPT_LT_AGE=5
-LIBGCRYPT_LT_REVISION=1
-#-----------------------
+LIBGCRYPT_LT_CURRENT=15
+LIBGCRYPT_LT_AGE=4
+LIBGCRYPT_LT_REVISION=4
+
 
 
+# If the API is changed in an incompatible way: increment the next counter.
+LIBGCRYPT_CONFIG_API_VERSION=1
+
+NEED_GPG_ERROR_VERSION=1.4
+
+is_development_version=my_issvn
+BUILD_REVISION=svn_revision
 PACKAGE=$PACKAGE_NAME
 VERSION=$PACKAGE_VERSION
 
 PACKAGE=$PACKAGE_NAME
 VERSION=$PACKAGE_VERSION
 
-AC_CONFIG_SRCDIR([src/gcrypt.h])
-AC_CONFIG_AUX_DIR(scripts)
-AC_CANONICAL_TARGET()
+AC_CONFIG_SRCDIR([src/libgcrypt.vers])
 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
 AM_CONFIG_HEADER(config.h)
 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
 AM_CONFIG_HEADER(config.h)
+AC_CANONICAL_HOST
+AM_MAINTAINER_MODE
 
 AH_TOP([
 
 AH_TOP([
+#ifndef _GCRYPT_CONFIG_H_INCLUDED
+#define _GCRYPT_CONFIG_H_INCLUDED
 /* need this, because some autoconf tests rely on this (e.g. stpcpy)
  * and it should be used for new programs  */
 #define _GNU_SOURCE  1
 ])
 
 /* need this, because some autoconf tests rely on this (e.g. stpcpy)
  * and it should be used for new programs  */
 #define _GNU_SOURCE  1
 ])
 
-
 AH_BOTTOM([
 AH_BOTTOM([
-#include "gcrypt-defs.h"
 #define _GCRYPT_IN_LIBGCRYPT 1
 #define _GCRYPT_IN_LIBGCRYPT 1
+
+/* If the configure check for endianness has been disabled, get it from
+   OS macros.  This is intended for making fat binary builds on OS X.  */
+#ifdef DISABLED_ENDIAN_CHECK
+# if defined(__BIG_ENDIAN__)
+#  define WORDS_BIGENDIAN 1
+# elif defined(__LITTLE_ENDIAN__)
+#  undef WORDS_BIGENDIAN
+# else
+#  error "No endianness found"
+# endif
+#endif /*DISABLED_ENDIAN_CHECK*/
+
+/* We basically use the original Camellia source.  Make sure the symbols 
+   properly prefixed.  */
+#define CAMELLIA_EXT_SYM_PREFIX _gcry_
+
+
+#endif /*_GCRYPT_CONFIG_H_INCLUDED*/
 ])
 
 AH_VERBATIM([_REENTRANT],
 ])
 
 AH_VERBATIM([_REENTRANT],
@@ -60,8 +95,8 @@ AH_VERBATIM([_REENTRANT],
     special features from the library. */
 #ifndef _REENTRANT
 # define _REENTRANT 1
     special features from the library. */
 #ifndef _REENTRANT
 # define _REENTRANT 1
-#endif])
-
+#endif
+])
 
 
 AC_SUBST(LIBGCRYPT_LT_CURRENT)
 
 
 AC_SUBST(LIBGCRYPT_LT_CURRENT)
@@ -72,28 +107,212 @@ AC_SUBST(VERSION)
 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
 
 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
 
+
+######################
+##  Basic checks.  ### (we need some results later on (e.g. $GCC)
+######################
+
+AC_PROG_MAKE_SET
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+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_CC
+AC_PROG_CPP
+AM_PROG_CC_C_O
+AM_PROG_AS
+AC_ISC_POSIX
+AC_PROG_INSTALL
 AC_PROG_AWK
 
 AC_PROG_AWK
 
-dnl Definitions for symmetric ciphers.
-available_ciphers="arcfour blowfish cast5 des aes twofish"
-default_ciphers="$available_ciphers"
+AC_LIBTOOL_WIN32_DLL
+AC_LIBTOOL_RC
+AM_PROG_LIBTOOL
+
+
+##########################
+## General definitions. ##
+##########################
+
+# Used by libgcrypt-config
+LIBGCRYPT_CONFIG_LIBS="-lgcrypt"
+LIBGCRYPT_CONFIG_CFLAGS=""
+
+# Definitions for symmetric ciphers.
+available_ciphers="arcfour blowfish cast5 des aes twofish serpent rfc2268 seed"
+available_ciphers="$available_ciphers camellia"
 enabled_ciphers=""
 
 enabled_ciphers=""
 
-dnl Definitions for public-key ciphers.
-available_pubkey_ciphers="dsa elgamal rsa"
-default_pubkey_ciphers="$available_pubkey_ciphers"
+# Definitions for public-key ciphers.
+available_pubkey_ciphers="dsa elgamal rsa ecc"
 enabled_pubkey_ciphers=""
 
 enabled_pubkey_ciphers=""
 
-dnl Definitions for message digests.
-available_digests="crc md4 md5 rmd160 sha1 sha256 tiger"
-default_digests=$available_digests
+# Definitions for message digests.
+available_digests="crc md4 md5 rmd160 sha1 sha256"
+available_digests_64="sha512 tiger whirlpool"
 enabled_digests=""
 
 enabled_digests=""
 
-dnl Support for the --enable-ciphers switch.
+# Definitions for random modules.
+available_random_modules="linux egd unix"
+auto_random_modules="$available_random_modules"
+
+# Supported thread backends.
+LIBGCRYPT_THREAD_MODULES=""
+
+# Other definitions.
+print_egd_notice=no
+have_w32_system=no
+
+# Setup some stuff depending on host.
+case "${host}" in
+    *-*-mingw32*)
+      available_random_modules="w32"
+      ac_cv_have_dev_random=no
+      have_w32_system=yes
+      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])
+      ;;
+
+    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)
+        ;;
+
+    i?86-*-msdosdjgpp*)
+        # DOS with the DJGPP environment
+        ac_cv_have_dev_random=no
+        AC_DEFINE(HAVE_DRIVE_LETTERS)
+        AC_DEFINE(HAVE_DOSISH_SYSTEM)
+        ;;
+
+    *-*-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"
+        fi
+        ;;
+    *-dec-osf4*)
+        if test -z "$GCC" ; then
+            # Suppress all warnings
+            # to get rid of the unsigned/signed char mismatch warnings.
+            CFLAGS="$CFLAGS -w"
+        fi
+        ;;
+    m68k-atari-mint)
+        ;;
+    *)
+      ;;
+esac
+
+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)
+
+
+
+# A printable OS Name is sometimes useful.
+case "${host}" in
+    *-*-mingw32*)
+        PRINTABLE_OS_NAME="MingW32"
+        ;;
+
+    i?86-emx-os2 | i?86-*-os2*emx )
+        PRINTABLE_OS_NAME="OS/2"
+        ;;
+
+    i?86-*-msdosdjgpp*)
+        PRINTABLE_OS_NAME="MSDOS/DJGPP"
+        ;;
+
+    *-linux*)
+        PRINTABLE_OS_NAME="GNU/Linux"
+        ;;
+
+    *)
+        PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
+        ;;
+esac
+
+#
+# Figure out the name of the random device
+#
+case "${host}" in
+    *-openbsd*)
+        NAME_OF_DEV_RANDOM="/dev/srandom"
+        NAME_OF_DEV_URANDOM="/dev/urandom"
+        ;;
+
+    *)
+        NAME_OF_DEV_RANDOM="/dev/random"
+        NAME_OF_DEV_URANDOM="/dev/urandom"
+        ;;
+esac
+
+
+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
+  AC_C_BIGENDIAN
+else
+  AC_DEFINE(DISABLED_ENDIAN_CHECK,1,[configure did not test for endianess])
+fi
+
+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_TYPE_UINTPTR_T
+
+if test "$ac_cv_sizeof_unsigned_short" = "0" \
+   || test "$ac_cv_sizeof_unsigned_int" = "0" \
+   || test "$ac_cv_sizeof_unsigned_long" = "0"; then
+    AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
+fi
+
+# 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 "$ac_cv_sizeof_uint64_t" != "8"; then
+    AC_MSG_WARN([No 64-bit types.  Disabling TIGER/192, SHA-384, and SHA-512])
+else
+  available_digests="$available_digests $available_digests_64"
+fi
+
+# If not specified otherwise, all available algorithms will be
+# included.  
+default_ciphers="$available_ciphers"
+default_pubkey_ciphers="$available_pubkey_ciphers"
+default_digests="$available_digests"
+
+############################
+## Command line switches. ##
+############################
+
+# Implementation of the --enable-ciphers switch.
 AC_ARG_ENABLE(ciphers,
              AC_HELP_STRING([--enable-ciphers=ciphers],
                             [select the symmetric ciphers to include]),
 AC_ARG_ENABLE(ciphers,
              AC_HELP_STRING([--enable-ciphers=ciphers],
                             [select the symmetric ciphers to include]),
-             [enabled_ciphers=$(echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]')],
+             [enabled_ciphers=`echo $enableval | tr ',:' '  ' | tr '[A-Z]' '[a-z]'`],
              [enabled_ciphers=""])
 if test "x$enabled_ciphers" = "x" \
    -o "$enabled_ciphers" = "yes"  \
              [enabled_ciphers=""])
 if test "x$enabled_ciphers" = "x" \
    -o "$enabled_ciphers" = "yes"  \
@@ -104,16 +323,16 @@ AC_MSG_CHECKING([which symmetric ciphers to include])
 for cipher in $enabled_ciphers; do
     LIST_MEMBER($cipher, $available_ciphers)
     if test "$found" = "0"; then
 for cipher in $enabled_ciphers; do
     LIST_MEMBER($cipher, $available_ciphers)
     if test "$found" = "0"; then
-       AC_MSG_ERROR([unsupported cipher specified])
+       AC_MSG_ERROR([unsupported cipher "$cipher" specified])
     fi
 done
 AC_MSG_RESULT([$enabled_ciphers])
 
     fi
 done
 AC_MSG_RESULT([$enabled_ciphers])
 
-dnl Support for the --enable-pubkey-ciphers switch.
+# Implementation of the --enable-pubkey-ciphers switch.
 AC_ARG_ENABLE(pubkey-ciphers,
              AC_HELP_STRING([--enable-pubkey-ciphers=ciphers],
                             [select the public-key ciphers to include]),
 AC_ARG_ENABLE(pubkey-ciphers,
              AC_HELP_STRING([--enable-pubkey-ciphers=ciphers],
                             [select the public-key ciphers to include]),
-             [enabled_pubkey_ciphers=$(echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]')],
+             [enabled_pubkey_ciphers=`echo $enableval | tr ',:' '  ' | tr '[A-Z]' '[a-z]'`],
              [enabled_pubkey_ciphers=""])
 if test "x$enabled_pubkey_ciphers" = "x" \
    -o "$enabled_pubkey_ciphers" = "yes"  \
              [enabled_pubkey_ciphers=""])
 if test "x$enabled_pubkey_ciphers" = "x" \
    -o "$enabled_pubkey_ciphers" = "yes"  \
@@ -129,11 +348,11 @@ for cipher in $enabled_pubkey_ciphers; do
 done
 AC_MSG_RESULT([$enabled_pubkey_ciphers])
 
 done
 AC_MSG_RESULT([$enabled_pubkey_ciphers])
 
-dnl Support for the --enable-digests switch.
+# Implementation of the --enable-digests switch.
 AC_ARG_ENABLE(digests,
              AC_HELP_STRING([--enable-digests=digests],
                             [select the message digests to include]),
 AC_ARG_ENABLE(digests,
              AC_HELP_STRING([--enable-digests=digests],
                             [select the message digests to include]),
-             [enabled_digests=$(echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]')],
+             [enabled_digests=`echo $enableval | tr ',:' '  ' | tr '[A-Z]' '[a-z]'`],
              [enabled_digests=""])
 if test "x$enabled_digests" = "x" \
    -o "$enabled_digests" = "yes"  \
              [enabled_digests=""])
 if test "x$enabled_digests" = "x" \
    -o "$enabled_digests" = "yes"  \
@@ -149,92 +368,32 @@ for digest in $enabled_digests; do
 done
 AC_MSG_RESULT([$enabled_digests])
 
 done
 AC_MSG_RESULT([$enabled_digests])
 
-dnl Define automake conditionals and config.h symbols depending on the
-dnl selected ciphers, pubkey-ciphers and digests.
-
-LIST_MEMBER(arcfour, $enabled_ciphers)
-AM_CONDITIONAL(USE_ARCFOUR, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_ARCFOUR, $found, [Defined if this module should be included])
-LIST_MEMBER(blowfish, $enabled_ciphers)
-AM_CONDITIONAL(USE_BLOWFISH, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_BLOWFISH, $found, [Defined if this module should be included])
-LIST_MEMBER(cast5, $enabled_ciphers)
-AM_CONDITIONAL(USE_CAST5, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_CAST5, $found, [Defined if this module should be included])
-LIST_MEMBER(des, $enabled_ciphers)
-AM_CONDITIONAL(USE_DES, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_DES, $found, [Defined if this module should be included])
-LIST_MEMBER(aes, $enabled_ciphers)
-AM_CONDITIONAL(USE_AES, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_AES, $found, [Defined if this module should be included])
-LIST_MEMBER(twofish, $enabled_ciphers)
-AM_CONDITIONAL(USE_TWOFISH, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_TWOFISH, $found, [Defined if this module should be included])
-
-LIST_MEMBER(dsa, $enabled_pubkey_ciphers)
-AM_CONDITIONAL(USE_DSA, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_DSA, $found, [Defined if this module should be included])
-LIST_MEMBER(rsa, $enabled_pubkey_ciphers)
-AM_CONDITIONAL(USE_RSA, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_RSA, $found, [Defined if this module should be included])
-LIST_MEMBER(elgamal, $enabled_pubkey_ciphers)
-AM_CONDITIONAL(USE_ELGAMAL, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_ELGAMAL, $found, [Defined if this module should be included])
-
-LIST_MEMBER(crc, $enabled_digests)
-AM_CONDITIONAL(USE_CRC, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_CRC, $found, [Defined if this module should be included])
-LIST_MEMBER(md4, $enabled_digests)
-AM_CONDITIONAL(USE_MD4, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_MD4, $found, [Defined if this module should be included])
-LIST_MEMBER(md5, $enabled_digests)
-AM_CONDITIONAL(USE_MD5, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_MD5, $found, [Defined if this module should be included])
-LIST_MEMBER(sha1, $enabled_digests)
-AM_CONDITIONAL(USE_SHA1, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_SHA1, $found, [Defined if this module should be included])
-LIST_MEMBER(sha256, $enabled_digests)
-AM_CONDITIONAL(USE_SHA256, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_SHA256, $found, [Defined if this module should be included])
-LIST_MEMBER(tiger, $enabled_digests)
-AM_CONDITIONAL(USE_TIGER, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_TIGER, $found, [Defined if this module should be included])
-
-# rmd160 should be included always.
-AM_CONDITIONAL(USE_RMD160, true)
-AC_DEFINE_UNQUOTED(USE_RMD160, 1, [Defined if this module should be included])
-
-
-AC_SUBST(LIBGCRYPT_CIPHERS, $enabled_ciphers)
-AC_SUBST(LIBGCRYPT_PUBKEY_CIPHERS, $enabled_pubkey_ciphers)
-AC_SUBST(LIBGCRYPT_DIGESTS, $enabled_digests)
-
-dnl
-dnl  Check for random module options
-dnl
-
+# Implementation of the --enable-random switch.
+AC_ARG_ENABLE(random,
+             AC_HELP_STRING([--enable-random=name],
+                            [select which random number generator to use]),
+             [random=`echo $enableval | tr '[A-Z]' '[a-z]'`],
+             [])
+if test "x$random" = "x" -o "$random" = "yes" -o "$random" = "no"; then
+    random=default
+fi
 AC_MSG_CHECKING([which random module to use])
 AC_MSG_CHECKING([which random module to use])
-AC_ARG_ENABLE(static-rnd,
-    [  --enable-static-rnd=[egd|unix|linux|default|auto]  ],
-[use_static_rnd=$enableval], [use_static_rnd=default] )
-
-if test "$use_static_rnd" = no; then
-    use_static_rnd=default
+if test "$random" != "default" -a "$random" != "auto"; then
+    LIST_MEMBER($random, $available_random_modules)
+    if test "$found" = "0"; then
+       AC_MSG_ERROR([unsupported random module specified])
+    fi
 fi
 fi
+AC_MSG_RESULT($random)
 
 
-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
+# Implementation of the --disable-dev-random switch.
+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)
 
 
+# Implementation of the --with-egd-socket switch.
 AC_ARG_WITH(egd-socket,
     [  --with-egd-socket=NAME  Use NAME for the EGD socket)],
             egd_socket_name="$withval", egd_socket_name="" )
 AC_ARG_WITH(egd-socket,
     [  --with-egd-socket=NAME  Use NAME for the EGD socket)],
             egd_socket_name="$withval", egd_socket_name="" )
@@ -242,178 +401,79 @@ 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])
 
                    [Define if you don't want the default EGD socket name.
                     For details see cipher/rndegd.c])
 
+# Implementation of the --enable-random-daemon
+AC_MSG_CHECKING([whether the experimental random daemon is requested])
+AC_ARG_ENABLE([random-daemon],
+              AC_HELP_STRING([--enable-random-daemon],
+                             [Build and support the experimental gcryptrnd]),
+              [use_random_daemon=$enableval],
+              [use_random_daemon=no])
+AC_MSG_RESULT($use_random_daemon)
+if test x$use_random_daemon = xyes ; then
+    AC_DEFINE(USE_RANDOM_DAEMON,1,
+              [Define to support the experimental random daemon])
+fi
+AM_CONDITIONAL(USE_RANDOM_DAEMON, test x$use_random_daemon = xyes)
 
 
 
 
-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)
+# Implementation of --disable-asm.
+AC_MSG_CHECKING([whether MPI assembler modules are requested])
+AC_ARG_ENABLE([asm],
+              AC_HELP_STRING([--disable-asm],
+                            [Disable MPI assembler modules]),
+              [try_asm_modules=$enableval],
+              [try_asm_modules=yes])
 AC_MSG_RESULT($try_asm_modules)
 
 AC_MSG_RESULT($try_asm_modules)
 
+# Implementation of the --enable-m-guard switch.
 AC_MSG_CHECKING([whether memory guard is requested])
 AC_ARG_ENABLE(m-guard,
 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)
+              AC_HELP_STRING([--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
 
 if test "$use_m_guard" = yes ; then
     AC_DEFINE(M_GUARD,1,[Define to use the (obsolete) malloc guarding feature])
 fi
 
-dnl
-dnl Check whether we want to use Linux capabilities
-dnl
+# Implementation of the --with-capabilities switch.
+# Check whether we want to use Linux capabilities
 AC_MSG_CHECKING([whether use of capabilities is requested])
 AC_ARG_WITH(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_HELP_STRING([--with-capabilities],
+                           [Use linux capabilities [default=no]]),
+            [use_capabilities="$withval"],[use_capabilities=no])
 AC_MSG_RESULT($use_capabilities)
 
 
 AC_MSG_RESULT($use_capabilities)
 
 
-AM_MAINTAINER_MODE
-
-dnl Checks for programs.
-
-dnl
-dnl Setup some stuff depending on host/target.
-dnl
-case "${target}" in
-    *-*-mingw32*)
-        # special stuff for Windoze NT
-        disallowed_modules="rndunix rndlinux rndegd"
-        ;;
-    *)
-        disallowed_modules="rndw32"
-       ;;
-esac
-
-AC_PROG_MAKE_SET
-AM_SANITY_CHECK
-missing_dir=`cd $ac_aux_dir && pwd`
-AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
-AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
-AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
-AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
-dnl AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
-AC_PROG_CC
-AC_PROG_CPP
-AM_PROG_AS
-AC_ISC_POSIX
-AC_PROG_INSTALL
-AC_PROG_AWK
-GPH_PROG_DB2ANY
-
-AM_PROG_LIBTOOL
-
-
-MPI_OPT_FLAGS=""
-
-
-try_gettext=no
-case "${target}" in
-    *-*-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])
-        try_gettext="no"
-        ;;
-    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)
-        try_gettext="no"
-        ;;
-
-    i?86-*-msdosdjgpp*)
-        # DOS with the DJGPP environment
-        ac_cv_have_dev_random=no
-        AC_DEFINE(HAVE_DRIVE_LETTERS)
-        AC_DEFINE(HAVE_DOSISH_SYSTEM)
-        try_gettext="no"
-        ;;
+# Implementation of the --disable-padlock-support switch.
+AC_MSG_CHECKING([whether padlock support is requested])
+AC_ARG_ENABLE(padlock-support,
+              AC_HELP_STRING([--disable-padlock-support],
+                        [Disable support for the PadLock Engine of VIA processors]),
+             padlocksupport=$enableval,padlocksupport=yes)
+AC_MSG_RESULT($padlocksupport)
+if test x"$padlocksupport" = xyes ; then
+  AC_DEFINE(ENABLE_PADLOCK_SUPPORT, 1,
+            [Enable support for the PadLock engine.])
+fi
 
 
-    *-*-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"
-        fi
-        ;;
-    *-dec-osf4*)
-        if test -z "$GCC" ; then
-            # Suppress all warnings
-            # to get rid of the unsigned/signed char mismatch warnings.
-            CFLAGS="$CFLAGS -w"
-        fi
-        ;;
-    m68k-atari-mint)
-        ;;
-    *)
-       ;;
-esac
 
 
-AC_SUBST(MPI_OPT_FLAGS)
-GNUPG_SYS_SYMBOL_UNDERSCORE
-GNUPG_CHECK_PIC
-#GNUPG_CHECK_EXPORTDYNAMIC
-#if test "$NO_PIC" = yes; then
-#    try_dynload=no
-#fi
+AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
+                   [A human readable text with the name of the OS])
 
 
-# For now we hardcode the use of version scripts.  It would be better
-# to write a text for this or even implement this within libtool
+# For some systems we know that we have ld_version scripts.  
+# Use it then as default.
 have_ld_version_script=no
 have_ld_version_script=no
-case "${target}" in
-    *-*-mingw32*)
-        PRINTABLE_OS_NAME="MingW32"
-        ;;
-    i?86-emx-os2 | i?86-*-os2*emx )
-        PRINTABLE_OS_NAME="OS/2"
-        ;;
-    i?86-*-msdosdjgpp*)
-        PRINTABLE_OS_NAME="MSDOS/DJGPP"
-        try_dynload=no
-        ;;
-    *-linux*)
-        PRINTABLE_OS_NAME="GNU/Linux"
-        have_ld_version_script=yes
-        ;;
-dnl let that after linux to avoid gnu-linux problems
-    *-gnu*)
-        PRINTABLE_OS_NAME="GNU/Hurd"
-        have_ld_version_script=yes
+case "${host}" in
+    *-*-linux*)
+       have_ld_version_script=yes
         ;;
         ;;
-    *)
-        PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
+    *-*-gnu*)
+       have_ld_version_script=yes
         ;;
 esac
         ;;
 esac
-AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
-                   [A human readable text with the name of the OS])
 AC_ARG_ENABLE([ld-version-script],
               AC_HELP_STRING([--enable-ld-version-script],
                              [enable/disable use of linker version script.
 AC_ARG_ENABLE([ld-version-script],
               AC_HELP_STRING([--enable-ld-version-script],
                              [enable/disable use of linker version script.
@@ -422,136 +482,213 @@ AC_ARG_ENABLE([ld-version-script],
               [ : ] )
 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
 
               [ : ] )
 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
 
-
-dnl  Fixme: Are these the best flags for OpenBSD????
-case "${target}" in
-    *-openbsd* | *-netbsd*)
-        NAME_OF_DEV_RANDOM="/dev/srandom"
-        NAME_OF_DEV_URANDOM="/dev/urandom"
-#       DYNLINK_MOD_CFLAGS="-shared -rdynamic $CFLAGS_PIC -Wl,-Bshareable -Wl,-x"
-        ;;
-
-    *-solaris* | *-irix* | *-dec-osf* )
-        NAME_OF_DEV_RANDOM="/dev/random"
-        NAME_OF_DEV_URANDOM="/dev/random"
-#       DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
-        ;;
-
-    *)
-        NAME_OF_DEV_RANDOM="/dev/random"
-        NAME_OF_DEV_URANDOM="/dev/urandom"
-        # -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",
                    [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_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)
-
 
 
-dnl Checks for libraries.
+###############################
+#### Checks for libraries. ####
+###############################
 
 
-USE_NLS=no
-USE_INCLUDED_LIBINTL=no
-AC_SUBST(USE_NLS)
-AC_SUBST(USE_INCLUDED_LIBINTL)
+#
+# gpg-error is required.
+#
+AM_PATH_GPG_ERROR("$NEED_GPG_ERROR_VERSION")
+if test "x$GPG_ERROR_LIBS" = "x"; then
+  AC_MSG_ERROR([libgpg-error is needed.
+                See ftp://ftp.gnupg.org/gcrypt/libgpg-error/ .])
+fi
 
 
+AC_DEFINE(GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_GCRYPT,
+          [The default error source for libgcrypt.])
 
 
-dnl Solaris needs -lsocket and -lnsl. Unisys system includes
-dnl gethostbyname in libsocket but needs libnsl for socket.
-AC_CHECK_LIB(nsl, gethostbyname)
-AC_CHECK_LIB(socket, socket, ac_need_libsocket=1, ac_try_nsl=1)
-if test x$ac_need_libsocket = x1; then
-    LIBS="$LIBS -lsocket"
+#
+# Check whether the GNU Pth library is available.  We require this 
+# to build the optional gcryptrnd program.
+#
+AC_ARG_WITH(pth-prefix,
+            AC_HELP_STRING([--with-pth-prefix=PFX],
+                           [prefix where GNU Pth is installed (optional)]),
+     pth_config_prefix="$withval", pth_config_prefix="")
+if test x$pth_config_prefix != x ; then
+   PTH_CONFIG="$pth_config_prefix/bin/pth-config"
 fi
 fi
-if test x$ac_try_nsl = x1; then
-    AC_CHECK_LIB(nsl, gethostbyname, ac_need_libnsl=1)
-    if test x$ac_need_libnsl = x1
-    then
-        LIBS="$LIBS -lnsl"
+if test "$use_random_daemon" = "yes"; then
+  AC_PATH_PROG(PTH_CONFIG, pth-config, no)
+  if test "$PTH_CONFIG" = "no"; then
+    AC_MSG_WARN([[
+***
+*** To build the Libgcrypt's random number daemon
+*** 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
+***]])
+  else
+    GNUPG_PTH_VERSION_CHECK([1.3.7])
+    if test $have_pth = yes; then      
+       PTH_CFLAGS=`$PTH_CONFIG --cflags`
+       PTH_LIBS=`$PTH_CONFIG --ldflags`
+       PTH_LIBS="$PTH_LIBS `$PTH_CONFIG --libs --all`"
+       AC_DEFINE(USE_GNU_PTH, 1,
+                [Defined if the GNU Portable Thread Library should be used])
+       AC_DEFINE(HAVE_PTH, 1,
+                [Defined if the GNU Pth is available])
     fi
     fi
+  fi
 fi
 fi
+AC_SUBST(PTH_CFLAGS)
+AC_SUBST(PTH_LIBS)
+
 
 
+# Solaris needs -lsocket and -lnsl. Unisys system includes
+# gethostbyname in libsocket but needs libnsl for socket.
+AC_SEARCH_LIBS(setsockopt, [socket], ,
+       [AC_SEARCH_LIBS(setsockopt, [socket], , , [-lnsl])])
+AC_SEARCH_LIBS(setsockopt, [nsl])
+
+##################################
+#### Checks for header files. ####
+##################################
 
 
-dnl Checks for header files.
 AC_HEADER_STDC
 AC_HEADER_STDC
-AC_CHECK_HEADERS(unistd.h langinfo.h termio.h sys/select.h)
+AC_CHECK_HEADERS(unistd.h sys/select.h)
 
 
+##########################################
+#### Checks for typedefs, structures, ####
+####  and compiler characteristics.   ####
+##########################################
 
 
-dnl Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
 AC_C_INLINE
 AC_TYPE_SIZE_T
 AC_TYPE_SIGNAL
 AC_DECL_SYS_SIGLIST
 
 AC_C_CONST
 AC_C_INLINE
 AC_TYPE_SIZE_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)
 
 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)
-
-if test "$ac_cv_sizeof_unsigned_short" = "0" \
-   || test "$ac_cv_sizeof_unsigned_int" = "0" \
-   || test "$ac_cv_sizeof_unsigned_long" = "0"; then
-    AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
+gl_TYPE_SOCKLEN_T
+case "${host}" in
+  *-*-mingw32*)
+    # socklen_t may or may not be defined depending on what headers
+    # are included.  To be safe we use int as this is the actual type.
+    FALLBACK_SOCKLEN_T="typedef int gcry_socklen_t;"
+    ;;
+  *)
+    if test ".$gl_cv_socklen_t_equiv" = "."; then
+      FALLBACK_SOCKLEN_T="typedef socklen_t gcry_socklen_t;"
+    else
+      FALLBACK_SOCKLEN_T="typedef ${gl_cv_socklen_t_equiv} gcry_socklen_t;"
+    fi
+esac
+AC_SUBST(FALLBACK_SOCKLEN_T)
+            
+#            
+# Check for ELF visibility support.
+#
+AC_CACHE_CHECK(whether the visibility attribute is supported,
+       gcry_cv_visibility_attribute,
+       [gcry_cv_visibility_attribute=no
+        AC_LANG_CONFTEST([AC_LANG_SOURCE(
+          [[int foo __attribute__ ((visibility ("hidden"))) = 1;
+            int bar __attribute__ ((visibility ("protected"))) = 1;
+          ]])])
+        
+        if ${CC-cc} -Werror -S conftest.c -o conftest.s \
+                  1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
+            if grep '\.hidden.*foo' conftest.s >/dev/null 2>&1 ; then
+                if grep '\.protected.*bar' conftest.s >/dev/null 2>&1; then
+                    gcry_cv_visibility_attribute=yes
+                fi
+            fi  
+        fi  
+       ])
+if test "$gcry_cv_visibility_attribute" = "yes"; then
+    AC_CACHE_CHECK(for broken visibility attribute,
+       gcry_cv_broken_visibility_attribute,
+       [gcry_cv_broken_visibility_attribute=yes
+        AC_LANG_CONFTEST([AC_LANG_SOURCE(
+          [[int foo (int x);
+            int bar (int x) __asm__ ("foo")
+                            __attribute__ ((visibility ("hidden")));
+            int bar (int x) { return x; }
+          ]])])
+                  
+        if ${CC-cc} -Werror -S conftest.c -o conftest.s \
+                  1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
+           if grep '\.hidden@<:@       _@:>@foo' conftest.s >/dev/null 2>&1;
+            then
+               gcry_cv_broken_visibility_attribute=no
+           fi
+        fi
+       ])
+fi
+if test "$gcry_cv_visibility_attribute" = "yes"; then
+    AC_CACHE_CHECK(for broken alias attribute,
+       gcry_cv_broken_alias_attribute,
+       [gcry_cv_broken_alias_attribute=yes
+        AC_LANG_CONFTEST([AC_LANG_SOURCE(
+          [[extern int foo (int x) __asm ("xyzzy");
+            int bar (int x) { return x; }
+            extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
+            extern int dfoo;
+            extern __typeof (dfoo) dfoo __asm ("abccb");
+            int dfoo = 1;
+          ]])])
+
+        if ${CC-cc} -Werror -S conftest.c -o conftest.s \
+                  1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
+           if grep 'xyzzy' conftest.s >/dev/null 2>&1 && \
+              grep 'abccb' conftest.s >/dev/null 2>&1; then
+              gcry_cv_broken_alias_attribute=no
+           fi
+        fi
+        ])
+fi
+if test "$gcry_cv_visibility_attribute" = "yes"; then
+    AC_CACHE_CHECK(if gcc supports -fvisibility=hidden,
+       gcry_cv_gcc_has_f_visibility,
+       [gcry_cv_gcc_has_f_visibility=no
+        _gcc_cflags_save=$CFLAGS
+        CFLAGS="-fvisibility=hidden"
+        AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),
+                          gcry_cv_gcc_has_f_visibility=yes)
+        CFLAGS=$_gcc_cflags_save;
+       ])
+fi
+if test "$gcry_cv_visibility_attribute" = "yes" \
+   && test "$gcry_cv_broken_visibility_attribute" != "yes" \
+   && test "$gcry_cv_broken_alias_attribute" != "yes" \
+   && test "$gcry_cv_gcc_has_f_visibility" = "yes"  
+ then
+   AC_DEFINE(GCRY_USE_VISIBILITY, 1,
+               [Define to use the GNU C visibility attribute.])
+   CFLAGS="$CFLAGS -fvisibility=hidden"
 fi
 
 
 fi
 
 
-#
-# Checks for library functions.
-#
+#######################################
+#### Checks for library functions. ####
+#######################################
+
 AC_FUNC_VPRINTF
 AC_FUNC_VPRINTF
-dnl We have replacements for these in src/missing-string.c
-AC_CHECK_FUNCS(stpcpy strsep strlwr strcasecmp)
-dnl We have replacements for these in src/g10lib.h
+# We have replacements for these in src/missing-string.c
+AC_CHECK_FUNCS(stpcpy strcasecmp)
+# We have replacements for these in src/g10lib.h
 AC_CHECK_FUNCS(strtoul memmove stricmp atexit raise)
 AC_CHECK_FUNCS(strtoul memmove stricmp atexit raise)
-dnl Other checks
-AC_CHECK_FUNCS(strerror tcgetattr rand mmap)
-AC_CHECK_FUNCS(gettimeofday getrusage gethrtime setrlimit clock_gettime)
-AC_CHECK_FUNCS(getpagesize strftime nl_langinfo)
-AC_CHECK_FUNCS(waitpid wait4 sigaction sigprocmask fopen64 fstat64)
+# Other checks
+AC_CHECK_FUNCS(strerror rand mmap getpagesize sysconf waitpid wait4)
+AC_CHECK_FUNCS(gettimeofday getrusage gethrtime clock_gettime)
+AC_CHECK_FUNCS(fcntl ftruncate)
 
 GNUPG_CHECK_MLOCK
 
 GNUPG_CHECK_MLOCK
-GNUPG_FUNC_MKDIR_TAKES_ONE_ARG
-
-# 
-# The ATH systems needs to know whether pth or pthreads are available.
-# 
-have_pth=no
-have_pthread=no
-AC_CHECK_LIB(pth,pth_version,have_pth=yes)
-if test "$have_pth" = yes; then
-  AC_DEFINE(HAVE_PTH, ,[Define if we have Pth.])
-fi
-AC_CHECK_LIB(pthread,pthread_create,have_pthread=yes)
-if test "$have_pthread" != yes; then
-  AC_CHECK_LIB(c,pthread_create,have_pthread=yes)
-fi
-if test "$have_pthread" = yes; then
-  AC_DEFINE(HAVE_PTHREAD, ,[Define if we have pthread.])
-fi
-AM_CONDITIONAL(HAVE_PTH, test "$have_pth" = "yes")
-AM_CONDITIONAL(HAVE_PTHREAD, test "$have_pthread" = "yes")
 
 
-
-#
-# Check whether we can use Linux capabilities as requested
-#
+# Check whether we can use Linux capabilities as requested.
 if test "$use_capabilities" = "yes" ; then
 use_capabilities=no
 AC_CHECK_HEADERS(sys/capability.h)
 if test "$use_capabilities" = "yes" ; then
 use_capabilities=no
 AC_CHECK_HEADERS(sys/capability.h)
@@ -578,16 +715,7 @@ if test "$use_capabilities" = "no" ; then
 fi
 fi
 
 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
+# Check whether a random device is available.
 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
 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
@@ -602,227 +730,140 @@ else
     AC_MSG_RESULT(has been disabled)
 fi
 
     AC_MSG_RESULT(has been disabled)
 fi
 
-#dnl
-#dnl and whether this device supports ioctl
-#dnl (Note, that we should do a real test here)
-#dnl
-#if test "$ac_cv_have_dev_random" = yes ; then
-#    AC_CHECK_HEADERS(linux/random.h)
-#    AC_CACHE_CHECK(for random device ioctl, ac_cv_have_dev_random_ioctl,
-#      [ if test "$ac_cv_header_linux_random_h" = yes ; then
-#          ac_cv_have_dev_random_ioctl=yes;
-#        else
-#          ac_cv_have_dev_random_ioctl=no;
-#        fi
-#      ])
-#    if test "$ac_cv_have_dev_random_ioctl" = yes; then
-#        AC_DEFINE(HAVE_DEV_RANDOM_IOCTL,1,
-#                  [defined if the random device supports some IOCTLs])
-#    fi
-#fi
-#
+# Figure out the random modules for this configuration.
+if test "$random" = "default"; then
 
 
-dnl
-dnl Figure out the random modules that are available for this
-dnl configuration.
-dnl
-print_egd_notice=no
-random_modules=""
-if test "$use_static_rnd" = default; then
-
-     # Figure out the default random module.
-     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
+    # Select default value.
+    if test "$ac_cv_have_dev_random" = yes; then
+        # Try Linuxish random device.
+        random_modules="linux"
+    else
+        case "${host}" in
+        *-*-mingw32*|*-*-cygwin*)
+          # Windows random device.
+          random_modules="w32"
+          ;;
+        *)
+          # Build everything, allow to select at runtime.
+          random_modules="$auto_random_modules"
+          ;;
+        esac    
+    fi
 else
 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
-
-
-dnl Filter out the modules contained in `disallowed_modules'.
-random_modules_tmp=$random_modules
-random_modules=""
-for rndmod in $random_modules_tmp; do
-    LIST_MEMBER($rndmod, $disallowed_modules)
-    if test "$found" = "0"; then
-       random_modules="$random_modules $rndmod"
+    if test "$random" = "auto"; then
+        # Build everything, allow to select at runtime.
+        random_modules="$auto_random_modules"
+    else
+        random_modules="$random"
     fi
     fi
-done
-
-dnl Define conditionals and config.h symbols depending on the enabled
-dnl random modules.
-
-LIST_MEMBER(rndlinux, $random_modules)
-AM_CONDITIONAL(USE_RNDLINUX, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_RNDLINUX, $found, [Defined if the /dev/random based RNG should be used.])
-
-LIST_MEMBER(rndunix, $random_modules)
-AM_CONDITIONAL(USE_RNDUNIX, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_RNDUNIX, $found, [Defined if the default Unix RNG should be used.])
-if test "$found" = "1"; then
-   print_egd_notice=yes
 fi
 
 fi
 
-LIST_MEMBER(rndegd, $random_modules)
-AM_CONDITIONAL(USE_RNDEGD, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_RNDEGD, $found, [Defined if the EGD based RNG should be used.])
-if test "$found" = "1"; then
-   EGDLIBS=$NETLIBS
-   AC_SUBST(EGDLIBS)
-fi
-
-LIST_MEMBER(rndw32, $random_modules)
-AM_CONDITIONAL(USE_RNDW32, test "$found" = "1")
-AC_DEFINE_UNQUOTED(USE_RNDW32, $found, [Defined if the Windows specific RNG should be used.])
-
-AC_MSG_RESULT()
-
 
 #
 
 #
-# setup assembler stuff
+# Setup assembler stuff.
 #
 #
+GNUPG_SYS_SYMBOL_UNDERSCORE()
+AC_ARG_ENABLE(mpi-path,
+              AC_HELP_STRING([--enable-mpi-path=EXTRA_PATH],
+             [prepend EXTRA_PATH to list of CPU specific optimizations]),
+             mpi_extra_path="$enableval",mpi_extra_path="")
 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_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_mod_list="$mpi_mod_list"
     ac_cv_mpi_sflags="$mpi_sflags"
     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
     AC_MSG_RESULT(done)
 else
     AC_MSG_RESULT(failed)
     AC_MSG_ERROR([mpi/config.links missing!])
 fi
-MPI_MOD_LIST_LO=""
-MPI_MOD_LIST_O=""
-if test "$ac_cv_mpi_mod_list" != ""; then
-  for i in $ac_cv_mpi_mod_list; do
-      MPI_MOD_LIST_LO="$MPI_MOD_LIST_LO $i.lo"
-      MPI_MOD_LIST_O="$MPI_MOD_LIST_O $i.o"
-  done
-fi
-AC_SUBST(MPI_MOD_LIST_LO)
-AC_SUBST(MPI_MOD_LIST_O)
 MPI_SFLAGS="$ac_cv_mpi_sflags"
 AC_SUBST(MPI_SFLAGS)
 
 MPI_SFLAGS="$ac_cv_mpi_sflags"
 AC_SUBST(MPI_SFLAGS)
 
-# [not used anymore]
-## Set the condtionals for the assembler modules
-## Fixme: We should put this into acinclude and write a script
-##        which can be run to update this list and the mpi/Makefile
-#AM_CONDITIONAL(MPI_MOD_ASM_MPIH_ADD1, test "$mpi_mod_asm_mpih_add1" = yes )
-#AM_CONDITIONAL(MPI_MOD_ASM_MPIH_SUB1, test "$mpi_mod_asm_mpih_sub1" = yes )
-#AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL1, test "$mpi_mod_asm_mpih_mul1" = yes )
-#AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL2, test "$mpi_mod_asm_mpih_mul2" = yes )
-#AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL3, test "$mpi_mod_asm_mpih_mul3" = yes )
-#AM_CONDITIONAL(MPI_MOD_ASM_MPIH_LSHIFT, test "$mpi_mod_asm_mpih_lshift" = yes )
-#AM_CONDITIONAL(MPI_MOD_ASM_MPIH_RSHIFT, test "$mpi_mod_asm_mpih_rshift" = yes )
-#AM_CONDITIONAL(MPI_MOD_ASM_UDIV, test "$mpi_mod_asm_udiv" = yes )
-#AM_CONDITIONAL(MPI_MOD_ASM_UDIV_QRNND, test "$mpi_mod_asm_udiv_qrnnd" = yes )
-## And the corresponding conditionals for C
-#AM_CONDITIONAL(MPI_MOD_C_MPIH_ADD1, test "$mpi_mod_c_mpih_add1" = yes )
-#AM_CONDITIONAL(MPI_MOD_C_MPIH_SUB1, test "$mpi_mod_c_mpih_sub1" = yes )
-#AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL1, test "$mpi_mod_c_mpih_mul1" = yes )
-#AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL2, test "$mpi_mod_c_mpih_mul2" = yes )
-#AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL3, test "$mpi_mod_c_mpih_mul3" = yes )
-#AM_CONDITIONAL(MPI_MOD_C_MPIH_LSHIFT, test "$mpi_mod_c_mpih_lshift" = yes )
-#AM_CONDITIONAL(MPI_MOD_C_MPIH_RSHIFT, test "$mpi_mod_c_mpih_rshift" = yes )
-#AM_CONDITIONAL(MPI_MOD_C_UDIV, test "$mpi_mod_c_udiv" = yes )
-#AM_CONDITIONAL(MPI_MOD_C_UDIV_QRNND, test "$mpi_mod_c_udiv_qrnnd" = yes )
-#
-
-
-# Allow users to append something to the version string without
-# flagging it as development version.  The user version part is
-# considered everything after a dash.
-changequote(,)dnl
-tmp_pat='[a-zA-Z]'
-changequote([,])dnl
-if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
+AM_CONDITIONAL(MPI_MOD_ASM_MPIH_ADD1, test "$mpi_mod_asm_mpih_add1" = yes)
+AM_CONDITIONAL(MPI_MOD_ASM_MPIH_SUB1, test "$mpi_mod_asm_mpih_sub1" = yes)
+AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL1, test "$mpi_mod_asm_mpih_mul1" = yes)
+AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL2, test "$mpi_mod_asm_mpih_mul2" = yes)
+AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL3, test "$mpi_mod_asm_mpih_mul3" = yes)
+AM_CONDITIONAL(MPI_MOD_ASM_MPIH_LSHIFT, test "$mpi_mod_asm_mpih_lshift" = yes)
+AM_CONDITIONAL(MPI_MOD_ASM_MPIH_RSHIFT, test "$mpi_mod_asm_mpih_rshift" = yes)
+AM_CONDITIONAL(MPI_MOD_ASM_UDIV, test "$mpi_mod_asm_udiv" = yes)
+AM_CONDITIONAL(MPI_MOD_ASM_UDIV_QRNND, test "$mpi_mod_asm_udiv_qrnnd" = yes)
+AM_CONDITIONAL(MPI_MOD_C_MPIH_ADD1, test "$mpi_mod_c_mpih_add1" = yes)
+AM_CONDITIONAL(MPI_MOD_C_MPIH_SUB1, test "$mpi_mod_c_mpih_sub1" = yes)
+AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL1, test "$mpi_mod_c_mpih_mul1" = yes)
+AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL2, test "$mpi_mod_c_mpih_mul2" = yes)
+AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL3, test "$mpi_mod_c_mpih_mul3" = yes)
+AM_CONDITIONAL(MPI_MOD_C_MPIH_LSHIFT, test "$mpi_mod_c_mpih_lshift" = yes)
+AM_CONDITIONAL(MPI_MOD_C_MPIH_RSHIFT, test "$mpi_mod_c_mpih_rshift" = yes)
+AM_CONDITIONAL(MPI_MOD_C_UDIV, test "$mpi_mod_c_udiv" = yes)
+AM_CONDITIONAL(MPI_MOD_C_UDIV_QRNND, test "$mpi_mod_c_udiv_qrnnd" = yes)
+
+if test "$is_development_version" = "yes"; then
     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
               [Defined if this is not a regular release])
 fi
 
     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
               [Defined if this is not a regular release])
 fi
 
+
 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
 
 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
 
-GNUPG_CHECK_GNUMAKE
+
+# 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])
+
+AC_ARG_ENABLE(gcc-warnings,
+             AC_HELP_STRING([--enable-gcc-warnings],
+                            [enable more verbose gcc warnings]),
+             [more_gcc_warnings="$enableval"],
+             [more_gcc_warnings="no"])
 
 if test "$GCC" = yes; then
 
 if test "$GCC" = yes; then
-    if test "$MAINTAINER_MODE" = "yes"; then
+    if test "$USE_MAINTAINER_MODE" = "yes" ||
+       test "$more_gcc_warnings" = "yes"; then
         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
+        if test "$more_gcc_warnings" = "yes"; then
+            CFLAGS="$CFLAGS -W -Wextra -Wbad-function-cast"
+            CFLAGS="$CFLAGS -Wwrite-strings"
+            CFLAGS="$CFLAGS -Wdeclaration-after-statement"
+            CFLAGS="$CFLAGS -Wno-missing-field-initializers"
+            CFLAGS="$CFLAGS -Wno-sign-compare"
+            # Note: We don't use -Wunreachable-code because this gives
+            # warnings for all asserts and many inline functions like
+            # gpg_error (gcc 4.1.2 20060928).
+        fi
     else
         CFLAGS="$CFLAGS -Wall"
     fi
     else
         CFLAGS="$CFLAGS -Wall"
     fi
+
+    AC_MSG_CHECKING([if gcc supports -Wpointer-arith])
+    _gcc_cflags_save=$CFLAGS
+    CFLAGS="-Wpointer-arith"
+    AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),_gcc_wopt=yes,_gcc_wopt=no)
+    AC_MSG_RESULT($_gcc_wopt)
+    CFLAGS=$_gcc_cflags_save;
+    if test x"$_gcc_wopt" = xyes ; then
+       CFLAGS="$CFLAGS -Wpointer-arith"
+    fi
 fi
 
 fi
 
-dnl
-dnl Make the version number in src/gcrypt.h the same as the one here.
-dnl (this is easier than to have a *.in file just for one substitution)
-dnl
-GNUPG_FIX_HDR_VERSION([src/gcrypt.h], GCRYPT_VERSION)
+# Check whether as(1) supports a noeexecstack feature.  This test
+# includes an override option.
+CL_AS_NOEXECSTACK
 
 
-LIBGCRYPT_CONFIG_LIBS="-lgcrypt"
-LIBGCRYPT_CONFIG_CFLAGS=""
+
+AC_SUBST(LIBGCRYPT_CONFIG_API_VERSION)
 AC_SUBST(LIBGCRYPT_CONFIG_LIBS)
 AC_SUBST(LIBGCRYPT_CONFIG_CFLAGS)
 AC_SUBST(LIBGCRYPT_CONFIG_LIBS)
 AC_SUBST(LIBGCRYPT_CONFIG_CFLAGS)
+AC_SUBST(LIBGCRYPT_THREAD_MODULES)
 
 
-AC_CONFIG_COMMANDS([gcrypt-defs],[[
+AC_CONFIG_COMMANDS([gcrypt-conf],[[
 chmod +x src/libgcrypt-config
 chmod +x src/libgcrypt-config
-cat >gcrypt-defs.tmp <<G10EOF
-/* Generated automatically by configure */
-#ifdef HAVE_DRIVE_LETTERS
-  #define GNUPG_LOCALEDIR "c:/lib/gnupg/locale"
-  #define GNUPG_LIBDIR  "c:/lib/gnupg"
-  #define GNUPG_DATADIR "c:/lib/gnupg"
-  #define GNUPG_HOMEDIR "c:/gnupg-test"
-#else
-  #define GNUPG_LOCALEDIR "${prefix}/${DATADIRNAME}/locale"
-  #define GNUPG_LIBDIR  "${libdir}/gnupg"
-  #define GNUPG_DATADIR "${datadir}/gnupg"
-  #ifdef __VMS
-    #define GNUPG_HOMEDIR "/SYS\$LOGIN/gnupg" 
-  #else
-    #define GNUPG_HOMEDIR "~/.gnupg-test" 
-  #endif
-#endif
-G10EOF
-if cmp -s gcrypt-defs.h gcrypt-defs.tmp 2>/dev/null; then
-    echo "gcrypt-defs.h is unchanged"
-    rm -f gcrypt-defs.tmp
-else
-    rm -f gcrypt-defs.h
-    mv gcrypt-defs.tmp gcrypt-defs.h
-    echo "gcrypt-defs.h created"
-fi
 ]],[[
 prefix=$prefix
 exec_prefix=$exec_prefix
 ]],[[
 prefix=$prefix
 exec_prefix=$exec_prefix
@@ -831,30 +872,240 @@ datadir=$datadir
 DATADIRNAME=$DATADIRNAME
 ]])
 
 DATADIRNAME=$DATADIRNAME
 ]])
 
+#####################
+#### Conclusion. ####
+#####################
+
+# Define conditional sources and config.h symbols depending on the
+# selected ciphers, pubkey-ciphers, digests and random modules.
+
+LIST_MEMBER(arcfour, $enabled_ciphers)
+if test "$found" = "1"; then 
+   GCRYPT_CIPHERS="$GCRYPT_CIPHERS arcfour.lo"
+   AC_DEFINE(USE_ARCFOUR, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(blowfish, $enabled_ciphers)
+if test "$found" = "1" ; then
+   GCRYPT_CIPHERS="$GCRYPT_CIPHERS blowfish.lo"
+   AC_DEFINE(USE_BLOWFISH, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(cast5, $enabled_ciphers)
+if test "$found" = "1" ; then
+   GCRYPT_CIPHERS="$GCRYPT_CIPHERS cast5.lo"
+   AC_DEFINE(USE_CAST5, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(des, $enabled_ciphers)
+if test "$found" = "1" ; then
+   GCRYPT_CIPHERS="$GCRYPT_CIPHERS des.lo"
+   AC_DEFINE(USE_DES, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(aes, $enabled_ciphers)
+if test "$found" = "1" ; then
+   GCRYPT_CIPHERS="$GCRYPT_CIPHERS rijndael.lo"
+   AC_DEFINE(USE_AES, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(twofish, $enabled_ciphers)
+if test "$found" = "1" ; then
+   GCRYPT_CIPHERS="$GCRYPT_CIPHERS twofish.lo"
+   AC_DEFINE(USE_TWOFISH, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(serpent, $enabled_ciphers)
+if test "$found" = "1" ; then
+   GCRYPT_CIPHERS="$GCRYPT_CIPHERS serpent.lo"
+   AC_DEFINE(USE_SERPENT, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(rfc2268, $enabled_ciphers)
+if test "$found" = "1" ; then
+   GCRYPT_CIPHERS="$GCRYPT_CIPHERS rfc2268.lo"
+   AC_DEFINE(USE_RFC2268, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(seed, $enabled_ciphers)
+if test "$found" = "1" ; then
+   GCRYPT_CIPHERS="$GCRYPT_CIPHERS seed.lo"
+   AC_DEFINE(USE_SEED, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(camellia, $enabled_ciphers)
+if test "$found" = "1" ; then
+   GCRYPT_CIPHERS="$GCRYPT_CIPHERS camellia.lo camellia-glue.lo"
+   AC_DEFINE(USE_CAMELLIA, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(dsa, $enabled_pubkey_ciphers)
+if test "$found" = "1" ; then
+   GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS dsa.lo"
+   AC_DEFINE(USE_DSA, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(rsa, $enabled_pubkey_ciphers)
+if test "$found" = "1" ; then
+   GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS rsa.lo"
+   AC_DEFINE(USE_RSA, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(elgamal, $enabled_pubkey_ciphers)
+if test "$found" = "1" ; then
+   GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS elgamal.lo"
+   AC_DEFINE(USE_ELGAMAL, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(ecc, $enabled_pubkey_ciphers)
+if test "$found" = "1" ; then
+   GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS ecc.lo"
+   AC_DEFINE(USE_ECC, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(crc, $enabled_digests)
+if test "$found" = "1" ; then
+   GCRYPT_DIGESTS="$GCRYPT_DIGESTS crc.lo"
+   AC_DEFINE(USE_CRC, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(md4, $enabled_digests)
+if test "$found" = "1" ; then
+   GCRYPT_DIGESTS="$GCRYPT_DIGESTS md4.lo"
+   AC_DEFINE(USE_MD4, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(md5, $enabled_digests)
+if test "$found" = "1" ; then
+   GCRYPT_DIGESTS="$GCRYPT_DIGESTS md5.lo"
+   AC_DEFINE(USE_MD5, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(sha256, $enabled_digests)
+if test "$found" = "1" ; then
+   GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha256.lo"
+   AC_DEFINE(USE_SHA256, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(sha512, $enabled_digests)
+if test "$found" = "1" ; then
+   GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha512.lo"
+   AC_DEFINE(USE_SHA512, 1, [Defined if this module should be included])
+fi
 
 
+LIST_MEMBER(tiger, $enabled_digests)
+if test "$found" = "1" ; then
+   GCRYPT_DIGESTS="$GCRYPT_DIGESTS tiger.lo"
+   AC_DEFINE(USE_TIGER, 1, [Defined if this module should be included])
+fi
+
+LIST_MEMBER(whirlpool, $enabled_digests)
+if test "$found" = "1" ; then
+   GCRYPT_DIGESTS="$GCRYPT_DIGESTS whirlpool.lo"
+   AC_DEFINE(USE_WHIRLPOOL, 1, [Defined if this module should be included])
+fi
+
+# rmd160 and sha1 should be included always.
+GCRYPT_DIGESTS="$GCRYPT_DIGESTS rmd160.lo sha1.lo"
+AC_DEFINE(USE_RMD160, 1, [Defined if this module should be included])
+AC_DEFINE(USE_SHA1, 1,   [Defined if this module should be included])
+
+LIST_MEMBER(linux, $random_modules)
+if test "$found" = "1" ; then
+   GCRYPT_RANDOM="$GCRYPT_RANDOM rndlinux.lo"
+   AC_DEFINE(USE_RNDLINUX, 1, [Defined if the /dev/random RNG should be used.])
+fi
+
+LIST_MEMBER(unix, $random_modules)
+if test "$found" = "1" ; then
+   GCRYPT_RANDOM="$GCRYPT_RANDOM rndunix.lo"
+   AC_DEFINE(USE_RNDUNIX, 1, [Defined if the default Unix RNG should be used.])
+   print_egd_notice=yes
+fi
+
+LIST_MEMBER(egd, $random_modules)
+if test "$found" = "1" ; then
+   GCRYPT_RANDOM="$GCRYPT_RANDOM rndegd.lo"
+   AC_DEFINE(USE_RNDEGD, 1, [Defined if the EGD based RNG should be used.])
+fi
+
+LIST_MEMBER(w32, $random_modules)
+if test "$found" = "1" ; then
+   GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32.lo"
+   AC_DEFINE(USE_RNDW32, 1, 
+             [Defined if the Windows specific RNG should be used.])
+fi
+
+AC_SUBST([GCRYPT_CIPHERS])
+AC_SUBST([GCRYPT_PUBKEY_CIPHERS])
+AC_SUBST([GCRYPT_DIGESTS])
+AC_SUBST([GCRYPT_RANDOM])
+
+AC_SUBST(LIBGCRYPT_CIPHERS, $enabled_ciphers)
+AC_SUBST(LIBGCRYPT_PUBKEY_CIPHERS, $enabled_pubkey_ciphers)
+AC_SUBST(LIBGCRYPT_DIGESTS, $enabled_digests)
+
+# For printing the configuration we need a colon separated list of
+# algorithm names.
+tmp=`echo "$enabled_ciphers" | tr ' ' : `
+AC_DEFINE_UNQUOTED(LIBGCRYPT_CIPHERS, "$tmp", 
+                   [List of available cipher algorithms])
+tmp=`echo "$enabled_pubkey_ciphers" | tr ' ' : `
+AC_DEFINE_UNQUOTED(LIBGCRYPT_PUBKEY_CIPHERS, "$tmp", 
+                   [List of available public key cipher algorithms])
+tmp=`echo "$enabled_digests" | tr ' ' : `
+AC_DEFINE_UNQUOTED(LIBGCRYPT_DIGESTS, "$tmp", 
+                   [List of available digest algorithms])
+
+
+
+# Generate extended version information for W32.
+if test "$have_w32_system" = yes; then
+   BUILD_TIMESTAMP=`date --iso-8601=minutes`
+   changequote(,)dnl 
+   BUILD_FILEVERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./;s/\./,/g'`
+   changequote([,])dnl
+   BUILD_FILEVERSION="${BUILD_FILEVERSION}${BUILD_REVISION}"
+fi
+AC_SUBST(BUILD_REVISION)
+AC_SUBST(BUILD_TIMESTAMP)
+AC_SUBST(BUILD_FILEVERSION)
+AC_DEFINE_UNQUOTED(BUILD_REVISION, "$BUILD_REVISION", 
+                   [Subversion revision used to build this package])
+
+
+
+# And create the files.
 AC_CONFIG_FILES([
 Makefile
 AC_CONFIG_FILES([
 Makefile
+m4/Makefile
 mpi/Makefile
 cipher/Makefile
 mpi/Makefile
 cipher/Makefile
+random/Makefile
 doc/Makefile
 doc/Makefile
-doc/version.sgml
 src/Makefile
 src/Makefile
+src/gcrypt.h
 src/libgcrypt-config
 src/libgcrypt-config
+src/versioninfo.rc
 tests/Makefile
 tests/Makefile
-w32-dll/Makefile
 ])
 AC_OUTPUT
 
 # Give some feedback
 ])
 AC_OUTPUT
 
 # Give some feedback
-echo
+echo "
+        Libgcrypt v${VERSION} has been configured as follows:
+        
+        Platform:  $PRINTABLE_OS_NAME ($host)
+"
+
 
 if test "$print_egd_notice" = "yes"; then
 cat <<G10EOF
   
    The performance of the Unix random gatherer module (rndunix) is not
    very good and it does not keep the entropy pool over multiple
 
 if test "$print_egd_notice" = "yes"; then
 cat <<G10EOF
   
    The performance of the Unix random gatherer module (rndunix) 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
+   invocations of Libgcrypt base applications.  The suggested way to
+   overcome this problem is to use the
   
                  Entropy Gathering Daemon (EGD)
   
   
                  Entropy Gathering Daemon (EGD)
   
@@ -868,21 +1119,10 @@ cat <<G10EOF
 G10EOF
 fi
 
 G10EOF
 fi
 
-warn=""
-for file in "random_modules"; do
-  case "$file" in rndunix | rndw32) warn="$warn $file";; esac
-done
-if test -n "$warn"; then
+if test -n "$gpl"; then
   echo "Please note that you are building a version of Libgcrypt with"
   echo "Please note that you are building a version of Libgcrypt with"
-  echo "  $warn"
+  echo "  $gpl"
   echo "included.  These parts are licensed under the GPL and thus the"
   echo "use of this library has to comply with the conditions of the GPL."
 fi
 
   echo "included.  These parts are licensed under the GPL and thus the"
   echo "use of this library has to comply with the conditions of the GPL."
 fi
 
-# Give some feedback
-echo
-echo   "                Configured for: $PRINTABLE_OS_NAME ($target)"
-if test -n "$show_extraasm"; then
-  echo "  Extra cpu specific functions:$show_extraasm"
-fi
-echo