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