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