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