2006-07-04 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 gl_TYPE_SOCKLEN_T
514
515 #######################################
516 #### Checks for library functions. ####
517 #######################################
518
519 AC_FUNC_VPRINTF
520 # We have replacements for these in src/missing-string.c
521 AC_CHECK_FUNCS(stpcpy strcasecmp)
522 # We have replacements for these in src/g10lib.h
523 AC_CHECK_FUNCS(strtoul memmove stricmp atexit raise)
524 # Other checks
525 AC_CHECK_FUNCS(strerror rand mmap getpagesize waitpid wait4)
526 AC_CHECK_FUNCS(gettimeofday getrusage gethrtime clock_gettime)
527 AC_CHECK_FUNCS(fcntl ftruncate)
528
529 GNUPG_CHECK_MLOCK
530
531 # Check whether we can use Linux capabilities as requested.
532 if test "$use_capabilities" = "yes" ; then
533 use_capabilities=no
534 AC_CHECK_HEADERS(sys/capability.h)
535 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
536   AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
537   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
538      AC_DEFINE(USE_CAPABILITIES,1,
539                [define if capabilities should be used])
540      LIBS="$LIBS -lcap"
541      use_capabilities=yes
542   fi
543 fi
544 if test "$use_capabilities" = "no" ; then
545     AC_MSG_WARN([[
546 ***
547 *** The use of capabilities on this system is not possible.
548 *** You need a recent Linux kernel and some patches:
549 ***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
550 ***   fcap-module-990613.tar.gz     (kernel module)
551 ***   libcap-1.92.tar.gz            (user mode library and utilities)
552 *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
553 *** set (filesystems menu). Be warned: This code is *really* ALPHA.
554 ***]])
555 fi
556 fi
557
558 # Check whether a random device is available.
559 if test "$try_dev_random" = yes ; then
560     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
561     [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
562       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
563     if test "$ac_cv_have_dev_random" = yes; then
564         AC_DEFINE(HAVE_DEV_RANDOM,1,
565                  [defined if the system supports a random device] )
566     fi
567 else
568     AC_MSG_CHECKING(for random device)
569     ac_cv_have_dev_random=no
570     AC_MSG_RESULT(has been disabled)
571 fi
572
573 # Figure out the random modules for this configuration.
574 if test "$random" = "default"; then
575
576     # Select default value.
577     if test "$ac_cv_have_dev_random" = yes; then
578         # Try Linuxish random device.
579         random_modules="linux"
580     else
581         case "${target}" in
582         *-*-mingw32*|*-*-cygwin*)
583           # Windows random device.
584           random_modules="w32"
585           ;;
586         *)
587           # Build everything, allow to select at runtime.
588           random_modules="$auto_random_modules"
589           ;;
590         esac    
591     fi
592 else
593     if test "$random" = "auto"; then
594         # Build everything, allow to select at runtime.
595         random_modules="$auto_random_modules"
596     else
597         random_modules="$random"
598     fi
599 fi
600
601
602 #
603 # Setup assembler stuff.
604 #
605 GNUPG_SYS_SYMBOL_UNDERSCORE()
606 AC_MSG_CHECKING(for mpi assembler functions)
607 if test -f $srcdir/mpi/config.links ; then
608     . $srcdir/mpi/config.links
609     AC_CONFIG_LINKS("$mpi_ln_list")
610     ac_cv_mpi_mod_list="$mpi_mod_list"
611     ac_cv_mpi_sflags="$mpi_sflags"
612     ac_cv_mpi_config_done="yes"
613     AC_MSG_RESULT(done)
614 else
615     AC_MSG_RESULT(failed)
616     AC_MSG_ERROR([mpi/config.links missing!])
617 fi
618 MPI_MOD_LIST_LO=""
619 MPI_MOD_LIST_O=""
620 if test "$ac_cv_mpi_mod_list" != ""; then
621   for i in $ac_cv_mpi_mod_list; do
622       MPI_MOD_LIST_LO="$MPI_MOD_LIST_LO $i.lo"
623       MPI_MOD_LIST_O="$MPI_MOD_LIST_O $i.o"
624   done
625 fi
626 AC_SUBST(MPI_MOD_LIST_LO)
627 AC_SUBST(MPI_MOD_LIST_O)
628 MPI_SFLAGS="$ac_cv_mpi_sflags"
629 AC_SUBST(MPI_SFLAGS)
630
631 # Allow users to append something to the version string without
632 # flagging it as development version.  The user version part is
633 # considered everything after a dash.
634 changequote(,)#
635 tmp_pat='[a-zA-Z]'
636 changequote([,])#
637 if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
638     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
639               [Defined if this is not a regular release])
640 fi
641
642 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
643
644 # We don't check for GNU make anymore - automake should not have the
645 # old flaws anymore.
646 #GNUPG_CHECK_GNUMAKE
647
648 AC_ARG_ENABLE(gcc-warnings,
649               AC_HELP_STRING([--enable-gcc-warnings],
650                              [enable more verbose gcc warnings]),
651               [more_gcc_warnings="$enableval"],
652               [more_gcc_warnings="no"])
653
654 if test "$GCC" = yes; then
655     if test "$USE_MAINTAINER_MODE" = "yes" ||
656        test "$more_gcc_warnings" = "yes"; then
657         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
658         if test "$more_gcc_warnings" = "yes"; then
659             CFLAGS="$CFLAGS -W -Wpointer-arith -Wbad-function-cast"
660             CFLAGS="$CFLAGS -Wwrite-strings -Wunreachable-code"
661             CFLAGS="$CFLAGS -Wno-sign-compare"
662         fi
663     else
664         CFLAGS="$CFLAGS -Wall"
665     fi
666 fi
667
668 #
669 # Make the version number in src/gcrypt.h the same as the one here.
670 # (this is easier than to have a *.in file just for one substitution)
671 #
672 GNUPG_FIX_HDR_VERSION([src/gcrypt.h], GCRYPT_VERSION)
673
674 AC_SUBST(LIBGCRYPT_CONFIG_API_VERSION)
675 AC_SUBST(LIBGCRYPT_CONFIG_LIBS)
676 AC_SUBST(LIBGCRYPT_CONFIG_CFLAGS)
677 AC_SUBST(LIBGCRYPT_THREAD_MODULES)
678
679 AC_CONFIG_COMMANDS([gcrypt-conf],[[
680 chmod +x src/libgcrypt-config
681 ]],[[
682 prefix=$prefix
683 exec_prefix=$exec_prefix
684 libdir=$libdir
685 datadir=$datadir
686 DATADIRNAME=$DATADIRNAME
687 ]])
688
689 #####################
690 #### Conclusion. ####
691 #####################
692
693 # Define conditional sources and config.h symbols depending on the
694 # selected ciphers, pubkey-ciphers, digests and random modules.
695
696 LIST_MEMBER(arcfour, $enabled_ciphers)
697 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS arcfour.lo"
698 AC_DEFINE_UNQUOTED(USE_ARCFOUR, $found,
699                                  [Defined if this module should be included])
700
701 LIST_MEMBER(blowfish, $enabled_ciphers)
702 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS blowfish.lo"
703 AC_DEFINE_UNQUOTED(USE_BLOWFISH, $found,
704                                   [Defined if this module should be included])
705
706 LIST_MEMBER(cast5, $enabled_ciphers)
707 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS cast5.lo"
708 AC_DEFINE_UNQUOTED(USE_CAST5, $found,
709                                [Defined if this module should be included])
710
711 LIST_MEMBER(des, $enabled_ciphers)
712 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS des.lo"
713 AC_DEFINE_UNQUOTED(USE_DES, $found,
714                              [Defined if this module should be included])
715
716 LIST_MEMBER(aes, $enabled_ciphers)
717 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS rijndael.lo"
718 AC_DEFINE_UNQUOTED(USE_AES, $found,
719                              [Defined if this module should be included])
720
721 LIST_MEMBER(twofish, $enabled_ciphers)
722 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS twofish.lo"
723 AC_DEFINE_UNQUOTED(USE_TWOFISH, $found,
724                                  [Defined if this module should be included])
725
726 LIST_MEMBER(serpent, $enabled_ciphers)
727 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS serpent.lo"
728 AC_DEFINE_UNQUOTED(USE_SERPENT, $found,
729                                  [Defined if this module should be included])
730
731 LIST_MEMBER(rfc2268, $enabled_ciphers)
732 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS rfc2268.lo"
733 AC_DEFINE_UNQUOTED(USE_RFC2268, $found,
734                                  [Defined if this module should be included])
735
736 LIST_MEMBER(dsa, $enabled_pubkey_ciphers)
737 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS dsa.lo"
738 AC_DEFINE_UNQUOTED(USE_DSA, $found,
739                              [Defined if this module should be included])
740
741 LIST_MEMBER(rsa, $enabled_pubkey_ciphers)
742 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS rsa.lo"
743 AC_DEFINE_UNQUOTED(USE_RSA, $found,
744                             [Defined if this module should be included])
745
746 LIST_MEMBER(elgamal, $enabled_pubkey_ciphers)
747 test "$found" = "1" \ 
748      && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS elgamal.lo"
749 AC_DEFINE_UNQUOTED(USE_ELGAMAL, $found,
750                                 [Defined if this module should be included])
751
752 LIST_MEMBER(crc, $enabled_digests)
753 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS crc.lo"
754 AC_DEFINE_UNQUOTED(USE_CRC, $found,
755                             [Defined if this module should be included])
756
757 LIST_MEMBER(md4, $enabled_digests)
758 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS md4.lo"
759 AC_DEFINE_UNQUOTED(USE_MD4, $found,
760                              [Defined if this module should be included])
761
762 LIST_MEMBER(md5, $enabled_digests)
763 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS md5.lo"
764 AC_DEFINE_UNQUOTED(USE_MD5, $found,
765                              [Defined if this module should be included])
766
767 LIST_MEMBER(sha256, $enabled_digests)
768 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha256.lo"
769 AC_DEFINE_UNQUOTED(USE_SHA256, $found,
770                                 [Defined if this module should be included])
771
772 LIST_MEMBER(sha512, $enabled_digests)
773 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha512.lo"
774 AC_DEFINE_UNQUOTED(USE_SHA512, $found,
775                                 [Defined if this module should be included])
776
777 LIST_MEMBER(tiger, $enabled_digests)
778 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS tiger.lo"
779 AC_DEFINE_UNQUOTED(USE_TIGER, $found,
780                                [Defined if this module should be included])
781
782 LIST_MEMBER(whirlpool, $enabled_digests)
783 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS whirlpool.lo"
784 AC_DEFINE_UNQUOTED(USE_WHIRLPOOL, $found,
785                                [Defined if this module should be included])
786
787 # rmd160 and sha1 should be included always.
788 GCRYPT_DIGESTS="$GCRYPT_DIGESTS rmd160.lo sha1.lo"
789 AC_DEFINE_UNQUOTED(USE_RMD160, 1, [Defined if this module should be included])
790 AC_DEFINE_UNQUOTED(USE_SHA1, 1,   [Defined if this module should be included])
791
792 LIST_MEMBER(linux, $random_modules)
793 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndlinux.lo"
794 AC_DEFINE_UNQUOTED(USE_RNDLINUX, $found,
795                    [Defined if the /dev/random based RNG should be used.])
796
797
798 LIST_MEMBER(unix, $random_modules)
799 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndunix.lo"
800 AC_DEFINE_UNQUOTED(USE_RNDUNIX, $found,
801                   [Defined if the default Unix RNG should be used.])
802 if test "$found" = "1"; then
803    print_egd_notice=yes
804 fi
805
806 LIST_MEMBER(egd, $random_modules)
807 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndegd.lo"
808 AC_DEFINE_UNQUOTED(USE_RNDEGD, $found,
809                   [Defined if the EGD based RNG should be used.])
810
811 LIST_MEMBER(w32, $random_modules)
812 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32.lo"
813 AC_DEFINE_UNQUOTED(USE_RNDW32, $found,
814                   [Defined if the Windows specific RNG should be used.])
815
816 AC_SUBST([GCRYPT_CIPHERS])
817 AC_SUBST([GCRYPT_PUBKEY_CIPHERS])
818 AC_SUBST([GCRYPT_DIGESTS])
819 AC_SUBST([GCRYPT_RANDOM])
820
821 AC_SUBST(LIBGCRYPT_CIPHERS, $enabled_ciphers)
822 AC_SUBST(LIBGCRYPT_PUBKEY_CIPHERS, $enabled_pubkey_ciphers)
823 AC_SUBST(LIBGCRYPT_DIGESTS, $enabled_digests)
824
825 AC_CONFIG_FILES([
826 Makefile
827 mpi/Makefile
828 cipher/Makefile
829 doc/Makefile
830 src/Makefile
831 src/libgcrypt-config
832 tests/Makefile
833 w32-dll/Makefile
834 ])
835 AC_OUTPUT
836
837 # Give some feedback
838 echo
839
840 if test "$print_egd_notice" = "yes"; then
841 cat <<G10EOF
842   
843    The performance of the Unix random gatherer module (rndunix) is not
844    very good and it does not keep the entropy pool over multiple
845    invocations of GnuPG.  The suggested way to overcome this problem is
846    to use the
847   
848                  Entropy Gathering Daemon (EGD)
849   
850    which provides a entropy source for the whole system.  It is written
851    in Perl and available at the GnuPG FTP servers.  To enable EGD you
852    should rerun configure with the option "--enable-static-rnd=egd".
853    For more information consult the GnuPG webpages:
854   
855              http://www.gnupg.org/download.html#egd
856
857 G10EOF
858 fi
859
860 warn=""
861 for file in "random_modules"; do
862   case "$file" in rndunix | rndw32) warn="$warn $file";; esac
863 done
864 if test -n "$warn"; then
865   echo "Please note that you are building a version of Libgcrypt with"
866   echo "  $warn"
867   echo "included.  These parts are licensed under the GPL and thus the"
868   echo "use of this library has to comply with the conditions of the GPL."
869 fi
870
871 # Give some feedback
872 echo   "                Configured for: $PRINTABLE_OS_NAME ($target)"
873 echo