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