2006-06-08 Marcus Brinkmann <marcus@g10code.de>
[libgcrypt.git] / configure.ac
1 # Configure.ac script for Libgcrypt
2 # Copyright (C) 1998, 1999, 2000, 2001, 2002
3 #               2003, 2004, 2006 Free Software Foundation, Inc.
4 #
5 # This file is part of Libgcrypt.
6 #
7 # Libgcrypt is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU Lesser general Public License as
9 # published by the Free Software Foundation; either version 2.1 of
10 # the License, or (at your option) any later version.
11 #
12 # Libgcrypt is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU Lesser General Public License for more details.
16 #
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this program; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
20 #
21 # (Process this file with autoconf to produce a configure script.)
22 AC_REVISION($Revision$)
23 AC_PREREQ(2.59)
24 min_automake_version="1.9.3"
25
26 # Version number: Remember to change it immediately *after* a release
27 # but remove a "-cvs" prefix right *before* a release and append it
28 # soon later.
29
30 AC_INIT(libgcrypt, 1.3.0-cvs, bug-libgcrypt@gnupg.org)
31
32 # LT Version numbers, remember to change them just *before* a release.
33 #   (Interfaces removed:    CURRENT++, AGE=0, REVISION=0)
34 #   (Interfaces added:      CURRENT++, AGE++, REVISION=0)
35 #   (No interfaces changed:                   REVISION++)
36 LIBGCRYPT_LT_CURRENT=12
37 LIBGCRYPT_LT_AGE=1
38 LIBGCRYPT_LT_REVISION=1
39
40 # If the API is changed in an incompatible way: increment the next counter.
41 LIBGCRYPT_CONFIG_API_VERSION=1
42
43 NEED_GPG_ERROR_VERSION=1.0
44
45
46 PACKAGE=$PACKAGE_NAME
47 VERSION=$PACKAGE_VERSION
48
49 AC_CONFIG_SRCDIR([src/gcrypt.h])
50 AC_CANONICAL_TARGET()
51 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
52 AM_CONFIG_HEADER(config.h)
53 AM_MAINTAINER_MODE
54
55 AH_TOP([
56 /* need this, because some autoconf tests rely on this (e.g. stpcpy)
57  * and it should be used for new programs  */
58 #define _GNU_SOURCE  1
59 ])
60
61 AH_BOTTOM([
62 #define _GCRYPT_IN_LIBGCRYPT 1
63 ])
64
65 AH_VERBATIM([_REENTRANT],
66 [/* To allow the use of Libgcrypt in multithreaded programs we have to use
67     special features from the library. */
68 #ifndef _REENTRANT
69 # define _REENTRANT 1
70 #endif
71 ])
72
73
74 AC_SUBST(LIBGCRYPT_LT_CURRENT)
75 AC_SUBST(LIBGCRYPT_LT_AGE)
76 AC_SUBST(LIBGCRYPT_LT_REVISION)
77 AC_SUBST(PACKAGE)
78 AC_SUBST(VERSION)
79 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
80 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
81
82
83 ######################
84 ##  Basic checks.  ### (we need some results later on (e.g. $GCC)
85 ######################
86
87 AC_PROG_MAKE_SET
88 missing_dir=`cd $ac_aux_dir && pwd`
89 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
90 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
91 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
92 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
93 # AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
94 AC_PROG_CC
95 AC_PROG_CPP
96 AM_PROG_AS
97 AC_ISC_POSIX
98 AC_PROG_INSTALL
99 AC_PROG_AWK
100
101 AM_PROG_LIBTOOL
102
103
104 ##########################
105 ## General definitions. ##
106 ##########################
107
108 # Used by libgcrypt-config
109 LIBGCRYPT_CONFIG_LIBS="-lgcrypt"
110 LIBGCRYPT_CONFIG_CFLAGS=""
111
112 # Definitions for symmetric ciphers.
113 available_ciphers="arcfour blowfish cast5 des aes twofish serpent rfc2268"
114 enabled_ciphers=""
115
116 # Definitions for public-key ciphers.
117 available_pubkey_ciphers="dsa elgamal rsa"
118 enabled_pubkey_ciphers=""
119
120 # Definitions for message digests.
121 available_digests="crc md4 md5 rmd160 sha1 sha256"
122 available_digests_64="sha512 tiger whirlpool"
123 enabled_digests=""
124
125 # Definitions for random modules.
126 available_random_modules="linux egd unix"
127 auto_random_modules="$available_random_modules"
128
129 # Supported thread backends.
130 LIBGCRYPT_THREAD_MODULES=""
131
132 # Other definitions.
133 print_egd_notice=no
134 have_w32_system=no
135
136 # Setup some stuff depending on host/target.
137 case "${target}" in
138     *-*-mingw32*)
139       available_random_modules="w32"
140       ac_cv_have_dev_random=no
141       have_w32_system=yes
142       AC_DEFINE(USE_ONLY_8DOT3,1,
143                 [set this to limit filenames to the 8.3 format])
144       AC_DEFINE(HAVE_DRIVE_LETTERS,1,
145                 [defined if we must run on a stupid file system])
146       AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
147                 [defined if we run on some of the PCDOS like systems 
148                  (DOS, Windoze. OS/2) with special properties like
149                   no file modes])
150       ;;
151
152     i?86-emx-os2 | i?86-*-os2*emx)
153         # OS/2 with the EMX environment
154         ac_cv_have_dev_random=no
155         AC_DEFINE(HAVE_DRIVE_LETTERS)
156         AC_DEFINE(HAVE_DOSISH_SYSTEM)
157         ;;
158
159     i?86-*-msdosdjgpp*)
160         # DOS with the DJGPP environment
161         ac_cv_have_dev_random=no
162         AC_DEFINE(HAVE_DRIVE_LETTERS)
163         AC_DEFINE(HAVE_DOSISH_SYSTEM)
164         ;;
165
166     *-*-freebsd*)
167        # FreeBSD
168        CPPFLAGS="$CPPFLAGS -I/usr/local/include"
169        LDFLAGS="$LDFLAGS -L/usr/local/lib"
170        ;;
171
172     *-*-hpux*)
173         if test -z "$GCC" ; then
174             CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
175         fi
176         ;;
177     *-dec-osf4*)
178         if test -z "$GCC" ; then
179             # Suppress all warnings
180             # to get rid of the unsigned/signed char mismatch warnings.
181             CFLAGS="$CFLAGS -w"
182         fi
183         ;;
184     m68k-atari-mint)
185         ;;
186     *)
187       ;;
188 esac
189
190 if test "$have_w32_system" = yes; then
191    AC_DEFINE(HAVE_W32_SYSTEM,1, [Defined if we run on a W32 API based system])
192 fi
193 AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
194
195
196
197 # A printable OS Name is sometime useful.
198 case "${target}" in
199     *-*-mingw32*)
200         PRINTABLE_OS_NAME="MingW32"
201         ;;
202
203     i?86-emx-os2 | i?86-*-os2*emx )
204         PRINTABLE_OS_NAME="OS/2"
205         ;;
206
207     i?86-*-msdosdjgpp*)
208         PRINTABLE_OS_NAME="MSDOS/DJGPP"
209         ;;
210
211     *-linux*)
212         PRINTABLE_OS_NAME="GNU/Linux"
213         ;;
214
215     *)
216         PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
217         ;;
218 esac
219
220
221 case "${target}" in
222     *-openbsd*)
223         # FIXME: Are these the best flags for OpenBSD?
224         NAME_OF_DEV_RANDOM="/dev/srandom"
225         NAME_OF_DEV_URANDOM="/dev/urandom"
226 #       DYNLINK_MOD_CFLAGS="-shared -rdynamic $CFLAGS_PIC -Wl,-Bshareable -Wl,-x"
227         ;;
228
229     *-solaris* | *-irix* | *-dec-osf* | *-netbsd* )
230         NAME_OF_DEV_RANDOM="/dev/random"
231         NAME_OF_DEV_URANDOM="/dev/random"
232 #       DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
233         ;;
234
235     *)
236         NAME_OF_DEV_RANDOM="/dev/random"
237         NAME_OF_DEV_URANDOM="/dev/urandom"
238         # -shared is a gcc-ism.  Find pic flags from GNUPG_CHECK_PIC.
239 #        if test -n "$GCC" ; then
240 #           DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"                            
241 #        else
242 #           DYNLINK_MOD_CFLAGS="$CFLAGS_PIC"
243 #        fi
244         ;;
245 esac
246
247
248 AC_C_BIGENDIAN
249
250 AC_CHECK_SIZEOF(unsigned short, 2)
251 AC_CHECK_SIZEOF(unsigned int, 4)
252 AC_CHECK_SIZEOF(unsigned long, 4)
253 AC_CHECK_SIZEOF(unsigned long long, 0)
254
255 if test "$ac_cv_sizeof_unsigned_short" = "0" \
256    || test "$ac_cv_sizeof_unsigned_int" = "0" \
257    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
258     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
259 fi
260
261 # Do we have any 64-bit data types?
262 if test "$ac_cv_sizeof_unsigned_int" != "8" \
263    && test "$ac_cv_sizeof_unsigned_long" != "8" \
264    && test "$ac_cv_sizeof_unsigned_long_long" != "8" \
265    && test "$ac_cv_sizeof_uint64_t" != "8"; then
266     AC_MSG_WARN([No 64-bit types.  Disabling TIGER/192, SHA-384, and SHA-512])
267 else
268   available_digests="$available_digests $available_digests_64"
269 fi
270
271 # If not specified otherwise, all available algorithms will be
272 # included.
273 default_ciphers="$available_ciphers"
274 default_pubkey_ciphers="$available_pubkey_ciphers"
275 default_digests="$available_digests"
276
277 ############################
278 ## Command line switches. ##
279 ############################
280
281 # Implementation of the --enable-ciphers switch.
282 AC_ARG_ENABLE(ciphers,
283               AC_HELP_STRING([--enable-ciphers=ciphers],
284                              [select the symmetric ciphers to include]),
285               [enabled_ciphers=`echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]'`],
286               [enabled_ciphers=""])
287 if test "x$enabled_ciphers" = "x" \
288    -o "$enabled_ciphers" = "yes"  \
289    -o "$enabled_ciphers" = "no"; then
290    enabled_ciphers=$default_ciphers
291 fi
292 AC_MSG_CHECKING([which symmetric ciphers to include])
293 for cipher in $enabled_ciphers; do
294     LIST_MEMBER($cipher, $available_ciphers)
295     if test "$found" = "0"; then
296        AC_MSG_ERROR([unsupported cipher specified])
297     fi
298 done
299 AC_MSG_RESULT([$enabled_ciphers])
300
301 # Implementation of the --enable-pubkey-ciphers switch.
302 AC_ARG_ENABLE(pubkey-ciphers,
303               AC_HELP_STRING([--enable-pubkey-ciphers=ciphers],
304                              [select the public-key ciphers to include]),
305               [enabled_pubkey_ciphers=`echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]'`],
306               [enabled_pubkey_ciphers=""])
307 if test "x$enabled_pubkey_ciphers" = "x" \
308    -o "$enabled_pubkey_ciphers" = "yes"  \
309    -o "$enabled_pubkey_ciphers" = "no"; then
310    enabled_pubkey_ciphers=$default_pubkey_ciphers
311 fi
312 AC_MSG_CHECKING([which public-key ciphers to include])
313 for cipher in $enabled_pubkey_ciphers; do
314     LIST_MEMBER($cipher, $available_pubkey_ciphers)
315     if test "$found" = "0"; then
316        AC_MSG_ERROR([unsupported public-key cipher specified])
317     fi
318 done
319 AC_MSG_RESULT([$enabled_pubkey_ciphers])
320
321 # Implementation of the --enable-digests switch.
322 AC_ARG_ENABLE(digests,
323               AC_HELP_STRING([--enable-digests=digests],
324                              [select the message digests to include]),
325               [enabled_digests=`echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]'`],
326               [enabled_digests=""])
327 if test "x$enabled_digests" = "x" \
328    -o "$enabled_digests" = "yes"  \
329    -o "$enabled_digests" = "no"; then
330    enabled_digests=$default_digests
331 fi
332 AC_MSG_CHECKING([which message digests to include])
333 for digest in $enabled_digests; do
334     LIST_MEMBER($digest, $available_digests)
335     if test "$found" = "0"; then
336        AC_MSG_ERROR([unsupported message digest specified])
337     fi
338 done
339 AC_MSG_RESULT([$enabled_digests])
340
341 # Implementation of the --enable-random switch.
342 AC_ARG_ENABLE(random,
343               AC_HELP_STRING([--enable-random=name],
344                              [select which random number generator to use]),
345               [random=`echo $enableval | tr '[A-Z]' '[a-z]'`],
346               [])
347 if test "x$random" = "x" -o "$random" = "yes" -o "$random" = "no"; then
348     random=default
349 fi
350 AC_MSG_CHECKING([which random module to use])
351 if test "$random" != "default" -a "$random" != "auto"; then
352     LIST_MEMBER($random, $available_random_modules)
353     if test "$found" = "0"; then
354        AC_MSG_ERROR([unsupported random module specified])
355     fi
356 fi
357 AC_MSG_RESULT($random)
358
359 # Implementation of the --disable-dev-random switch.
360 AC_MSG_CHECKING([whether use of /dev/random is requested])
361 AC_ARG_ENABLE(dev-random,
362 [  --disable-dev-random    disable the use of dev random],
363     try_dev_random=$enableval, try_dev_random=yes)
364 AC_MSG_RESULT($try_dev_random)
365
366 # Implementation of the --with-egd-socket switch.
367 AC_ARG_WITH(egd-socket,
368     [  --with-egd-socket=NAME  Use NAME for the EGD socket)],
369             egd_socket_name="$withval", egd_socket_name="" )
370 AC_DEFINE_UNQUOTED(EGD_SOCKET_NAME, "$egd_socket_name",
371                    [Define if you don't want the default EGD socket name.
372                     For details see cipher/rndegd.c])
373
374 # Implementation of --disable-asm.
375 AC_MSG_CHECKING([whether assembler modules are requested])
376 AC_ARG_ENABLE([asm],
377               AC_HELP_STRING([--disable-asm],
378                              [Disable assembler modules]),
379               [try_asm_modules=$enableval],
380               [try_asm_modules=yes])
381 AC_MSG_RESULT($try_asm_modules)
382
383 # Implementation of the --enable-m-guard switch.
384 AC_MSG_CHECKING([whether memory guard is requested])
385 AC_ARG_ENABLE(m-guard,
386     [  --enable-m-guard        enable memory guard facility],
387     use_m_guard=$enableval, use_m_guard=no)
388     AC_MSG_RESULT($use_m_guard)
389 if test "$use_m_guard" = yes ; then
390     AC_DEFINE(M_GUARD,1,[Define to use the (obsolete) malloc guarding feature])
391 fi
392
393 # Implementation of the --with-capabilities switch.
394 # Check whether we want to use Linux capabilities
395 AC_MSG_CHECKING([whether use of capabilities is requested])
396 AC_ARG_WITH(capabilities,
397     [  --with-capabilities     use linux capabilities [default=no]],
398 [use_capabilities="$withval"],[use_capabilities=no])
399 AC_MSG_RESULT($use_capabilities)
400
401
402
403 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
404                    [A human readable text with the name of the OS])
405
406 # For some systems we know that we have ld_version scripts.  
407 # Use it then as default.
408 have_ld_version_script=no
409 case "${host}" in
410     *-*-linux*)
411         have_ld_version_script=yes
412         ;;
413     *-*-gnu*)
414         have_ld_version_script=yes
415         ;;
416 esac
417 AC_ARG_ENABLE([ld-version-script],
418               AC_HELP_STRING([--enable-ld-version-script],
419                              [enable/disable use of linker version script.
420                               (default is system dependent)]),
421               [have_ld_version_script=$enableval],
422               [ : ] )
423 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
424
425 AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM",
426                    [defined to the name of the strong random device])
427 AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM",
428                    [defined to the name of the weaker random device])
429
430 ###############################
431 #### Checks for libraries. ####
432 ###############################
433
434 #
435 # gpg-error is required.
436 #
437 AM_PATH_GPG_ERROR("$NEED_GPG_ERROR_VERSION")
438 if test "x$GPG_ERROR_LIBS" = "x"; then
439   AC_MSG_ERROR([libgpg-error is needed.
440                 See ftp://ftp.gnupg.org/gcrypt/libgpg-error/ .])
441 fi
442
443 AC_DEFINE(GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_GCRYPT,
444           [The default error source for libgcrypt.])
445
446 #
447 # Check whether the GNU Pth library is available.  We require this 
448 # to build the optional gcryptrnd program.
449 #
450 AC_ARG_WITH(pth-prefix,
451             AC_HELP_STRING([--with-pth-prefix=PFX],
452                            [prefix where GNU Pth is installed (optional)]),
453      pth_config_prefix="$withval", pth_config_prefix="")
454 if test x$pth_config_prefix != x ; then
455    PTH_CONFIG="$pth_config_prefix/bin/pth-config"
456 fi
457 AC_PATH_PROG(PTH_CONFIG, pth-config, no)
458 if test "$PTH_CONFIG" = "no"; then
459     AC_MSG_WARN([[
460 ***
461 *** To build the Libgcrypt's random humber daemon
462 *** we need the support of the GNU Portable Threads Library.
463 *** Download it from ftp://ftp.gnu.org/gnu/pth/
464 *** On a Debian GNU/Linux system you might want to try 
465 ***   apt-get install libpth-dev
466 ***]])
467  else
468   GNUPG_PTH_VERSION_CHECK([1.3.7])
469   if test $have_pth = yes; then      
470      PTH_CFLAGS=`$PTH_CONFIG --cflags`
471      PTH_LIBS=`$PTH_CONFIG --ldflags`
472      PTH_LIBS="$PTH_LIBS `$PTH_CONFIG --libs --all`"
473      AC_DEFINE(USE_GNU_PTH, 1,
474               [Defined if the GNU Portable Thread Library should be used])
475      AC_DEFINE(HAVE_PTH, 1,
476               [Defined if the GNU Pth is available])
477   fi
478 fi
479 AC_SUBST(PTH_CFLAGS)
480 AC_SUBST(PTH_LIBS)
481
482
483 # Solaris needs -lsocket and -lnsl. Unisys system includes
484 # gethostbyname in libsocket but needs libnsl for socket.
485 AC_SEARCH_LIBS(setsockopt, [socket], ,
486         [AC_SEARCH_LIBS(setsockopt, [socket], , , [-lnsl])])
487 AC_SEARCH_LIBS(setsockopt, [nsl])
488
489 ##################################
490 #### Checks for header files. ####
491 ##################################
492
493 AC_HEADER_STDC
494 AC_CHECK_HEADERS(unistd.h sys/select.h)
495
496 ##########################################
497 #### Checks for typedefs, structures, ####
498 ####  and compiler characteristics.   ####
499 ##########################################
500
501 AC_C_CONST
502 AC_C_INLINE
503 AC_TYPE_SIZE_T
504 AC_TYPE_SIGNAL
505 AC_DECL_SYS_SIGLIST
506
507 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
508 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
509 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
510 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
511 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
512
513 AC_CHECK_TYPE(socklen_t,,
514               [AC_DEFINE_UNQUOTED([socklen_t],
515                                   [int],
516                                   [Define to `int' if unavailable.])],
517               [
518 #include <sys/types.h>
519 #include <sys/socket.h>
520               ])
521
522 TYPE_SOCKLEN_T
523
524 #######################################
525 #### Checks for library functions. ####
526 #######################################
527
528 AC_FUNC_VPRINTF
529 # We have replacements for these in src/missing-string.c
530 AC_CHECK_FUNCS(stpcpy strcasecmp)
531 # We have replacements for these in src/g10lib.h
532 AC_CHECK_FUNCS(strtoul memmove stricmp atexit raise)
533 # Other checks
534 AC_CHECK_FUNCS(strerror rand mmap getpagesize waitpid wait4)
535 AC_CHECK_FUNCS(gettimeofday getrusage gethrtime clock_gettime)
536 AC_CHECK_FUNCS(fcntl ftruncate)
537
538 GNUPG_CHECK_MLOCK
539
540 # Check whether we can use Linux capabilities as requested.
541 if test "$use_capabilities" = "yes" ; then
542 use_capabilities=no
543 AC_CHECK_HEADERS(sys/capability.h)
544 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
545   AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
546   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
547      AC_DEFINE(USE_CAPABILITIES,1,
548                [define if capabilities should be used])
549      LIBS="$LIBS -lcap"
550      use_capabilities=yes
551   fi
552 fi
553 if test "$use_capabilities" = "no" ; then
554     AC_MSG_WARN([[
555 ***
556 *** The use of capabilities on this system is not possible.
557 *** You need a recent Linux kernel and some patches:
558 ***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
559 ***   fcap-module-990613.tar.gz     (kernel module)
560 ***   libcap-1.92.tar.gz            (user mode library and utilities)
561 *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
562 *** set (filesystems menu). Be warned: This code is *really* ALPHA.
563 ***]])
564 fi
565 fi
566
567 # Check whether a random device is available.
568 if test "$try_dev_random" = yes ; then
569     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
570     [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
571       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
572     if test "$ac_cv_have_dev_random" = yes; then
573         AC_DEFINE(HAVE_DEV_RANDOM,1,
574                  [defined if the system supports a random device] )
575     fi
576 else
577     AC_MSG_CHECKING(for random device)
578     ac_cv_have_dev_random=no
579     AC_MSG_RESULT(has been disabled)
580 fi
581
582 # Figure out the random modules for this configuration.
583 if test "$random" = "default"; then
584
585     # Select default value.
586     if test "$ac_cv_have_dev_random" = yes; then
587         # Try Linuxish random device.
588         random_modules="linux"
589     else
590         case "${target}" in
591         *-*-mingw32*|*-*-cygwin*)
592           # Windows random device.
593           random_modules="w32"
594           ;;
595         *)
596           # Build everything, allow to select at runtime.
597           random_modules="$auto_random_modules"
598           ;;
599         esac    
600     fi
601 else
602     if test "$random" = "auto"; then
603         # Build everything, allow to select at runtime.
604         random_modules="$auto_random_modules"
605     else
606         random_modules="$random"
607     fi
608 fi
609
610
611 #
612 # Setup assembler stuff.
613 #
614 GNUPG_SYS_SYMBOL_UNDERSCORE()
615 AC_MSG_CHECKING(for mpi assembler functions)
616 if test -f $srcdir/mpi/config.links ; then
617     . $srcdir/mpi/config.links
618     AC_CONFIG_LINKS("$mpi_ln_list")
619     ac_cv_mpi_mod_list="$mpi_mod_list"
620     ac_cv_mpi_sflags="$mpi_sflags"
621     ac_cv_mpi_config_done="yes"
622     AC_MSG_RESULT(done)
623 else
624     AC_MSG_RESULT(failed)
625     AC_MSG_ERROR([mpi/config.links missing!])
626 fi
627 MPI_MOD_LIST_LO=""
628 MPI_MOD_LIST_O=""
629 if test "$ac_cv_mpi_mod_list" != ""; then
630   for i in $ac_cv_mpi_mod_list; do
631       MPI_MOD_LIST_LO="$MPI_MOD_LIST_LO $i.lo"
632       MPI_MOD_LIST_O="$MPI_MOD_LIST_O $i.o"
633   done
634 fi
635 AC_SUBST(MPI_MOD_LIST_LO)
636 AC_SUBST(MPI_MOD_LIST_O)
637 MPI_SFLAGS="$ac_cv_mpi_sflags"
638 AC_SUBST(MPI_SFLAGS)
639
640 # Allow users to append something to the version string without
641 # flagging it as development version.  The user version part is
642 # considered everything after a dash.
643 changequote(,)#
644 tmp_pat='[a-zA-Z]'
645 changequote([,])#
646 if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
647     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
648               [Defined if this is not a regular release])
649 fi
650
651 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
652
653 # We don't check for GNU make anymore - automake should not have the
654 # old flaws anymore.
655 #GNUPG_CHECK_GNUMAKE
656
657 AC_ARG_ENABLE(gcc-warnings,
658               AC_HELP_STRING([--enable-gcc-warnings],
659                              [enable more verbose gcc warnings]),
660               [more_gcc_warnings="$enableval"],
661               [more_gcc_warnings="no"])
662
663 if test "$GCC" = yes; then
664     if test "$USE_MAINTAINER_MODE" = "yes" ||
665        test "$more_gcc_warnings" = "yes"; then
666         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
667         if test "$more_gcc_warnings" = "yes"; then
668             CFLAGS="$CFLAGS -W -Wpointer-arith -Wbad-function-cast"
669             CFLAGS="$CFLAGS -Wwrite-strings -Wunreachable-code"
670             CFLAGS="$CFLAGS -Wno-sign-compare"
671         fi
672     else
673         CFLAGS="$CFLAGS -Wall"
674     fi
675 fi
676
677 #
678 # Make the version number in src/gcrypt.h the same as the one here.
679 # (this is easier than to have a *.in file just for one substitution)
680 #
681 GNUPG_FIX_HDR_VERSION([src/gcrypt.h], GCRYPT_VERSION)
682
683 AC_SUBST(LIBGCRYPT_CONFIG_API_VERSION)
684 AC_SUBST(LIBGCRYPT_CONFIG_LIBS)
685 AC_SUBST(LIBGCRYPT_CONFIG_CFLAGS)
686 AC_SUBST(LIBGCRYPT_THREAD_MODULES)
687
688 AC_CONFIG_COMMANDS([gcrypt-conf],[[
689 chmod +x src/libgcrypt-config
690 ]],[[
691 prefix=$prefix
692 exec_prefix=$exec_prefix
693 libdir=$libdir
694 datadir=$datadir
695 DATADIRNAME=$DATADIRNAME
696 ]])
697
698 #####################
699 #### Conclusion. ####
700 #####################
701
702 # Define conditional sources and config.h symbols depending on the
703 # selected ciphers, pubkey-ciphers, digests and random modules.
704
705 LIST_MEMBER(arcfour, $enabled_ciphers)
706 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS arcfour.lo"
707 AC_DEFINE_UNQUOTED(USE_ARCFOUR, $found,
708                                  [Defined if this module should be included])
709
710 LIST_MEMBER(blowfish, $enabled_ciphers)
711 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS blowfish.lo"
712 AC_DEFINE_UNQUOTED(USE_BLOWFISH, $found,
713                                   [Defined if this module should be included])
714
715 LIST_MEMBER(cast5, $enabled_ciphers)
716 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS cast5.lo"
717 AC_DEFINE_UNQUOTED(USE_CAST5, $found,
718                                [Defined if this module should be included])
719
720 LIST_MEMBER(des, $enabled_ciphers)
721 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS des.lo"
722 AC_DEFINE_UNQUOTED(USE_DES, $found,
723                              [Defined if this module should be included])
724
725 LIST_MEMBER(aes, $enabled_ciphers)
726 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS rijndael.lo"
727 AC_DEFINE_UNQUOTED(USE_AES, $found,
728                              [Defined if this module should be included])
729
730 LIST_MEMBER(twofish, $enabled_ciphers)
731 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS twofish.lo"
732 AC_DEFINE_UNQUOTED(USE_TWOFISH, $found,
733                                  [Defined if this module should be included])
734
735 LIST_MEMBER(serpent, $enabled_ciphers)
736 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS serpent.lo"
737 AC_DEFINE_UNQUOTED(USE_SERPENT, $found,
738                                  [Defined if this module should be included])
739
740 LIST_MEMBER(rfc2268, $enabled_ciphers)
741 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS rfc2268.lo"
742 AC_DEFINE_UNQUOTED(USE_RFC2268, $found,
743                                  [Defined if this module should be included])
744
745 LIST_MEMBER(dsa, $enabled_pubkey_ciphers)
746 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS dsa.lo"
747 AC_DEFINE_UNQUOTED(USE_DSA, $found,
748                              [Defined if this module should be included])
749
750 LIST_MEMBER(rsa, $enabled_pubkey_ciphers)
751 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS rsa.lo"
752 AC_DEFINE_UNQUOTED(USE_RSA, $found,
753                             [Defined if this module should be included])
754
755 LIST_MEMBER(elgamal, $enabled_pubkey_ciphers)
756 test "$found" = "1" \ 
757      && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS elgamal.lo"
758 AC_DEFINE_UNQUOTED(USE_ELGAMAL, $found,
759                                 [Defined if this module should be included])
760
761 LIST_MEMBER(crc, $enabled_digests)
762 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS crc.lo"
763 AC_DEFINE_UNQUOTED(USE_CRC, $found,
764                             [Defined if this module should be included])
765
766 LIST_MEMBER(md4, $enabled_digests)
767 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS md4.lo"
768 AC_DEFINE_UNQUOTED(USE_MD4, $found,
769                              [Defined if this module should be included])
770
771 LIST_MEMBER(md5, $enabled_digests)
772 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS md5.lo"
773 AC_DEFINE_UNQUOTED(USE_MD5, $found,
774                              [Defined if this module should be included])
775
776 LIST_MEMBER(sha256, $enabled_digests)
777 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha256.lo"
778 AC_DEFINE_UNQUOTED(USE_SHA256, $found,
779                                 [Defined if this module should be included])
780
781 LIST_MEMBER(sha512, $enabled_digests)
782 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha512.lo"
783 AC_DEFINE_UNQUOTED(USE_SHA512, $found,
784                                 [Defined if this module should be included])
785
786 LIST_MEMBER(tiger, $enabled_digests)
787 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS tiger.lo"
788 AC_DEFINE_UNQUOTED(USE_TIGER, $found,
789                                [Defined if this module should be included])
790
791 LIST_MEMBER(whirlpool, $enabled_digests)
792 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS whirlpool.lo"
793 AC_DEFINE_UNQUOTED(USE_WHIRLPOOL, $found,
794                                [Defined if this module should be included])
795
796 # rmd160 and sha1 should be included always.
797 GCRYPT_DIGESTS="$GCRYPT_DIGESTS rmd160.lo sha1.lo"
798 AC_DEFINE_UNQUOTED(USE_RMD160, 1, [Defined if this module should be included])
799 AC_DEFINE_UNQUOTED(USE_SHA1, 1,   [Defined if this module should be included])
800
801 LIST_MEMBER(linux, $random_modules)
802 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndlinux.lo"
803 AC_DEFINE_UNQUOTED(USE_RNDLINUX, $found,
804                    [Defined if the /dev/random based RNG should be used.])
805
806
807 LIST_MEMBER(unix, $random_modules)
808 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndunix.lo"
809 AC_DEFINE_UNQUOTED(USE_RNDUNIX, $found,
810                   [Defined if the default Unix RNG should be used.])
811 if test "$found" = "1"; then
812    print_egd_notice=yes
813 fi
814
815 LIST_MEMBER(egd, $random_modules)
816 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndegd.lo"
817 AC_DEFINE_UNQUOTED(USE_RNDEGD, $found,
818                   [Defined if the EGD based RNG should be used.])
819
820 LIST_MEMBER(w32, $random_modules)
821 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32.lo"
822 AC_DEFINE_UNQUOTED(USE_RNDW32, $found,
823                   [Defined if the Windows specific RNG should be used.])
824
825 AC_SUBST([GCRYPT_CIPHERS])
826 AC_SUBST([GCRYPT_PUBKEY_CIPHERS])
827 AC_SUBST([GCRYPT_DIGESTS])
828 AC_SUBST([GCRYPT_RANDOM])
829
830 AC_SUBST(LIBGCRYPT_CIPHERS, $enabled_ciphers)
831 AC_SUBST(LIBGCRYPT_PUBKEY_CIPHERS, $enabled_pubkey_ciphers)
832 AC_SUBST(LIBGCRYPT_DIGESTS, $enabled_digests)
833
834 AC_CONFIG_FILES([
835 Makefile
836 mpi/Makefile
837 cipher/Makefile
838 doc/Makefile
839 src/Makefile
840 src/libgcrypt-config
841 tests/Makefile
842 w32-dll/Makefile
843 ])
844 AC_OUTPUT
845
846 # Give some feedback
847 echo
848
849 if test "$print_egd_notice" = "yes"; then
850 cat <<G10EOF
851   
852    The performance of the Unix random gatherer module (rndunix) is not
853    very good and it does not keep the entropy pool over multiple
854    invocations of GnuPG.  The suggested way to overcome this problem is
855    to use the
856   
857                  Entropy Gathering Daemon (EGD)
858   
859    which provides a entropy source for the whole system.  It is written
860    in Perl and available at the GnuPG FTP servers.  To enable EGD you
861    should rerun configure with the option "--enable-static-rnd=egd".
862    For more information consult the GnuPG webpages:
863   
864              http://www.gnupg.org/download.html#egd
865
866 G10EOF
867 fi
868
869 warn=""
870 for file in "random_modules"; do
871   case "$file" in rndunix | rndw32) warn="$warn $file";; esac
872 done
873 if test -n "$warn"; then
874   echo "Please note that you are building a version of Libgcrypt with"
875   echo "  $warn"
876   echo "included.  These parts are licensed under the GPL and thus the"
877   echo "use of this library has to comply with the conditions of the GPL."
878 fi
879
880 # Give some feedback
881 echo   "                Configured for: $PRINTABLE_OS_NAME ($target)"
882 echo