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