2010-04-19 Marcus Brinkmann <marcus@g10code.de>
[libgcrypt.git] / configure.ac
1 # Configure.ac script for Libgcrypt
2 # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006,
3 #               2007, 2008, 2009 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, see <http://www.gnu.org/licenses/>.
19
20 # (Process this file with autoconf to produce a configure script.)
21 AC_REVISION($Revision$)
22 AC_PREREQ(2.60)
23 min_automake_version="1.10"
24
25
26 # Remember to change the version number immediately *after* a release.
27 # Set my_issvn to "yes" for non-released code.  Remember to run an
28 # "svn up" and "autogen.sh" right before creating a distribution.
29 m4_define([my_version], [1.5.0])
30 m4_define([my_issvn], [yes])
31
32 m4_define([svn_revision], m4_esyscmd([printf "%d" $(svn info 2>/dev/null \
33           | sed -n '/^Revision:/ s/[^0-9]//gp'|head -1)]))
34 m4_define([git_revision], m4_esyscmd([git branch -v 2>/dev/null \
35           | awk '/^\* / {printf "%s",$3}']))
36 AC_INIT([libgcrypt], 
37         [my_version[]m4_if(my_issvn,[yes],
38         [m4_if(git_revision,[],[-svn[]svn_revision],[-git[]git_revision])])],
39         [bug-libgcrypt@gnupg.org])
40 # LT Version numbers, remember to change them just *before* a release.
41 #   (Interfaces removed:    CURRENT++, AGE=0, REVISION=0)
42 #   (Interfaces added:      CURRENT++, AGE++, REVISION=0)
43 #   (No interfaces changed:                   REVISION++)
44 # NOTE: As an exception the the LT versions are already set for 1.5.0!
45 LIBGCRYPT_LT_CURRENT=17
46 LIBGCRYPT_LT_AGE=6
47 LIBGCRYPT_LT_REVISION=0
48
49
50 # If the API is changed in an incompatible way: increment the next counter.
51 LIBGCRYPT_CONFIG_API_VERSION=1
52
53 NEED_GPG_ERROR_VERSION=1.8
54
55 is_development_version=my_issvn
56 BUILD_REVISION=svn_revision
57 PACKAGE=$PACKAGE_NAME
58 VERSION=$PACKAGE_VERSION
59
60 AC_CONFIG_SRCDIR([src/libgcrypt.vers])
61 AM_INIT_AUTOMAKE([])
62 AM_CONFIG_HEADER(config.h)
63 AC_CONFIG_MACRO_DIR([m4])
64 AC_CONFIG_LIBOBJ_DIR([compat])
65 AC_CANONICAL_HOST
66 AM_MAINTAINER_MODE
67
68 AH_TOP([
69 #ifndef _GCRYPT_CONFIG_H_INCLUDED
70 #define _GCRYPT_CONFIG_H_INCLUDED
71 /* need this, because some autoconf tests rely on this (e.g. stpcpy)
72  * and it should be used for new programs  */
73 #define _GNU_SOURCE  1
74 ])
75
76 AH_BOTTOM([
77 #define _GCRYPT_IN_LIBGCRYPT 1
78
79 /* If the configure check for endianness has been disabled, get it from
80    OS macros.  This is intended for making fat binary builds on OS X.  */
81 #ifdef DISABLED_ENDIAN_CHECK
82 # if defined(__BIG_ENDIAN__)
83 #  define WORDS_BIGENDIAN 1
84 # elif defined(__LITTLE_ENDIAN__)
85 #  undef WORDS_BIGENDIAN
86 # else
87 #  error "No endianness found"
88 # endif
89 #endif /*DISABLED_ENDIAN_CHECK*/
90
91 /* We basically use the original Camellia source.  Make sure the symbols 
92    properly prefixed.  */
93 #define CAMELLIA_EXT_SYM_PREFIX _gcry_
94
95 /* This error code is only available with gpg-error 1.7.  Thus
96    we define it here with the usual gcry prefix.  */
97 #define GCRY_GPG_ERR_NOT_OPERATIONAL  176
98
99
100 #endif /*_GCRYPT_CONFIG_H_INCLUDED*/
101 ])
102
103 AH_VERBATIM([_REENTRANT],
104 [/* To allow the use of Libgcrypt in multithreaded programs we have to use
105     special features from the library. */
106 #ifndef _REENTRANT
107 # define _REENTRANT 1
108 #endif
109 ])
110
111
112 AC_SUBST(LIBGCRYPT_LT_CURRENT)
113 AC_SUBST(LIBGCRYPT_LT_AGE)
114 AC_SUBST(LIBGCRYPT_LT_REVISION)
115 AC_SUBST(PACKAGE)
116 AC_SUBST(VERSION)
117 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
118 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
119
120
121 ######################
122 ##  Basic checks.  ### (we need some results later on (e.g. $GCC)
123 ######################
124
125 AC_PROG_MAKE_SET
126 missing_dir=`cd $ac_aux_dir && pwd`
127 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
128 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
129 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
130 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
131 # AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
132 AC_PROG_CC
133 AC_PROG_CPP
134 AM_PROG_CC_C_O
135 AM_PROG_AS
136 AC_ISC_POSIX
137 AC_PROG_INSTALL
138 AC_PROG_AWK
139
140 LT_PREREQ([2.2.6])
141 LT_INIT([win32-dll disable-static])
142 LT_LANG([Windows Resource])
143
144
145 ##########################
146 ## General definitions. ##
147 ##########################
148
149 # Used by libgcrypt-config
150 LIBGCRYPT_CONFIG_LIBS="-lgcrypt"
151 LIBGCRYPT_CONFIG_CFLAGS=""
152
153 # Definitions for symmetric ciphers.
154 available_ciphers="arcfour blowfish cast5 des aes twofish serpent rfc2268 seed"
155 available_ciphers="$available_ciphers camellia"
156 enabled_ciphers=""
157
158 # Definitions for public-key ciphers.
159 available_pubkey_ciphers="dsa elgamal rsa ecc"
160 enabled_pubkey_ciphers=""
161
162 # Definitions for message digests.
163 available_digests="crc md4 md5 rmd160 sha1 sha256"
164 available_digests_64="sha512 tiger whirlpool"
165 enabled_digests=""
166
167 # Definitions for random modules.
168 available_random_modules="linux egd unix"
169 auto_random_modules="$available_random_modules"
170
171 # Supported thread backends.
172 LIBGCRYPT_THREAD_MODULES=""
173
174 # Other definitions.
175 print_egd_notice=no
176 have_w32_system=no
177 have_w32ce_system=no
178
179 # Setup some stuff depending on host.
180 case "${host}" in
181     *-*-mingw32*)
182       ac_cv_have_dev_random=no
183       have_w32_system=yes
184       case "${host}" in 
185         *-mingw32ce*)
186             have_w32ce_system=yes
187             available_random_modules="w32ce"
188             ;;
189         *)
190             available_random_modules="w32"
191             ;;
192       esac
193       AC_DEFINE(USE_ONLY_8DOT3,1,
194                 [set this to limit filenames to the 8.3 format])
195       AC_DEFINE(HAVE_DRIVE_LETTERS,1,
196                 [defined if we must run on a stupid file system])
197       AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
198                 [defined if we run on some of the PCDOS like systems 
199                  (DOS, Windoze. OS/2) with special properties like
200                   no file modes])
201       ;;
202
203     i?86-emx-os2 | i?86-*-os2*emx)
204         # OS/2 with the EMX environment
205         ac_cv_have_dev_random=no
206         AC_DEFINE(HAVE_DRIVE_LETTERS)
207         AC_DEFINE(HAVE_DOSISH_SYSTEM)
208         ;;
209
210     i?86-*-msdosdjgpp*)
211         # DOS with the DJGPP environment
212         ac_cv_have_dev_random=no
213         AC_DEFINE(HAVE_DRIVE_LETTERS)
214         AC_DEFINE(HAVE_DOSISH_SYSTEM)
215         ;;
216
217     *-*-freebsd*)
218        # FreeBSD
219        CPPFLAGS="$CPPFLAGS -I/usr/local/include"
220        LDFLAGS="$LDFLAGS -L/usr/local/lib"
221        ;;
222
223     *-*-hpux*)
224         if test -z "$GCC" ; then
225             CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
226         fi
227         ;;
228     *-dec-osf4*)
229         if test -z "$GCC" ; then
230             # Suppress all warnings
231             # to get rid of the unsigned/signed char mismatch warnings.
232             CFLAGS="$CFLAGS -w"
233         fi
234         ;;
235     m68k-atari-mint)
236         ;;
237     *)
238       ;;
239 esac
240
241 if test "$have_w32_system" = yes; then
242    AC_DEFINE(HAVE_W32_SYSTEM,1, [Defined if we run on a W32 API based system])
243    if test "$have_w32ce_system" = yes; then
244      AC_DEFINE(HAVE_W32CE_SYSTEM,1,[Defined if we run on WindowsCE])
245    fi
246 fi
247 AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
248 AM_CONDITIONAL(HAVE_W32CE_SYSTEM, test "$have_w32ce_system" = yes)
249
250
251
252 # A printable OS Name is sometimes useful.
253 case "${host}" in
254     *-*-mingw32ce*)
255         PRINTABLE_OS_NAME="W32CE"
256         ;;
257
258     *-*-mingw32*)
259         PRINTABLE_OS_NAME="W32"
260         ;;
261
262     i?86-emx-os2 | i?86-*-os2*emx )
263         PRINTABLE_OS_NAME="OS/2"
264         ;;
265
266     i?86-*-msdosdjgpp*)
267         PRINTABLE_OS_NAME="MSDOS/DJGPP"
268         ;;
269
270     *-linux*)
271         PRINTABLE_OS_NAME="GNU/Linux"
272         ;;
273
274     *)
275         PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
276         ;;
277 esac
278
279 #
280 # Figure out the name of the random device
281 #
282 case "${host}" in
283     *-openbsd*)
284         NAME_OF_DEV_RANDOM="/dev/srandom"
285         NAME_OF_DEV_URANDOM="/dev/urandom"
286         ;;
287
288     *)
289         NAME_OF_DEV_RANDOM="/dev/random"
290         NAME_OF_DEV_URANDOM="/dev/urandom"
291         ;;
292 esac
293
294
295 AC_ARG_ENABLE(endian-check,
296               AC_HELP_STRING([--disable-endian-check],
297               [disable the endian check and trust the OS provided macros]),
298               endiancheck=$enableval,endiancheck=yes)
299 if test x"$endiancheck" = xyes ; then
300   AC_C_BIGENDIAN
301 else
302   AC_DEFINE(DISABLED_ENDIAN_CHECK,1,[configure did not test for endianess])
303 fi
304
305 AC_CHECK_SIZEOF(unsigned short, 2)
306 AC_CHECK_SIZEOF(unsigned int, 4)
307 AC_CHECK_SIZEOF(unsigned long, 4)
308 AC_CHECK_SIZEOF(unsigned long long, 0)
309
310 AC_TYPE_UINTPTR_T
311
312 if test "$ac_cv_sizeof_unsigned_short" = "0" \
313    || test "$ac_cv_sizeof_unsigned_int" = "0" \
314    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
315     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
316 fi
317
318 # Do we have any 64-bit data types?
319 if test "$ac_cv_sizeof_unsigned_int" != "8" \
320    && test "$ac_cv_sizeof_unsigned_long" != "8" \
321    && test "$ac_cv_sizeof_unsigned_long_long" != "8" \
322    && test "$ac_cv_sizeof_uint64_t" != "8"; then
323     AC_MSG_WARN([No 64-bit types.  Disabling TIGER/192, SHA-384, and SHA-512])
324 else
325   available_digests="$available_digests $available_digests_64"
326 fi
327
328 # If not specified otherwise, all available algorithms will be
329 # included.  
330 default_ciphers="$available_ciphers"
331 default_pubkey_ciphers="$available_pubkey_ciphers"
332 default_digests="$available_digests"
333
334 ############################
335 ## Command line switches. ##
336 ############################
337
338 # Implementation of the --enable-ciphers switch.
339 AC_ARG_ENABLE(ciphers,
340               AC_HELP_STRING([--enable-ciphers=ciphers],
341                              [select the symmetric ciphers to include]),
342               [enabled_ciphers=`echo $enableval | tr ',:' '  ' | tr '[A-Z]' '[a-z]'`],
343               [enabled_ciphers=""])
344 if test "x$enabled_ciphers" = "x" \
345    -o "$enabled_ciphers" = "yes"  \
346    -o "$enabled_ciphers" = "no"; then
347    enabled_ciphers=$default_ciphers
348 fi
349 AC_MSG_CHECKING([which symmetric ciphers to include])
350 for cipher in $enabled_ciphers; do
351     LIST_MEMBER($cipher, $available_ciphers)
352     if test "$found" = "0"; then
353        AC_MSG_ERROR([unsupported cipher "$cipher" specified])
354     fi
355 done
356 AC_MSG_RESULT([$enabled_ciphers])
357
358 # Implementation of the --enable-pubkey-ciphers switch.
359 AC_ARG_ENABLE(pubkey-ciphers,
360               AC_HELP_STRING([--enable-pubkey-ciphers=ciphers],
361                              [select the public-key ciphers to include]),
362               [enabled_pubkey_ciphers=`echo $enableval | tr ',:' '  ' | tr '[A-Z]' '[a-z]'`],
363               [enabled_pubkey_ciphers=""])
364 if test "x$enabled_pubkey_ciphers" = "x" \
365    -o "$enabled_pubkey_ciphers" = "yes"  \
366    -o "$enabled_pubkey_ciphers" = "no"; then
367    enabled_pubkey_ciphers=$default_pubkey_ciphers
368 fi
369 AC_MSG_CHECKING([which public-key ciphers to include])
370 for cipher in $enabled_pubkey_ciphers; do
371     LIST_MEMBER($cipher, $available_pubkey_ciphers)
372     if test "$found" = "0"; then
373        AC_MSG_ERROR([unsupported public-key cipher specified])
374     fi
375 done
376 AC_MSG_RESULT([$enabled_pubkey_ciphers])
377
378 # Implementation of the --enable-digests switch.
379 AC_ARG_ENABLE(digests,
380               AC_HELP_STRING([--enable-digests=digests],
381                              [select the message digests to include]),
382               [enabled_digests=`echo $enableval | tr ',:' '  ' | tr '[A-Z]' '[a-z]'`],
383               [enabled_digests=""])
384 if test "x$enabled_digests" = "x" \
385    -o "$enabled_digests" = "yes"  \
386    -o "$enabled_digests" = "no"; then
387    enabled_digests=$default_digests
388 fi
389 AC_MSG_CHECKING([which message digests to include])
390 for digest in $enabled_digests; do
391     LIST_MEMBER($digest, $available_digests)
392     if test "$found" = "0"; then
393        AC_MSG_ERROR([unsupported message digest specified])
394     fi
395 done
396 AC_MSG_RESULT([$enabled_digests])
397
398 # Implementation of the --enable-random switch.
399 AC_ARG_ENABLE(random,
400               AC_HELP_STRING([--enable-random=name],
401                              [select which random number generator to use]),
402               [random=`echo $enableval | tr '[A-Z]' '[a-z]'`],
403               [])
404 if test "x$random" = "x" -o "$random" = "yes" -o "$random" = "no"; then
405     random=default
406 fi
407 AC_MSG_CHECKING([which random module to use])
408 if test "$random" != "default" -a "$random" != "auto"; then
409     LIST_MEMBER($random, $available_random_modules)
410     if test "$found" = "0"; then
411        AC_MSG_ERROR([unsupported random module specified])
412     fi
413 fi
414 AC_MSG_RESULT($random)
415
416 # Implementation of the --disable-dev-random switch.
417 AC_MSG_CHECKING([whether use of /dev/random is requested])
418 AC_ARG_ENABLE(dev-random,
419 [  --disable-dev-random    disable the use of dev random],
420     try_dev_random=$enableval, try_dev_random=yes)
421 AC_MSG_RESULT($try_dev_random)
422
423 # Implementation of the --with-egd-socket switch.
424 AC_ARG_WITH(egd-socket,
425     [  --with-egd-socket=NAME  Use NAME for the EGD socket)],
426             egd_socket_name="$withval", egd_socket_name="" )
427 AC_DEFINE_UNQUOTED(EGD_SOCKET_NAME, "$egd_socket_name",
428                    [Define if you don't want the default EGD socket name.
429                     For details see cipher/rndegd.c])
430
431 # Implementation of the --enable-random-daemon
432 AC_MSG_CHECKING([whether the experimental random daemon is requested])
433 AC_ARG_ENABLE([random-daemon],
434               AC_HELP_STRING([--enable-random-daemon],
435                              [Build and support the experimental gcryptrnd]),
436               [use_random_daemon=$enableval],
437               [use_random_daemon=no])
438 AC_MSG_RESULT($use_random_daemon)
439 if test x$use_random_daemon = xyes ; then
440     AC_DEFINE(USE_RANDOM_DAEMON,1,
441               [Define to support the experimental random daemon])
442 fi
443 AM_CONDITIONAL(USE_RANDOM_DAEMON, test x$use_random_daemon = xyes)
444
445
446 # Implementation of --disable-asm.
447 AC_MSG_CHECKING([whether MPI assembler modules are requested])
448 AC_ARG_ENABLE([asm],
449               AC_HELP_STRING([--disable-asm],
450                              [Disable MPI assembler modules]),
451               [try_asm_modules=$enableval],
452               [try_asm_modules=yes])
453 AC_MSG_RESULT($try_asm_modules)
454
455 # Implementation of the --enable-m-guard switch.
456 AC_MSG_CHECKING([whether memory guard is requested])
457 AC_ARG_ENABLE(m-guard,
458               AC_HELP_STRING([--enable-m-guard],
459                              [Enable memory guard facility]),
460               [use_m_guard=$enableval], [use_m_guard=no])
461 AC_MSG_RESULT($use_m_guard)
462 if test "$use_m_guard" = yes ; then
463     AC_DEFINE(M_GUARD,1,[Define to use the (obsolete) malloc guarding feature])
464 fi
465
466 # Implementation of the --with-capabilities switch.
467 # Check whether we want to use Linux capabilities
468 AC_MSG_CHECKING([whether use of capabilities is requested])
469 AC_ARG_WITH(capabilities,
470             AC_HELP_STRING([--with-capabilities],
471                            [Use linux capabilities [default=no]]),
472             [use_capabilities="$withval"],[use_capabilities=no])
473 AC_MSG_RESULT($use_capabilities)
474
475 # Implementation of the --enable-hmac-binary-check.
476 AC_MSG_CHECKING([whether a HMAC binary check is requested])
477 AC_ARG_ENABLE(hmac-binary-check,
478               AC_HELP_STRING([--enable-hmac-binary-check],
479                              [Enable library integrity check]),
480               [use_hmac_binary_check=$enableval],
481               [use_hmac_binary_check=no])
482 AC_MSG_RESULT($use_hmac_binary_check)
483 if test "$use_hmac_binary_check" = yes ; then
484     AC_DEFINE(ENABLE_HMAC_BINARY_CHECK,1,
485               [Define to support an HMAC based integrity check])
486 fi
487
488
489 # Implementation of the --disable-padlock-support switch.
490 AC_MSG_CHECKING([whether padlock support is requested])
491 AC_ARG_ENABLE(padlock-support,
492               AC_HELP_STRING([--disable-padlock-support],
493                  [Disable support for the PadLock Engine of VIA processors]),
494               padlocksupport=$enableval,padlocksupport=yes)
495 AC_MSG_RESULT($padlocksupport)
496 if test x"$padlocksupport" = xyes ; then
497   AC_DEFINE(ENABLE_PADLOCK_SUPPORT, 1,
498             [Enable support for the PadLock engine.])
499 fi
500
501 # Implementation of the --disable-O-flag-munging switch.
502 AC_MSG_CHECKING([whether a -O flag munging is requested])
503 AC_ARG_ENABLE([O-flag-munging],
504               AC_HELP_STRING([--disable-O-flag-munging],
505                  [Disable modification of the cc -O flag]),
506               [enable_o_flag_munging=$enableval],
507               [enable_o_flag_munging=yes])
508 AC_MSG_RESULT($enable_o_flag_munging)
509 AM_CONDITIONAL(ENABLE_O_FLAG_MUNGING, test "$enable_o_flag_munging" = "yes")
510
511
512
513 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
514                    [A human readable text with the name of the OS])
515
516 # For some systems we know that we have ld_version scripts.  
517 # Use it then as default.
518 have_ld_version_script=no
519 case "${host}" in
520     *-*-linux*)
521         have_ld_version_script=yes
522         ;;
523     *-*-gnu*)
524         have_ld_version_script=yes
525         ;;
526 esac
527 AC_ARG_ENABLE([ld-version-script],
528               AC_HELP_STRING([--enable-ld-version-script],
529                              [enable/disable use of linker version script.
530                               (default is system dependent)]),
531               [have_ld_version_script=$enableval],
532               [ : ] )
533 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
534
535 AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM",
536                    [defined to the name of the strong random device])
537 AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM",
538                    [defined to the name of the weaker random device])
539
540
541 ###############################
542 #### Checks for libraries. ####
543 ###############################
544
545 #
546 # gpg-error is required.
547 #
548 AM_PATH_GPG_ERROR("$NEED_GPG_ERROR_VERSION")
549 if test "x$GPG_ERROR_LIBS" = "x"; then
550   AC_MSG_ERROR([libgpg-error is needed.
551                 See ftp://ftp.gnupg.org/gcrypt/libgpg-error/ .])
552 fi
553
554 AC_DEFINE(GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_GCRYPT,
555           [The default error source for libgcrypt.])
556
557 #
558 # Check whether the GNU Pth library is available.  We require this 
559 # to build the optional gcryptrnd program.
560 #
561 AC_ARG_WITH(pth-prefix,
562             AC_HELP_STRING([--with-pth-prefix=PFX],
563                            [prefix where GNU Pth is installed (optional)]),
564      pth_config_prefix="$withval", pth_config_prefix="")
565 if test x$pth_config_prefix != x ; then
566    PTH_CONFIG="$pth_config_prefix/bin/pth-config"
567 fi
568 if test "$use_random_daemon" = "yes"; then
569   AC_PATH_PROG(PTH_CONFIG, pth-config, no)
570   if test "$PTH_CONFIG" = "no"; then
571     AC_MSG_WARN([[
572 ***
573 *** To build the Libgcrypt's random number daemon
574 *** we need the support of the GNU Portable Threads Library.
575 *** Download it from ftp://ftp.gnu.org/gnu/pth/
576 *** On a Debian GNU/Linux system you might want to try 
577 ***   apt-get install libpth-dev
578 ***]])
579   else
580     GNUPG_PTH_VERSION_CHECK([1.3.7])
581     if test $have_pth = yes; then      
582        PTH_CFLAGS=`$PTH_CONFIG --cflags`
583        PTH_LIBS=`$PTH_CONFIG --ldflags`
584        PTH_LIBS="$PTH_LIBS `$PTH_CONFIG --libs --all`"
585        AC_DEFINE(USE_GNU_PTH, 1,
586                 [Defined if the GNU Portable Thread Library should be used])
587        AC_DEFINE(HAVE_PTH, 1,
588                 [Defined if the GNU Pth is available])
589     fi
590   fi
591 fi
592 AC_SUBST(PTH_CFLAGS)
593 AC_SUBST(PTH_LIBS)
594
595
596 # Solaris needs -lsocket and -lnsl. Unisys system includes
597 # gethostbyname in libsocket but needs libnsl for socket.
598 AC_SEARCH_LIBS(setsockopt, [socket], ,
599         [AC_SEARCH_LIBS(setsockopt, [socket], , , [-lnsl])])
600 AC_SEARCH_LIBS(setsockopt, [nsl])
601
602 ##################################
603 #### Checks for header files. ####
604 ##################################
605
606 AC_HEADER_STDC
607 AC_CHECK_HEADERS(unistd.h sys/select.h sys/msg.h)
608
609 ##########################################
610 #### Checks for typedefs, structures, ####
611 ####  and compiler characteristics.   ####
612 ##########################################
613
614 AC_C_CONST
615 AC_C_INLINE
616 AC_TYPE_SIZE_T
617 AC_TYPE_SIGNAL
618 AC_DECL_SYS_SIGLIST
619 AC_TYPE_PID_T
620
621 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
622 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
623 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
624 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
625 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
626
627 gl_TYPE_SOCKLEN_T
628 case "${host}" in
629   *-*-mingw32*)
630     # socklen_t may or may not be defined depending on what headers
631     # are included.  To be safe we use int as this is the actual type.
632     FALLBACK_SOCKLEN_T="typedef int gcry_socklen_t;"
633     ;;
634   *)
635     if test ".$gl_cv_socklen_t_equiv" = "."; then
636       FALLBACK_SOCKLEN_T="typedef socklen_t gcry_socklen_t;"
637     else
638       FALLBACK_SOCKLEN_T="typedef ${gl_cv_socklen_t_equiv} gcry_socklen_t;"
639     fi
640 esac
641 AC_SUBST(FALLBACK_SOCKLEN_T)
642             
643 #            
644 # Check for ELF visibility support.
645 #
646 AC_CACHE_CHECK(whether the visibility attribute is supported,
647        gcry_cv_visibility_attribute,
648        [gcry_cv_visibility_attribute=no
649         AC_LANG_CONFTEST([AC_LANG_SOURCE(
650           [[int foo __attribute__ ((visibility ("hidden"))) = 1;
651             int bar __attribute__ ((visibility ("protected"))) = 1;
652           ]])])
653         
654         if ${CC-cc} -Werror -S conftest.c -o conftest.s \
655                   1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
656             if grep '\.hidden.*foo' conftest.s >/dev/null 2>&1 ; then
657                 if grep '\.protected.*bar' conftest.s >/dev/null 2>&1; then
658                     gcry_cv_visibility_attribute=yes
659                 fi
660             fi  
661         fi  
662        ])
663 if test "$gcry_cv_visibility_attribute" = "yes"; then
664     AC_CACHE_CHECK(for broken visibility attribute,
665        gcry_cv_broken_visibility_attribute,
666        [gcry_cv_broken_visibility_attribute=yes
667         AC_LANG_CONFTEST([AC_LANG_SOURCE(
668           [[int foo (int x);
669             int bar (int x) __asm__ ("foo")
670                             __attribute__ ((visibility ("hidden")));
671             int bar (int x) { return x; }
672           ]])])
673                   
674         if ${CC-cc} -Werror -S conftest.c -o conftest.s \
675                   1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
676            if grep '\.hidden@<:@        _@:>@foo' conftest.s >/dev/null 2>&1;
677             then
678                gcry_cv_broken_visibility_attribute=no
679            fi
680         fi
681        ])
682 fi
683 if test "$gcry_cv_visibility_attribute" = "yes"; then
684     AC_CACHE_CHECK(for broken alias attribute,
685        gcry_cv_broken_alias_attribute,
686        [gcry_cv_broken_alias_attribute=yes
687         AC_LANG_CONFTEST([AC_LANG_SOURCE(
688           [[extern int foo (int x) __asm ("xyzzy");
689             int bar (int x) { return x; }
690             extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
691             extern int dfoo;
692             extern __typeof (dfoo) dfoo __asm ("abccb");
693             int dfoo = 1;
694           ]])])
695
696         if ${CC-cc} -Werror -S conftest.c -o conftest.s \
697                   1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
698            if grep 'xyzzy' conftest.s >/dev/null 2>&1 && \
699               grep 'abccb' conftest.s >/dev/null 2>&1; then
700               gcry_cv_broken_alias_attribute=no
701            fi
702         fi
703         ])
704 fi
705 if test "$gcry_cv_visibility_attribute" = "yes"; then
706     AC_CACHE_CHECK(if gcc supports -fvisibility=hidden,
707        gcry_cv_gcc_has_f_visibility,
708        [gcry_cv_gcc_has_f_visibility=no
709         _gcc_cflags_save=$CFLAGS
710         CFLAGS="-fvisibility=hidden"
711         AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),
712                           gcry_cv_gcc_has_f_visibility=yes)
713         CFLAGS=$_gcc_cflags_save;
714        ])
715 fi
716 if test "$gcry_cv_visibility_attribute" = "yes" \
717    && test "$gcry_cv_broken_visibility_attribute" != "yes" \
718    && test "$gcry_cv_broken_alias_attribute" != "yes" \
719    && test "$gcry_cv_gcc_has_f_visibility" = "yes"  
720  then
721    AC_DEFINE(GCRY_USE_VISIBILITY, 1,
722                [Define to use the GNU C visibility attribute.])
723    CFLAGS="$CFLAGS -fvisibility=hidden"
724 fi
725
726
727 #######################################
728 #### Checks for library functions. ####
729 #######################################
730
731 AC_FUNC_VPRINTF
732 # We have replacements for these in src/missing-string.c
733 AC_CHECK_FUNCS(stpcpy strcasecmp)
734 # We have replacements for these in src/g10lib.h
735 AC_CHECK_FUNCS(strtoul memmove stricmp atexit raise)
736 # Other checks
737 AC_CHECK_FUNCS(strerror rand mmap getpagesize sysconf waitpid wait4)
738 AC_CHECK_FUNCS(gettimeofday getrusage gethrtime clock_gettime syslog)
739 AC_CHECK_FUNCS(fcntl ftruncate)
740
741 GNUPG_CHECK_MLOCK
742
743 #
744 # Replacement functions.
745 #
746 AC_REPLACE_FUNCS([getpid clock])
747
748
749 #
750 # Check wether it is necessary to link against libdl.
751 #
752 DL_LIBS=""
753 if test "$use_hmac_binary_check" = yes ; then
754   _gcry_save_libs="$LIBS"
755   LIBS=""
756   AC_SEARCH_LIBS(dlopen, c dl,,,)
757   DL_LIBS=$LIBS
758   LIBS="$_gcry_save_libs"
759   LIBGCRYPT_CONFIG_LIBS="${LIBGCRYPT_CONFIG_LIBS} ${DL_LIBS}"
760 fi
761 AC_SUBST(DL_LIBS)
762
763
764 #
765 # Check whether we can use Linux capabilities as requested.
766 #
767 if test "$use_capabilities" = "yes" ; then
768 use_capabilities=no
769 AC_CHECK_HEADERS(sys/capability.h)
770 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
771   AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
772   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
773      AC_DEFINE(USE_CAPABILITIES,1,
774                [define if capabilities should be used])
775      LIBS="$LIBS -lcap"
776      use_capabilities=yes
777   fi
778 fi
779 if test "$use_capabilities" = "no" ; then
780     AC_MSG_WARN([[
781 ***
782 *** The use of capabilities on this system is not possible.
783 *** You need a recent Linux kernel and some patches:
784 ***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
785 ***   fcap-module-990613.tar.gz     (kernel module)
786 ***   libcap-1.92.tar.gz            (user mode library and utilities)
787 *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
788 *** set (filesystems menu). Be warned: This code is *really* ALPHA.
789 ***]])
790 fi
791 fi
792
793 # Check whether a random device is available.
794 if test "$try_dev_random" = yes ; then
795     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
796     [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
797       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
798     if test "$ac_cv_have_dev_random" = yes; then
799         AC_DEFINE(HAVE_DEV_RANDOM,1,
800                  [defined if the system supports a random device] )
801     fi
802 else
803     AC_MSG_CHECKING(for random device)
804     ac_cv_have_dev_random=no
805     AC_MSG_RESULT(has been disabled)
806 fi
807
808 # Figure out the random modules for this configuration.
809 if test "$random" = "default"; then
810
811     # Select default value.
812     if test "$ac_cv_have_dev_random" = yes; then
813         # Try Linuxish random device.
814         random_modules="linux"
815     else
816         case "${host}" in
817         *-*-mingw32ce*)
818           # WindowsCE random device.
819           random_modules="w32ce"
820           ;;
821         *-*-mingw32*|*-*-cygwin*)
822           # Windows random device.
823           random_modules="w32"
824           ;;
825         *)
826           # Build everything, allow to select at runtime.
827           random_modules="$auto_random_modules"
828           ;;
829         esac    
830     fi
831 else
832     if test "$random" = "auto"; then
833         # Build everything, allow to select at runtime.
834         random_modules="$auto_random_modules"
835     else
836         random_modules="$random"
837     fi
838 fi
839
840
841 #
842 # Setup assembler stuff.
843 #
844 GNUPG_SYS_SYMBOL_UNDERSCORE()
845 AC_ARG_ENABLE(mpi-path,
846               AC_HELP_STRING([--enable-mpi-path=EXTRA_PATH],
847               [prepend EXTRA_PATH to list of CPU specific optimizations]),
848               mpi_extra_path="$enableval",mpi_extra_path="")
849 AC_MSG_CHECKING(for mpi assembler functions)
850 if test -f $srcdir/mpi/config.links ; then
851     . $srcdir/mpi/config.links
852     AC_CONFIG_LINKS("$mpi_ln_list")
853     ac_cv_mpi_sflags="$mpi_sflags"
854     AC_MSG_RESULT(done)
855 else
856     AC_MSG_RESULT(failed)
857     AC_MSG_ERROR([mpi/config.links missing!])
858 fi
859 MPI_SFLAGS="$ac_cv_mpi_sflags"
860 AC_SUBST(MPI_SFLAGS)
861
862 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_ADD1, test "$mpi_mod_asm_mpih_add1" = yes)
863 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_SUB1, test "$mpi_mod_asm_mpih_sub1" = yes)
864 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL1, test "$mpi_mod_asm_mpih_mul1" = yes)
865 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL2, test "$mpi_mod_asm_mpih_mul2" = yes)
866 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL3, test "$mpi_mod_asm_mpih_mul3" = yes)
867 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_LSHIFT, test "$mpi_mod_asm_mpih_lshift" = yes)
868 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_RSHIFT, test "$mpi_mod_asm_mpih_rshift" = yes)
869 AM_CONDITIONAL(MPI_MOD_ASM_UDIV, test "$mpi_mod_asm_udiv" = yes)
870 AM_CONDITIONAL(MPI_MOD_ASM_UDIV_QRNND, test "$mpi_mod_asm_udiv_qrnnd" = yes)
871 AM_CONDITIONAL(MPI_MOD_C_MPIH_ADD1, test "$mpi_mod_c_mpih_add1" = yes)
872 AM_CONDITIONAL(MPI_MOD_C_MPIH_SUB1, test "$mpi_mod_c_mpih_sub1" = yes)
873 AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL1, test "$mpi_mod_c_mpih_mul1" = yes)
874 AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL2, test "$mpi_mod_c_mpih_mul2" = yes)
875 AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL3, test "$mpi_mod_c_mpih_mul3" = yes)
876 AM_CONDITIONAL(MPI_MOD_C_MPIH_LSHIFT, test "$mpi_mod_c_mpih_lshift" = yes)
877 AM_CONDITIONAL(MPI_MOD_C_MPIH_RSHIFT, test "$mpi_mod_c_mpih_rshift" = yes)
878 AM_CONDITIONAL(MPI_MOD_C_UDIV, test "$mpi_mod_c_udiv" = yes)
879 AM_CONDITIONAL(MPI_MOD_C_UDIV_QRNND, test "$mpi_mod_c_udiv_qrnnd" = yes)
880
881 if test "$is_development_version" = "yes"; then
882     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
883               [Defined if this is not a regular release])
884 fi
885
886
887 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
888
889
890 # This is handy for debugging so the compiler doesn't rearrange
891 # things and eliminate variables.
892 AC_ARG_ENABLE(optimization,
893        AC_HELP_STRING([--disable-optimization],
894                       [disable compiler optimization]),
895                       [if test $enableval = no ; then
896                          CFLAGS=`echo $CFLAGS | sed 's/-O[[0-9]]//'`
897                        fi])
898
899 # CFLAGS mangling when using gcc.
900 if test "$GCC" = yes; then
901     CFLAGS="$CFLAGS -Wall"
902     if test "$USE_MAINTAINER_MODE" = "yes"; then
903         CFLAGS="$CFLAGS -Wcast-align -Wshadow -Wstrict-prototypes"
904         CFLAGS="$CFLAGS -Wformat -Wno-format-y2k -Wformat-security"
905
906         # If -Wno-missing-field-initializers is supported we can enable a 
907         # a bunch of really useful warnings.
908         AC_MSG_CHECKING([if gcc supports -Wno-missing-field-initializers])
909         _gcc_cflags_save=$CFLAGS
910         CFLAGS="-Wno-missing-field-initializers"
911         AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),_gcc_wopt=yes,_gcc_wopt=no)
912         AC_MSG_RESULT($_gcc_wopt)
913         CFLAGS=$_gcc_cflags_save;
914         if test x"$_gcc_wopt" = xyes ; then
915           CFLAGS="$CFLAGS -W -Wextra -Wbad-function-cast"
916           CFLAGS="$CFLAGS -Wwrite-strings"
917           CFLAGS="$CFLAGS -Wdeclaration-after-statement"
918           CFLAGS="$CFLAGS -Wno-missing-field-initializers"
919           CFLAGS="$CFLAGS -Wno-sign-compare"
920         fi
921
922         AC_MSG_CHECKING([if gcc supports -Wpointer-arith])
923         _gcc_cflags_save=$CFLAGS
924         CFLAGS="-Wpointer-arith"
925         AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),_gcc_wopt=yes,_gcc_wopt=no)
926         AC_MSG_RESULT($_gcc_wopt)
927         CFLAGS=$_gcc_cflags_save;
928         if test x"$_gcc_wopt" = xyes ; then
929           CFLAGS="$CFLAGS -Wpointer-arith"
930         fi
931
932         AC_MSG_CHECKING([if gcc supports -fno-strict-aliasing])
933         _gcc_cflags_save=$CFLAGS
934         CFLAGS="-fno-strict-aliasing"
935         AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),_gcc_wopt=yes,_gcc_wopt=no)
936         AC_MSG_RESULT($_gcc_wopt)
937         CFLAGS=$_gcc_cflags_save;
938         if test x"$_gcc_wopt" = xyes ; then
939           CFLAGS="$CFLAGS -fno-strict-aliasing"
940         fi
941
942     fi
943
944 fi
945
946 # Check whether as(1) supports a noeexecstack feature.  This test
947 # includes an override option.
948 CL_AS_NOEXECSTACK
949
950
951 AC_SUBST(LIBGCRYPT_CONFIG_API_VERSION)
952 AC_SUBST(LIBGCRYPT_CONFIG_LIBS)
953 AC_SUBST(LIBGCRYPT_CONFIG_CFLAGS)
954 AC_SUBST(LIBGCRYPT_THREAD_MODULES)
955
956 AC_CONFIG_COMMANDS([gcrypt-conf],[[
957 chmod +x src/libgcrypt-config
958 ]],[[
959 prefix=$prefix
960 exec_prefix=$exec_prefix
961 libdir=$libdir
962 datadir=$datadir
963 DATADIRNAME=$DATADIRNAME
964 ]])
965
966 #####################
967 #### Conclusion. ####
968 #####################
969
970 # Define conditional sources and config.h symbols depending on the
971 # selected ciphers, pubkey-ciphers, digests and random modules.
972
973 LIST_MEMBER(arcfour, $enabled_ciphers)
974 if test "$found" = "1"; then 
975    GCRYPT_CIPHERS="$GCRYPT_CIPHERS arcfour.lo"
976    AC_DEFINE(USE_ARCFOUR, 1, [Defined if this module should be included])
977 fi
978
979 LIST_MEMBER(blowfish, $enabled_ciphers)
980 if test "$found" = "1" ; then
981    GCRYPT_CIPHERS="$GCRYPT_CIPHERS blowfish.lo"
982    AC_DEFINE(USE_BLOWFISH, 1, [Defined if this module should be included])
983 fi
984
985 LIST_MEMBER(cast5, $enabled_ciphers)
986 if test "$found" = "1" ; then
987    GCRYPT_CIPHERS="$GCRYPT_CIPHERS cast5.lo"
988    AC_DEFINE(USE_CAST5, 1, [Defined if this module should be included])
989 fi
990
991 LIST_MEMBER(des, $enabled_ciphers)
992 if test "$found" = "1" ; then
993    GCRYPT_CIPHERS="$GCRYPT_CIPHERS des.lo"
994    AC_DEFINE(USE_DES, 1, [Defined if this module should be included])
995 fi
996
997 LIST_MEMBER(aes, $enabled_ciphers)
998 if test "$found" = "1" ; then
999    GCRYPT_CIPHERS="$GCRYPT_CIPHERS rijndael.lo"
1000    AC_DEFINE(USE_AES, 1, [Defined if this module should be included])
1001 fi
1002
1003 LIST_MEMBER(twofish, $enabled_ciphers)
1004 if test "$found" = "1" ; then
1005    GCRYPT_CIPHERS="$GCRYPT_CIPHERS twofish.lo"
1006    AC_DEFINE(USE_TWOFISH, 1, [Defined if this module should be included])
1007 fi
1008
1009 LIST_MEMBER(serpent, $enabled_ciphers)
1010 if test "$found" = "1" ; then
1011    GCRYPT_CIPHERS="$GCRYPT_CIPHERS serpent.lo"
1012    AC_DEFINE(USE_SERPENT, 1, [Defined if this module should be included])
1013 fi
1014
1015 LIST_MEMBER(rfc2268, $enabled_ciphers)
1016 if test "$found" = "1" ; then
1017    GCRYPT_CIPHERS="$GCRYPT_CIPHERS rfc2268.lo"
1018    AC_DEFINE(USE_RFC2268, 1, [Defined if this module should be included])
1019 fi
1020
1021 LIST_MEMBER(seed, $enabled_ciphers)
1022 if test "$found" = "1" ; then
1023    GCRYPT_CIPHERS="$GCRYPT_CIPHERS seed.lo"
1024    AC_DEFINE(USE_SEED, 1, [Defined if this module should be included])
1025 fi
1026
1027 LIST_MEMBER(camellia, $enabled_ciphers)
1028 if test "$found" = "1" ; then
1029    GCRYPT_CIPHERS="$GCRYPT_CIPHERS camellia.lo camellia-glue.lo"
1030    AC_DEFINE(USE_CAMELLIA, 1, [Defined if this module should be included])
1031 fi
1032
1033 LIST_MEMBER(dsa, $enabled_pubkey_ciphers)
1034 if test "$found" = "1" ; then
1035    GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS dsa.lo"
1036    AC_DEFINE(USE_DSA, 1, [Defined if this module should be included])
1037 fi
1038
1039 LIST_MEMBER(rsa, $enabled_pubkey_ciphers)
1040 if test "$found" = "1" ; then
1041    GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS rsa.lo"
1042    AC_DEFINE(USE_RSA, 1, [Defined if this module should be included])
1043 fi
1044
1045 LIST_MEMBER(elgamal, $enabled_pubkey_ciphers)
1046 if test "$found" = "1" ; then
1047    GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS elgamal.lo"
1048    AC_DEFINE(USE_ELGAMAL, 1, [Defined if this module should be included])
1049 fi
1050
1051 LIST_MEMBER(ecc, $enabled_pubkey_ciphers)
1052 if test "$found" = "1" ; then
1053    GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS ecc.lo"
1054    AC_DEFINE(USE_ECC, 1, [Defined if this module should be included])
1055 fi
1056
1057 LIST_MEMBER(crc, $enabled_digests)
1058 if test "$found" = "1" ; then
1059    GCRYPT_DIGESTS="$GCRYPT_DIGESTS crc.lo"
1060    AC_DEFINE(USE_CRC, 1, [Defined if this module should be included])
1061 fi
1062
1063 LIST_MEMBER(md4, $enabled_digests)
1064 if test "$found" = "1" ; then
1065    GCRYPT_DIGESTS="$GCRYPT_DIGESTS md4.lo"
1066    AC_DEFINE(USE_MD4, 1, [Defined if this module should be included])
1067 fi
1068
1069 LIST_MEMBER(md5, $enabled_digests)
1070 if test "$found" = "1" ; then
1071    GCRYPT_DIGESTS="$GCRYPT_DIGESTS md5.lo"
1072    AC_DEFINE(USE_MD5, 1, [Defined if this module should be included])
1073 fi
1074
1075 LIST_MEMBER(sha256, $enabled_digests)
1076 if test "$found" = "1" ; then
1077    GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha256.lo"
1078    AC_DEFINE(USE_SHA256, 1, [Defined if this module should be included])
1079 fi
1080
1081 LIST_MEMBER(sha512, $enabled_digests)
1082 if test "$found" = "1" ; then
1083    GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha512.lo"
1084    AC_DEFINE(USE_SHA512, 1, [Defined if this module should be included])
1085 fi
1086
1087 LIST_MEMBER(tiger, $enabled_digests)
1088 if test "$found" = "1" ; then
1089    GCRYPT_DIGESTS="$GCRYPT_DIGESTS tiger.lo"
1090    AC_DEFINE(USE_TIGER, 1, [Defined if this module should be included])
1091 fi
1092
1093 LIST_MEMBER(whirlpool, $enabled_digests)
1094 if test "$found" = "1" ; then
1095    GCRYPT_DIGESTS="$GCRYPT_DIGESTS whirlpool.lo"
1096    AC_DEFINE(USE_WHIRLPOOL, 1, [Defined if this module should be included])
1097 fi
1098
1099 # rmd160 and sha1 should be included always.
1100 GCRYPT_DIGESTS="$GCRYPT_DIGESTS rmd160.lo sha1.lo"
1101 AC_DEFINE(USE_RMD160, 1, [Defined if this module should be included])
1102 AC_DEFINE(USE_SHA1, 1,   [Defined if this module should be included])
1103
1104 LIST_MEMBER(linux, $random_modules)
1105 if test "$found" = "1" ; then
1106    GCRYPT_RANDOM="$GCRYPT_RANDOM rndlinux.lo"
1107    AC_DEFINE(USE_RNDLINUX, 1, [Defined if the /dev/random RNG should be used.])
1108 fi
1109
1110 LIST_MEMBER(unix, $random_modules)
1111 if test "$found" = "1" ; then
1112    GCRYPT_RANDOM="$GCRYPT_RANDOM rndunix.lo"
1113    AC_DEFINE(USE_RNDUNIX, 1, [Defined if the default Unix RNG should be used.])
1114    print_egd_notice=yes
1115 fi
1116
1117 LIST_MEMBER(egd, $random_modules)
1118 if test "$found" = "1" ; then
1119    GCRYPT_RANDOM="$GCRYPT_RANDOM rndegd.lo"
1120    AC_DEFINE(USE_RNDEGD, 1, [Defined if the EGD based RNG should be used.])
1121 fi
1122
1123 LIST_MEMBER(w32, $random_modules)
1124 if test "$found" = "1" ; then
1125    GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32.lo"
1126    AC_DEFINE(USE_RNDW32, 1, 
1127              [Defined if the Windows specific RNG should be used.])
1128 fi
1129
1130 LIST_MEMBER(w32ce, $random_modules)
1131 if test "$found" = "1" ; then
1132    GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32ce.lo"
1133    AC_DEFINE(USE_RNDW32CE, 1, 
1134              [Defined if the WindowsCE specific RNG should be used.])
1135 fi
1136
1137 AC_SUBST([GCRYPT_CIPHERS])
1138 AC_SUBST([GCRYPT_PUBKEY_CIPHERS])
1139 AC_SUBST([GCRYPT_DIGESTS])
1140 AC_SUBST([GCRYPT_RANDOM])
1141
1142 AC_SUBST(LIBGCRYPT_CIPHERS, $enabled_ciphers)
1143 AC_SUBST(LIBGCRYPT_PUBKEY_CIPHERS, $enabled_pubkey_ciphers)
1144 AC_SUBST(LIBGCRYPT_DIGESTS, $enabled_digests)
1145
1146 # For printing the configuration we need a colon separated list of
1147 # algorithm names.
1148 tmp=`echo "$enabled_ciphers" | tr ' ' : `
1149 AC_DEFINE_UNQUOTED(LIBGCRYPT_CIPHERS, "$tmp", 
1150                    [List of available cipher algorithms])
1151 tmp=`echo "$enabled_pubkey_ciphers" | tr ' ' : `
1152 AC_DEFINE_UNQUOTED(LIBGCRYPT_PUBKEY_CIPHERS, "$tmp", 
1153                    [List of available public key cipher algorithms])
1154 tmp=`echo "$enabled_digests" | tr ' ' : `
1155 AC_DEFINE_UNQUOTED(LIBGCRYPT_DIGESTS, "$tmp", 
1156                    [List of available digest algorithms])
1157
1158
1159
1160 # Generate extended version information for W32.
1161 if test "$have_w32_system" = yes; then
1162    BUILD_TIMESTAMP=`date --iso-8601=minutes`
1163    changequote(,)dnl 
1164    BUILD_FILEVERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./;s/\./,/g'`
1165    changequote([,])dnl
1166    BUILD_FILEVERSION="${BUILD_FILEVERSION}${BUILD_REVISION}"
1167 fi
1168 AC_SUBST(BUILD_REVISION)
1169 AC_SUBST(BUILD_TIMESTAMP)
1170 AC_SUBST(BUILD_FILEVERSION)
1171 AC_DEFINE_UNQUOTED(BUILD_REVISION, "$BUILD_REVISION", 
1172                    [Subversion revision used to build this package])
1173
1174
1175 # Substitutions to set generated files in a Emacs buffer to read-only.
1176 AC_SUBST(emacs_local_vars_begin, ['Local Variables:'])
1177 AC_SUBST(emacs_local_vars_read_only, ['buffer-read-only: t'])
1178 AC_SUBST(emacs_local_vars_end, ['End:'])
1179
1180
1181 # And create the files.
1182 AC_CONFIG_FILES([
1183 Makefile
1184 m4/Makefile
1185 compat/Makefile
1186 mpi/Makefile
1187 cipher/Makefile
1188 random/Makefile
1189 doc/Makefile
1190 src/Makefile
1191 src/gcrypt.h
1192 src/libgcrypt-config
1193 src/versioninfo.rc
1194 tests/Makefile
1195 ])
1196 AC_OUTPUT
1197
1198 # Give some feedback
1199 echo "
1200         Libgcrypt v${VERSION} has been configured as follows:
1201         
1202         Platform:                  $PRINTABLE_OS_NAME ($host)
1203         Enabled cipher algorithms: $enabled_ciphers
1204         Enabled digest algorithms: $enabled_digests
1205         Enabled pubkey algorithms: $enabled_pubkey_ciphers
1206         Random number generator:   $random
1207         Using linux capabilities:  $use_capabilities
1208 "
1209
1210 if test "$print_egd_notice" = "yes"; then
1211 cat <<G10EOF
1212   
1213    The performance of the Unix random gatherer module (rndunix) is not
1214    very good and it does not keep the entropy pool over multiple
1215    invocations of Libgcrypt base applications.  The suggested way to
1216    overcome this problem is to use the
1217   
1218                  Entropy Gathering Daemon (EGD)
1219   
1220    which provides a entropy source for the whole system.  It is written
1221    in Perl and available at the GnuPG FTP servers.  To enable EGD you
1222    should rerun configure with the option "--enable-static-rnd=egd".
1223    For more information consult the GnuPG webpages:
1224   
1225              http://www.gnupg.org/download.html#egd
1226
1227 G10EOF
1228 fi
1229
1230 if test -n "$gpl"; then
1231   echo "Please note that you are building a version of Libgcrypt with"
1232   echo "  $gpl"
1233   echo "included.  These parts are licensed under the GPL and thus the"
1234   echo "use of this library has to comply with the conditions of the GPL."
1235 fi
1236