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