ecc: Require "eddsa" flag for curve Ed25519.
[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 gost28147"
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 gostr3411-94 md4 md5 rmd160 sha1 sha256"
196 available_digests_64="sha512 tiger whirlpool stribog"
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  SHA-512 and GOST R 34.11-12])
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 # Implementation of the --disable-amd64-as-feature-detection switch.
617 AC_MSG_CHECKING([whether to enable AMD64 as(1) feature detection])
618 AC_ARG_ENABLE(amd64-as-feature-detection,
619               AC_HELP_STRING([--disable-amd64-as-feature-detection],
620                  [Disable the auto-detection of AMD64 as(1) features]),
621               amd64_as_feature_detection=$enableval,
622               amd64_as_feature_detection=yes)
623 AC_MSG_RESULT($amd64_as_feature_detection)
624
625
626 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
627                    [A human readable text with the name of the OS])
628
629 # For some systems we know that we have ld_version scripts.
630 # Use it then as default.
631 have_ld_version_script=no
632 case "${host}" in
633     *-*-linux*)
634         have_ld_version_script=yes
635         ;;
636     *-*-gnu*)
637         have_ld_version_script=yes
638         ;;
639 esac
640 AC_ARG_ENABLE([ld-version-script],
641               AC_HELP_STRING([--enable-ld-version-script],
642                              [enable/disable use of linker version script.
643                               (default is system dependent)]),
644               [have_ld_version_script=$enableval],
645               [ : ] )
646 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
647
648 AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM",
649                    [defined to the name of the strong random device])
650 AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM",
651                    [defined to the name of the weaker random device])
652
653
654 ###############################
655 #### Checks for libraries. ####
656 ###############################
657
658 #
659 # gpg-error is required.
660 #
661 AM_PATH_GPG_ERROR("$NEED_GPG_ERROR_VERSION")
662 if test "x$GPG_ERROR_LIBS" = "x"; then
663   AC_MSG_ERROR([libgpg-error is needed.
664                 See ftp://ftp.gnupg.org/gcrypt/libgpg-error/ .])
665 fi
666
667 AC_DEFINE(GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_GCRYPT,
668           [The default error source for libgcrypt.])
669
670 #
671 # Check whether the GNU Pth library is available.  We require this
672 # to build the optional gcryptrnd program.
673 #
674 AC_ARG_WITH(pth-prefix,
675             AC_HELP_STRING([--with-pth-prefix=PFX],
676                            [prefix where GNU Pth is installed (optional)]),
677      pth_config_prefix="$withval", pth_config_prefix="")
678 if test x$pth_config_prefix != x ; then
679    PTH_CONFIG="$pth_config_prefix/bin/pth-config"
680 fi
681 if test "$use_random_daemon" = "yes"; then
682   AC_PATH_PROG(PTH_CONFIG, pth-config, no)
683   if test "$PTH_CONFIG" = "no"; then
684     AC_MSG_WARN([[
685 ***
686 *** To build the Libgcrypt's random number daemon
687 *** we need the support of the GNU Portable Threads Library.
688 *** Download it from ftp://ftp.gnu.org/gnu/pth/
689 *** On a Debian GNU/Linux system you might want to try
690 ***   apt-get install libpth-dev
691 ***]])
692   else
693     GNUPG_PTH_VERSION_CHECK([1.3.7])
694     if test $have_pth = yes; then
695        PTH_CFLAGS=`$PTH_CONFIG --cflags`
696        PTH_LIBS=`$PTH_CONFIG --ldflags`
697        PTH_LIBS="$PTH_LIBS `$PTH_CONFIG --libs --all`"
698        AC_DEFINE(USE_GNU_PTH, 1,
699                 [Defined if the GNU Portable Thread Library should be used])
700        AC_DEFINE(HAVE_PTH, 1,
701                 [Defined if the GNU Pth is available])
702     fi
703   fi
704 fi
705 AC_SUBST(PTH_CFLAGS)
706 AC_SUBST(PTH_LIBS)
707
708 #
709 # Check whether pthreads is available
710 #
711 AC_CHECK_LIB(pthread,pthread_create,have_pthread=yes)
712 if test "$have_pthread" = yes; then
713    AC_DEFINE(HAVE_PTHREAD, ,[Define if we have pthread.])
714 fi
715
716 #
717 # See which thread system we have
718 # FIXME: Thus duplicates the above check.
719 #
720 gl_LOCK
721
722 # Solaris needs -lsocket and -lnsl. Unisys system includes
723 # gethostbyname in libsocket but needs libnsl for socket.
724 AC_SEARCH_LIBS(setsockopt, [socket], ,
725         [AC_SEARCH_LIBS(setsockopt, [socket], , , [-lnsl])])
726 AC_SEARCH_LIBS(setsockopt, [nsl])
727
728 ##################################
729 #### Checks for header files. ####
730 ##################################
731
732 AC_HEADER_STDC
733 AC_CHECK_HEADERS(unistd.h sys/select.h sys/msg.h)
734 INSERT_SYS_SELECT_H=
735 if test x"$ac_cv_header_sys_select_h" = xyes; then
736   INSERT_SYS_SELECT_H=" include <sys/select.h>"
737 fi
738 AC_SUBST(INSERT_SYS_SELECT_H)
739
740
741 ##########################################
742 #### Checks for typedefs, structures, ####
743 ####  and compiler characteristics.   ####
744 ##########################################
745
746 AC_C_CONST
747 AC_C_INLINE
748 AC_TYPE_SIZE_T
749 AC_TYPE_SIGNAL
750 AC_DECL_SYS_SIGLIST
751 AC_TYPE_PID_T
752
753 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
754 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
755 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
756 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
757 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
758
759 gl_TYPE_SOCKLEN_T
760 case "${host}" in
761   *-*-mingw32*)
762     # socklen_t may or may not be defined depending on what headers
763     # are included.  To be safe we use int as this is the actual type.
764     FALLBACK_SOCKLEN_T="typedef int gcry_socklen_t;"
765     ;;
766   *)
767     if test ".$gl_cv_socklen_t_equiv" = "."; then
768       FALLBACK_SOCKLEN_T="typedef socklen_t gcry_socklen_t;"
769     else
770       FALLBACK_SOCKLEN_T="typedef ${gl_cv_socklen_t_equiv} gcry_socklen_t;"
771     fi
772 esac
773 AC_SUBST(FALLBACK_SOCKLEN_T)
774
775
776 #
777 # Check for __builtin_bswap32 intrinsic.
778 #
779 AC_CACHE_CHECK(for __builtin_bswap32,
780        [gcry_cv_have_builtin_bswap32],
781        [gcry_cv_have_builtin_bswap32=no
782         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
783           [[int foo(int x) { return __builtin_bswap32(x); }]])],
784           [gcry_cv_have_builtin_bswap32=yes])])
785 if test "$gcry_cv_have_builtin_bswap32" = "yes" ; then
786    AC_DEFINE(HAVE_BUILTIN_BSWAP32,1,
787              [Defined if compiler has '__builtin_bswap32' intrinsic])
788 fi
789
790
791 #
792 # Check for __builtin_bswap64 intrinsic.
793 #
794 AC_CACHE_CHECK(for __builtin_bswap64,
795        [gcry_cv_have_builtin_bswap64],
796        [gcry_cv_have_builtin_bswap64=no
797         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
798           [[int foo(int x) { return __builtin_bswap64(x); }]])],
799           [gcry_cv_have_builtin_bswap64=yes])])
800 if test "$gcry_cv_have_builtin_bswap64" = "yes" ; then
801    AC_DEFINE(HAVE_BUILTIN_BSWAP64,1,
802              [Defined if compiler has '__builtin_bswap64' intrinsic])
803 fi
804
805
806 #
807 # Check for VLA support (variable length arrays).
808 #
809 AC_CACHE_CHECK(whether the variable length arrays are supported,
810        [gcry_cv_have_vla],
811        [gcry_cv_have_vla=no
812         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
813           [[void f1(char *, int);
814             char foo(int i) {
815               char b[(i < 0 ? 0 : i) + 1];
816               f1(b, sizeof b); return b[0];}]])],
817           [gcry_cv_have_vla=yes])])
818 if test "$gcry_cv_have_vla" = "yes" ; then
819    AC_DEFINE(HAVE_VLA,1, [Defined if variable length arrays are supported])
820 fi
821
822
823 #
824 # Check for ELF visibility support.
825 #
826 AC_CACHE_CHECK(whether the visibility attribute is supported,
827        gcry_cv_visibility_attribute,
828        [gcry_cv_visibility_attribute=no
829         AC_LANG_CONFTEST([AC_LANG_SOURCE(
830           [[int foo __attribute__ ((visibility ("hidden"))) = 1;
831             int bar __attribute__ ((visibility ("protected"))) = 1;
832           ]])])
833
834         if ${CC-cc} -Werror -S conftest.c -o conftest.s \
835                   1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
836             if grep '\.hidden.*foo' conftest.s >/dev/null 2>&1 ; then
837                 if grep '\.protected.*bar' conftest.s >/dev/null 2>&1; then
838                     gcry_cv_visibility_attribute=yes
839                 fi
840             fi
841         fi
842        ])
843 if test "$gcry_cv_visibility_attribute" = "yes"; then
844     AC_CACHE_CHECK(for broken visibility attribute,
845        gcry_cv_broken_visibility_attribute,
846        [gcry_cv_broken_visibility_attribute=yes
847         AC_LANG_CONFTEST([AC_LANG_SOURCE(
848           [[int foo (int x);
849             int bar (int x) __asm__ ("foo")
850                             __attribute__ ((visibility ("hidden")));
851             int bar (int x) { return x; }
852           ]])])
853
854         if ${CC-cc} -Werror -S conftest.c -o conftest.s \
855                   1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
856            if grep '\.hidden@<:@        _@:>@foo' conftest.s >/dev/null 2>&1;
857             then
858                gcry_cv_broken_visibility_attribute=no
859            fi
860         fi
861        ])
862 fi
863 if test "$gcry_cv_visibility_attribute" = "yes"; then
864     AC_CACHE_CHECK(for broken alias attribute,
865        gcry_cv_broken_alias_attribute,
866        [gcry_cv_broken_alias_attribute=yes
867         AC_LANG_CONFTEST([AC_LANG_SOURCE(
868           [[extern int foo (int x) __asm ("xyzzy");
869             int bar (int x) { return x; }
870             extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
871             extern int dfoo;
872             extern __typeof (dfoo) dfoo __asm ("abccb");
873             int dfoo = 1;
874           ]])])
875
876         if ${CC-cc} -Werror -S conftest.c -o conftest.s \
877                   1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
878            if grep 'xyzzy' conftest.s >/dev/null 2>&1 && \
879               grep 'abccb' conftest.s >/dev/null 2>&1; then
880               gcry_cv_broken_alias_attribute=no
881            fi
882         fi
883         ])
884 fi
885 if test "$gcry_cv_visibility_attribute" = "yes"; then
886     AC_CACHE_CHECK(if gcc supports -fvisibility=hidden,
887        gcry_cv_gcc_has_f_visibility,
888        [gcry_cv_gcc_has_f_visibility=no
889         _gcc_cflags_save=$CFLAGS
890         CFLAGS="-fvisibility=hidden"
891         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
892                           gcry_cv_gcc_has_f_visibility=yes)
893         CFLAGS=$_gcc_cflags_save;
894        ])
895 fi
896 if test "$gcry_cv_visibility_attribute" = "yes" \
897    && test "$gcry_cv_broken_visibility_attribute" != "yes" \
898    && test "$gcry_cv_broken_alias_attribute" != "yes" \
899    && test "$gcry_cv_gcc_has_f_visibility" = "yes"
900  then
901    AC_DEFINE(GCRY_USE_VISIBILITY, 1,
902                [Define to use the GNU C visibility attribute.])
903    CFLAGS="$CFLAGS -fvisibility=hidden"
904 fi
905
906
907 #
908 # Check whether the compiler supports the GCC style aligned attribute
909 #
910 AC_CACHE_CHECK([whether the GCC style aligned attribute is supported],
911        [gcry_cv_gcc_attribute_aligned],
912        [gcry_cv_gcc_attribute_aligned=no
913         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
914           [[struct { int a; } foo __attribute__ ((aligned (16)));]])],
915           [gcry_cv_gcc_attribute_aligned=yes])])
916 if test "$gcry_cv_gcc_attribute_aligned" = "yes" ; then
917    AC_DEFINE(HAVE_GCC_ATTRIBUTE_ALIGNED,1,
918      [Defined if a GCC style "__attribute__ ((aligned (n))" is supported])
919 fi
920
921
922 #
923 # Check whether the compiler supports 'asm' or '__asm__' keyword for
924 # assembler blocks.
925 #
926 AC_CACHE_CHECK([whether 'asm' assembler keyword is supported],
927        [gcry_cv_have_asm],
928        [gcry_cv_have_asm=no
929         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
930           [[void a(void) { asm("":::"memory"); }]])],
931           [gcry_cv_have_asm=yes])])
932 AC_CACHE_CHECK([whether '__asm__' assembler keyword is supported],
933        [gcry_cv_have___asm__],
934        [gcry_cv_have___asm__=no
935         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
936           [[void a(void) { __asm__("":::"memory"); }]])],
937           [gcry_cv_have___asm__=yes])])
938 if test "$gcry_cv_have_asm" = "no" ; then
939    if test "$gcry_cv_have___asm__" = "yes" ; then
940       AC_DEFINE(asm,__asm__,
941         [Define to supported assembler block keyword, if plain 'asm' was not
942          supported])
943    fi
944 fi
945
946
947 #
948 # Check whether the compiler supports inline assembly memory barrier.
949 #
950 if test "$gcry_cv_have_asm" = "no" ; then
951    if test "$gcry_cv_have___asm__" = "yes" ; then
952       AC_CACHE_CHECK([whether inline assembly memory barrier is supported],
953           [gcry_cv_have_asm_volatile_memory],
954           [gcry_cv_have_asm_volatile_memory=no
955            AC_COMPILE_IFELSE([AC_LANG_SOURCE(
956              [[void a(void) { __asm__ volatile("":::"memory"); }]])],
957              [gcry_cv_have_asm_volatile_memory=yes])])
958    fi
959 else
960    AC_CACHE_CHECK([whether inline assembly memory barrier is supported],
961        [gcry_cv_have_asm_volatile_memory],
962        [gcry_cv_have_asm_volatile_memory=no
963         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
964           [[void a(void) { asm volatile("":::"memory"); }]])],
965           [gcry_cv_have_asm_volatile_memory=yes])])
966 fi
967 if test "$gcry_cv_have_asm_volatile_memory" = "yes" ; then
968    AC_DEFINE(HAVE_GCC_ASM_VOLATILE_MEMORY,1,
969      [Define if inline asm memory barrier is supported])
970 fi
971
972
973 #
974 # Check whether GCC inline assembler supports SSSE3 instructions
975 # This is required for the AES-NI instructions.
976 #
977 AC_CACHE_CHECK([whether GCC inline assembler supports SSSE3 instructions],
978        [gcry_cv_gcc_inline_asm_ssse3],
979        [gcry_cv_gcc_inline_asm_ssse3=no
980         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
981           [[static unsigned char be_mask[16] __attribute__ ((aligned (16))) =
982               { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
983             void a(void) {
984               __asm__("pshufb %[mask], %%xmm2\n\t"::[mask]"m"(*be_mask):);
985             }]])],
986           [gcry_cv_gcc_inline_asm_ssse3=yes])])
987 if test "$gcry_cv_gcc_inline_asm_ssse3" = "yes" ; then
988    AC_DEFINE(HAVE_GCC_INLINE_ASM_SSSE3,1,
989      [Defined if inline assembler supports SSSE3 instructions])
990 fi
991
992
993 #
994 # Check whether GCC inline assembler supports AVX instructions
995 #
996 AC_CACHE_CHECK([whether GCC inline assembler supports AVX instructions],
997        [gcry_cv_gcc_inline_asm_avx],
998        [gcry_cv_gcc_inline_asm_avx=no
999         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
1000           [[void a(void) {
1001               __asm__("vaesdeclast (%[mem]),%%xmm0,%%xmm7\n\t"::[mem]"r"(0):);
1002             }]])],
1003           [gcry_cv_gcc_inline_asm_avx=yes])])
1004 if test "$gcry_cv_gcc_inline_asm_avx" = "yes" ; then
1005    AC_DEFINE(HAVE_GCC_INLINE_ASM_AVX,1,
1006      [Defined if inline assembler supports AVX instructions])
1007 fi
1008
1009
1010 #
1011 # Check whether GCC inline assembler supports AVX2 instructions
1012 #
1013 AC_CACHE_CHECK([whether GCC inline assembler supports AVX2 instructions],
1014        [gcry_cv_gcc_inline_asm_avx2],
1015        [gcry_cv_gcc_inline_asm_avx2=no
1016         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
1017           [[void a(void) {
1018               __asm__("vpbroadcastb %%xmm7,%%ymm1\n\t":::);
1019             }]])],
1020           [gcry_cv_gcc_inline_asm_avx2=yes])])
1021 if test "$gcry_cv_gcc_inline_asm_avx2" = "yes" ; then
1022    AC_DEFINE(HAVE_GCC_INLINE_ASM_AVX2,1,
1023      [Defined if inline assembler supports AVX2 instructions])
1024 fi
1025
1026
1027 #
1028 # Check whether GCC assembler supports features needed for our amd64
1029 # implementations
1030 #
1031 if test $amd64_as_feature_detection = yes; then
1032     AC_CACHE_CHECK([whether GCC assembler is compatible for amd64 assembly implementations],
1033        [gcry_cv_gcc_amd64_platform_as_ok],
1034        [gcry_cv_gcc_amd64_platform_as_ok=no
1035         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
1036           [[__asm__(
1037                 /* Test if '.type' and '.size' are supported.  */
1038                 /* These work only on ELF targets. */
1039                 /* TODO: add COFF (mingw64, cygwin64) support to assembly
1040                  * implementations.  Mingw64/cygwin64 also require additional
1041                  * work because they use different calling convention. */
1042                 "asmfunc:\n\t"
1043                 ".size asmfunc,.-asmfunc;\n\t"
1044                 ".type asmfunc,@function;\n\t"
1045             );]])],
1046           [gcry_cv_gcc_amd64_platform_as_ok=yes])])
1047   if test "$gcry_cv_gcc_amd64_platform_as_ok" = "yes" ; then
1048      AC_DEFINE(HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS,1,
1049               [Defined if underlying assembler is compatible with amd64 assembly implementations])
1050   fi
1051 fi
1052
1053
1054 #
1055 # Check whether compiler is configured for ARMv6 or newer architecture
1056 #
1057 AC_CACHE_CHECK([whether compiler is configured for ARMv6 or newer architecture],
1058        [gcry_cv_cc_arm_arch_is_v6],
1059        [AC_EGREP_CPP(yes,
1060           [#if defined(__arm__) && \
1061              ((defined(__ARM_ARCH) && __ARM_ARCH >= 6) \
1062              || defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
1063              || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \
1064              || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) \
1065              || defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
1066              || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \
1067              || defined(__ARM_ARCH_7EM__))
1068             yes
1069            #endif
1070           ], gcry_cv_cc_arm_arch_is_v6=yes, gcry_cv_cc_arm_arch_is_v6=no)])
1071 if test "$gcry_cv_cc_arm_arch_is_v6" = "yes" ; then
1072    AC_DEFINE(HAVE_ARM_ARCH_V6,1,
1073      [Defined if ARM architecture is v6 or newer])
1074 fi
1075
1076
1077 #
1078 # Check whether GCC inline assembler supports NEON instructions
1079 #
1080 AC_CACHE_CHECK([whether GCC inline assembler supports NEON instructions],
1081        [gcry_cv_gcc_inline_asm_neon],
1082        [gcry_cv_gcc_inline_asm_neon=no
1083         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
1084           [[__asm__(
1085                 ".syntax unified\n\t"
1086                 ".thumb\n\t"
1087                 ".fpu neon\n\t"
1088                 "vld1.64 {%q0-%q1}, [%r0]!;\n\t"
1089                 "vrev64.8 %q0, %q3;\n\t"
1090                 "vadd.u64 %q0, %q1;\n\t"
1091                 "vadd.s64 %d3, %d2, %d3;\n\t"
1092                 );
1093             ]])],
1094           [gcry_cv_gcc_inline_asm_neon=yes])])
1095 if test "$gcry_cv_gcc_inline_asm_neon" = "yes" ; then
1096    AC_DEFINE(HAVE_GCC_INLINE_ASM_NEON,1,
1097      [Defined if inline assembler supports NEON instructions])
1098 fi
1099
1100
1101 #
1102 # Check whether GCC assembler supports features needed for our ARM
1103 # implementations
1104 #
1105 AC_CACHE_CHECK([whether GCC assembler is compatible for ARM assembly implementations],
1106        [gcry_cv_gcc_arm_platform_as_ok],
1107        [gcry_cv_gcc_arm_platform_as_ok=no
1108         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
1109           [[__asm__(
1110                 /* Test if assembler supports UAL syntax.  */
1111                 ".syntax unified\n\t"
1112                 ".arm\n\t" /* our assembly code is in ARM mode  */
1113                 /* Following causes error if assembler ignored '.syntax unified'.  */
1114                 "asmfunc:\n\t"
1115                 "add %r0, %r0, %r4, ror #12;\n\t"
1116
1117                 /* Test if '.type' and '.size' are supported.  */
1118                 ".size asmfunc,.-asmfunc;\n\t"
1119                 ".type asmfunc,%function;\n\t"
1120             );]])],
1121           [gcry_cv_gcc_arm_platform_as_ok=yes])])
1122 if test "$gcry_cv_gcc_arm_platform_as_ok" = "yes" ; then
1123    AC_DEFINE(HAVE_COMPATIBLE_GCC_ARM_PLATFORM_AS,1,
1124      [Defined if underlying assembler is compatible with ARM assembly implementations])
1125 fi
1126
1127
1128 #######################################
1129 #### Checks for library functions. ####
1130 #######################################
1131
1132 AC_FUNC_VPRINTF
1133 # We have replacements for these in src/missing-string.c
1134 AC_CHECK_FUNCS(stpcpy strcasecmp)
1135 # We have replacements for these in src/g10lib.h
1136 AC_CHECK_FUNCS(strtoul memmove stricmp atexit raise)
1137 # Other checks
1138 AC_CHECK_FUNCS(strerror rand mmap getpagesize sysconf waitpid wait4)
1139 AC_CHECK_FUNCS(gettimeofday getrusage gethrtime clock_gettime syslog)
1140 AC_CHECK_FUNCS(fcntl ftruncate)
1141
1142 GNUPG_CHECK_MLOCK
1143
1144 #
1145 # Replacement functions.
1146 #
1147 AC_REPLACE_FUNCS([getpid clock])
1148
1149
1150 #
1151 # Check wether it is necessary to link against libdl.
1152 #
1153 DL_LIBS=""
1154 if test "$use_hmac_binary_check" = yes ; then
1155   _gcry_save_libs="$LIBS"
1156   LIBS=""
1157   AC_SEARCH_LIBS(dlopen, c dl,,,)
1158   DL_LIBS=$LIBS
1159   LIBS="$_gcry_save_libs"
1160   LIBGCRYPT_CONFIG_LIBS="${LIBGCRYPT_CONFIG_LIBS} ${DL_LIBS}"
1161 fi
1162 AC_SUBST(DL_LIBS)
1163
1164
1165 #
1166 # Check whether we can use Linux capabilities as requested.
1167 #
1168 if test "$use_capabilities" = "yes" ; then
1169 use_capabilities=no
1170 AC_CHECK_HEADERS(sys/capability.h)
1171 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
1172   AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
1173   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
1174      AC_DEFINE(USE_CAPABILITIES,1,
1175                [define if capabilities should be used])
1176      LIBS="$LIBS -lcap"
1177      use_capabilities=yes
1178   fi
1179 fi
1180 if test "$use_capabilities" = "no" ; then
1181     AC_MSG_WARN([[
1182 ***
1183 *** The use of capabilities on this system is not possible.
1184 *** You need a recent Linux kernel and some patches:
1185 ***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
1186 ***   fcap-module-990613.tar.gz     (kernel module)
1187 ***   libcap-1.92.tar.gz            (user mode library and utilities)
1188 *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
1189 *** set (filesystems menu). Be warned: This code is *really* ALPHA.
1190 ***]])
1191 fi
1192 fi
1193
1194 # Check whether a random device is available.
1195 if test "$try_dev_random" = yes ; then
1196     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
1197     [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
1198       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
1199     if test "$ac_cv_have_dev_random" = yes; then
1200         AC_DEFINE(HAVE_DEV_RANDOM,1,
1201                  [defined if the system supports a random device] )
1202     fi
1203 else
1204     AC_MSG_CHECKING(for random device)
1205     ac_cv_have_dev_random=no
1206     AC_MSG_RESULT(has been disabled)
1207 fi
1208
1209 # Figure out the random modules for this configuration.
1210 if test "$random" = "default"; then
1211
1212     # Select default value.
1213     if test "$ac_cv_have_dev_random" = yes; then
1214         # Try Linuxish random device.
1215         random_modules="linux"
1216     else
1217         case "${host}" in
1218         *-*-mingw32ce*)
1219           # WindowsCE random device.
1220           random_modules="w32ce"
1221           ;;
1222         *-*-mingw32*|*-*-cygwin*)
1223           # Windows random device.
1224           random_modules="w32"
1225           ;;
1226         *)
1227           # Build everything, allow to select at runtime.
1228           random_modules="$auto_random_modules"
1229           ;;
1230         esac
1231     fi
1232 else
1233     if test "$random" = "auto"; then
1234         # Build everything, allow to select at runtime.
1235         random_modules="$auto_random_modules"
1236     else
1237         random_modules="$random"
1238     fi
1239 fi
1240
1241
1242 #
1243 # Setup assembler stuff.
1244 #
1245 # Note that config.links also defines mpi_cpu_arch, which is required
1246 # later on.
1247 #
1248 GNUPG_SYS_SYMBOL_UNDERSCORE()
1249 AC_ARG_ENABLE(mpi-path,
1250               AC_HELP_STRING([--enable-mpi-path=EXTRA_PATH],
1251               [prepend EXTRA_PATH to list of CPU specific optimizations]),
1252               mpi_extra_path="$enableval",mpi_extra_path="")
1253 AC_MSG_CHECKING(for mpi assembler functions)
1254 if test -f $srcdir/mpi/config.links ; then
1255     . $srcdir/mpi/config.links
1256     AC_CONFIG_LINKS("$mpi_ln_list")
1257     ac_cv_mpi_sflags="$mpi_sflags"
1258     AC_MSG_RESULT(done)
1259 else
1260     AC_MSG_RESULT(failed)
1261     AC_MSG_ERROR([mpi/config.links missing!])
1262 fi
1263 MPI_SFLAGS="$ac_cv_mpi_sflags"
1264 AC_SUBST(MPI_SFLAGS)
1265
1266 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_ADD1, test "$mpi_mod_asm_mpih_add1" = yes)
1267 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_SUB1, test "$mpi_mod_asm_mpih_sub1" = yes)
1268 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL1, test "$mpi_mod_asm_mpih_mul1" = yes)
1269 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL2, test "$mpi_mod_asm_mpih_mul2" = yes)
1270 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL3, test "$mpi_mod_asm_mpih_mul3" = yes)
1271 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_LSHIFT, test "$mpi_mod_asm_mpih_lshift" = yes)
1272 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_RSHIFT, test "$mpi_mod_asm_mpih_rshift" = yes)
1273 AM_CONDITIONAL(MPI_MOD_ASM_UDIV, test "$mpi_mod_asm_udiv" = yes)
1274 AM_CONDITIONAL(MPI_MOD_ASM_UDIV_QRNND, test "$mpi_mod_asm_udiv_qrnnd" = yes)
1275 AM_CONDITIONAL(MPI_MOD_C_MPIH_ADD1, test "$mpi_mod_c_mpih_add1" = yes)
1276 AM_CONDITIONAL(MPI_MOD_C_MPIH_SUB1, test "$mpi_mod_c_mpih_sub1" = yes)
1277 AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL1, test "$mpi_mod_c_mpih_mul1" = yes)
1278 AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL2, test "$mpi_mod_c_mpih_mul2" = yes)
1279 AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL3, test "$mpi_mod_c_mpih_mul3" = yes)
1280 AM_CONDITIONAL(MPI_MOD_C_MPIH_LSHIFT, test "$mpi_mod_c_mpih_lshift" = yes)
1281 AM_CONDITIONAL(MPI_MOD_C_MPIH_RSHIFT, test "$mpi_mod_c_mpih_rshift" = yes)
1282 AM_CONDITIONAL(MPI_MOD_C_UDIV, test "$mpi_mod_c_udiv" = yes)
1283 AM_CONDITIONAL(MPI_MOD_C_UDIV_QRNND, test "$mpi_mod_c_udiv_qrnnd" = yes)
1284
1285 if test mym4_isgit = "yes"; then
1286     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
1287               [Defined if this is not a regular release])
1288 fi
1289
1290
1291 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
1292
1293
1294 # This is handy for debugging so the compiler doesn't rearrange
1295 # things and eliminate variables.
1296 AC_ARG_ENABLE(optimization,
1297        AC_HELP_STRING([--disable-optimization],
1298                       [disable compiler optimization]),
1299                       [if test $enableval = no ; then
1300                          CFLAGS=`echo $CFLAGS | sed 's/-O[[0-9]]//'`
1301                        fi])
1302
1303 # CFLAGS mangling when using gcc.
1304 if test "$GCC" = yes; then
1305     CFLAGS="$CFLAGS -Wall"
1306     if test "$USE_MAINTAINER_MODE" = "yes"; then
1307         CFLAGS="$CFLAGS -Wcast-align -Wshadow -Wstrict-prototypes"
1308         CFLAGS="$CFLAGS -Wformat -Wno-format-y2k -Wformat-security"
1309
1310         # If -Wno-missing-field-initializers is supported we can enable a
1311         # a bunch of really useful warnings.
1312         AC_MSG_CHECKING([if gcc supports -Wno-missing-field-initializers])
1313         _gcc_cflags_save=$CFLAGS
1314         CFLAGS="-Wno-missing-field-initializers"
1315         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
1316         AC_MSG_RESULT($_gcc_wopt)
1317         CFLAGS=$_gcc_cflags_save;
1318         if test x"$_gcc_wopt" = xyes ; then
1319           CFLAGS="$CFLAGS -W -Wextra -Wbad-function-cast"
1320           CFLAGS="$CFLAGS -Wwrite-strings"
1321           CFLAGS="$CFLAGS -Wdeclaration-after-statement"
1322           CFLAGS="$CFLAGS -Wno-missing-field-initializers"
1323           CFLAGS="$CFLAGS -Wno-sign-compare"
1324         fi
1325
1326         AC_MSG_CHECKING([if gcc supports -Wpointer-arith])
1327         _gcc_cflags_save=$CFLAGS
1328         CFLAGS="-Wpointer-arith"
1329         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
1330         AC_MSG_RESULT($_gcc_wopt)
1331         CFLAGS=$_gcc_cflags_save;
1332         if test x"$_gcc_wopt" = xyes ; then
1333           CFLAGS="$CFLAGS -Wpointer-arith"
1334         fi
1335     fi
1336
1337 fi
1338
1339 # Check whether as(1) supports a noeexecstack feature.  This test
1340 # includes an override option.
1341 CL_AS_NOEXECSTACK
1342
1343
1344 AC_SUBST(LIBGCRYPT_CONFIG_API_VERSION)
1345 AC_SUBST(LIBGCRYPT_CONFIG_LIBS)
1346 AC_SUBST(LIBGCRYPT_CONFIG_CFLAGS)
1347 AC_SUBST(LIBGCRYPT_CONFIG_HOST)
1348 AC_SUBST(LIBGCRYPT_THREAD_MODULES)
1349
1350 AC_CONFIG_COMMANDS([gcrypt-conf],[[
1351 chmod +x src/libgcrypt-config
1352 ]],[[
1353 prefix=$prefix
1354 exec_prefix=$exec_prefix
1355 libdir=$libdir
1356 datadir=$datadir
1357 DATADIRNAME=$DATADIRNAME
1358 ]])
1359
1360 #####################
1361 #### Conclusion. ####
1362 #####################
1363
1364 # Check that requested feature can actually be used and define
1365 # ENABLE_foo_SUPPORT macros.
1366
1367 if test x"$aesnisupport" = xyes ; then
1368   if test "$gcry_cv_gcc_inline_asm_ssse3" != "yes" ; then
1369     aesnisupport="no (unsupported by compiler)"
1370   fi
1371 fi
1372 if test x"$avxsupport" = xyes ; then
1373   if test "$gcry_cv_gcc_inline_asm_avx" != "yes" ; then
1374     avxsupport="no (unsupported by compiler)"
1375   fi
1376 fi
1377 if test x"$avx2support" = xyes ; then
1378   if test "$gcry_cv_gcc_inline_asm_avx2" != "yes" ; then
1379     avx2support="no (unsupported by compiler)"
1380   fi
1381 fi
1382 if test x"$neonsupport" = xyes ; then
1383   if test "$gcry_cv_gcc_inline_asm_neon" != "yes" ; then
1384     neonsupport="no (unsupported by compiler)"
1385   fi
1386 fi
1387
1388 if test x"$aesnisupport" = xyes ; then
1389   AC_DEFINE(ENABLE_AESNI_SUPPORT, 1,
1390             [Enable support for Intel AES-NI instructions.])
1391 fi
1392 if test x"$avxsupport" = xyes ; then
1393   AC_DEFINE(ENABLE_AVX_SUPPORT,1,
1394             [Enable support for Intel AVX instructions.])
1395 fi
1396 if test x"$avx2support" = xyes ; then
1397   AC_DEFINE(ENABLE_AVX2_SUPPORT,1,
1398             [Enable support for Intel AVX2 instructions.])
1399 fi
1400 if test x"$neonsupport" = xyes ; then
1401   AC_DEFINE(ENABLE_NEON_SUPPORT,1,
1402             [Enable support for ARM NEON instructions.])
1403 fi
1404
1405
1406 # Define conditional sources and config.h symbols depending on the
1407 # selected ciphers, pubkey-ciphers, digests, kdfs, and random modules.
1408
1409 LIST_MEMBER(arcfour, $enabled_ciphers)
1410 if test "$found" = "1"; then
1411    GCRYPT_CIPHERS="$GCRYPT_CIPHERS arcfour.lo"
1412    AC_DEFINE(USE_ARCFOUR, 1, [Defined if this module should be included])
1413 fi
1414
1415 LIST_MEMBER(blowfish, $enabled_ciphers)
1416 if test "$found" = "1" ; then
1417    GCRYPT_CIPHERS="$GCRYPT_CIPHERS blowfish.lo"
1418    AC_DEFINE(USE_BLOWFISH, 1, [Defined if this module should be included])
1419
1420    case "${host}" in
1421       x86_64-*-*)
1422          # Build with the assembly implementation
1423          GCRYPT_CIPHERS="$GCRYPT_CIPHERS blowfish-amd64.lo"
1424       ;;
1425       arm*-*-*)
1426          # Build with the assembly implementation
1427          GCRYPT_CIPHERS="$GCRYPT_CIPHERS blowfish-arm.lo"
1428       ;;
1429    esac
1430 fi
1431
1432 LIST_MEMBER(cast5, $enabled_ciphers)
1433 if test "$found" = "1" ; then
1434    GCRYPT_CIPHERS="$GCRYPT_CIPHERS cast5.lo"
1435    AC_DEFINE(USE_CAST5, 1, [Defined if this module should be included])
1436
1437    case "${host}" in
1438       x86_64-*-*)
1439          # Build with the assembly implementation
1440          GCRYPT_CIPHERS="$GCRYPT_CIPHERS cast5-amd64.lo"
1441       ;;
1442       arm*-*-*)
1443          # Build with the assembly implementation
1444          GCRYPT_CIPHERS="$GCRYPT_CIPHERS cast5-arm.lo"
1445       ;;
1446    esac
1447 fi
1448
1449 LIST_MEMBER(des, $enabled_ciphers)
1450 if test "$found" = "1" ; then
1451    GCRYPT_CIPHERS="$GCRYPT_CIPHERS des.lo"
1452    AC_DEFINE(USE_DES, 1, [Defined if this module should be included])
1453 fi
1454
1455 LIST_MEMBER(aes, $enabled_ciphers)
1456 if test "$found" = "1" ; then
1457    GCRYPT_CIPHERS="$GCRYPT_CIPHERS rijndael.lo"
1458    AC_DEFINE(USE_AES, 1, [Defined if this module should be included])
1459
1460    case "${host}" in
1461       x86_64-*-*)
1462          # Build with the assembly implementation
1463          GCRYPT_CIPHERS="$GCRYPT_CIPHERS rijndael-amd64.lo"
1464       ;;
1465       arm*-*-*)
1466          # Build with the assembly implementation
1467          GCRYPT_CIPHERS="$GCRYPT_CIPHERS rijndael-arm.lo"
1468       ;;
1469    esac
1470 fi
1471
1472 LIST_MEMBER(twofish, $enabled_ciphers)
1473 if test "$found" = "1" ; then
1474    GCRYPT_CIPHERS="$GCRYPT_CIPHERS twofish.lo"
1475    AC_DEFINE(USE_TWOFISH, 1, [Defined if this module should be included])
1476
1477    case "${host}" in
1478       x86_64-*-*)
1479          # Build with the assembly implementation
1480          GCRYPT_CIPHERS="$GCRYPT_CIPHERS twofish-amd64.lo"
1481       ;;
1482       arm*-*-*)
1483          # Build with the assembly implementation
1484          GCRYPT_CIPHERS="$GCRYPT_CIPHERS twofish-arm.lo"
1485       ;;
1486    esac
1487 fi
1488
1489 LIST_MEMBER(serpent, $enabled_ciphers)
1490 if test "$found" = "1" ; then
1491    GCRYPT_CIPHERS="$GCRYPT_CIPHERS serpent.lo"
1492    AC_DEFINE(USE_SERPENT, 1, [Defined if this module should be included])
1493
1494    case "${host}" in
1495       x86_64-*-*)
1496          # Build with the SSE2 implementation
1497          GCRYPT_CIPHERS="$GCRYPT_CIPHERS serpent-sse2-amd64.lo"
1498       ;;
1499    esac
1500
1501    if test x"$avx2support" = xyes ; then
1502       # Build with the AVX2 implementation
1503       GCRYPT_CIPHERS="$GCRYPT_CIPHERS serpent-avx2-amd64.lo"
1504    fi
1505
1506    if test x"$neonsupport" = xyes ; then
1507       # Build with the NEON implementation
1508       GCRYPT_CIPHERS="$GCRYPT_CIPHERS serpent-armv7-neon.lo"
1509    fi
1510 fi
1511
1512 LIST_MEMBER(rfc2268, $enabled_ciphers)
1513 if test "$found" = "1" ; then
1514    GCRYPT_CIPHERS="$GCRYPT_CIPHERS rfc2268.lo"
1515    AC_DEFINE(USE_RFC2268, 1, [Defined if this module should be included])
1516 fi
1517
1518 LIST_MEMBER(seed, $enabled_ciphers)
1519 if test "$found" = "1" ; then
1520    GCRYPT_CIPHERS="$GCRYPT_CIPHERS seed.lo"
1521    AC_DEFINE(USE_SEED, 1, [Defined if this module should be included])
1522 fi
1523
1524 LIST_MEMBER(camellia, $enabled_ciphers)
1525 if test "$found" = "1" ; then
1526    GCRYPT_CIPHERS="$GCRYPT_CIPHERS camellia.lo camellia-glue.lo"
1527    AC_DEFINE(USE_CAMELLIA, 1, [Defined if this module should be included])
1528
1529    case "${host}" in
1530       arm*-*-*)
1531          # Build with the assembly implementation
1532          GCRYPT_CIPHERS="$GCRYPT_CIPHERS camellia-arm.lo"
1533       ;;
1534    esac
1535
1536    if test x"$avxsupport" = xyes ; then
1537       if test x"$aesnisupport" = xyes ; then
1538         # Build with the AES-NI/AVX implementation
1539         GCRYPT_CIPHERS="$GCRYPT_CIPHERS camellia-aesni-avx-amd64.lo"
1540       fi
1541    fi
1542
1543    if test x"$avx2support" = xyes ; then
1544       if test x"$aesnisupport" = xyes ; then
1545         # Build with the AES-NI/AVX2 implementation
1546         GCRYPT_CIPHERS="$GCRYPT_CIPHERS camellia-aesni-avx2-amd64.lo"
1547       fi
1548    fi
1549 fi
1550
1551 LIST_MEMBER(idea, $enabled_ciphers)
1552 if test "$found" = "1" ; then
1553    GCRYPT_CIPHERS="$GCRYPT_CIPHERS idea.lo"
1554    AC_DEFINE(USE_IDEA, 1, [Defined if this module should be included])
1555 fi
1556
1557 LIST_MEMBER(salsa20, $enabled_ciphers)
1558 if test "$found" = "1" ; then
1559    GCRYPT_CIPHERS="$GCRYPT_CIPHERS salsa20.lo"
1560    AC_DEFINE(USE_SALSA20, 1, [Defined if this module should be included])
1561
1562    case "${host}" in
1563       x86_64-*-*)
1564          # Build with the assembly implementation
1565          GCRYPT_CIPHERS="$GCRYPT_CIPHERS salsa20-amd64.lo"
1566       ;;
1567    esac
1568
1569    if test x"$neonsupport" = xyes ; then
1570      # Build with the NEON implementation
1571      GCRYPT_CIPHERS="$GCRYPT_CIPHERS salsa20-armv7-neon.lo"
1572    fi
1573 fi
1574
1575 LIST_MEMBER(gost28147, $enabled_ciphers)
1576 if test "$found" = "1" ; then
1577    GCRYPT_CIPHERS="$GCRYPT_CIPHERS gost28147.lo"
1578    AC_DEFINE(USE_GOST28147, 1, [Defined if this module should be included])
1579 fi
1580
1581 LIST_MEMBER(dsa, $enabled_pubkey_ciphers)
1582 if test "$found" = "1" ; then
1583    GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS dsa.lo"
1584    AC_DEFINE(USE_DSA, 1, [Defined if this module should be included])
1585 fi
1586
1587 LIST_MEMBER(rsa, $enabled_pubkey_ciphers)
1588 if test "$found" = "1" ; then
1589    GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS rsa.lo"
1590    AC_DEFINE(USE_RSA, 1, [Defined if this module should be included])
1591 fi
1592
1593 LIST_MEMBER(elgamal, $enabled_pubkey_ciphers)
1594 if test "$found" = "1" ; then
1595    GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS elgamal.lo"
1596    AC_DEFINE(USE_ELGAMAL, 1, [Defined if this module should be included])
1597 fi
1598
1599 LIST_MEMBER(ecc, $enabled_pubkey_ciphers)
1600 if test "$found" = "1" ; then
1601    GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS \
1602                           ecc.lo ecc-curves.lo ecc-misc.lo \
1603                           ecc-ecdsa.lo ecc-eddsa.lo ecc-gost.lo"
1604    AC_DEFINE(USE_ECC, 1, [Defined if this module should be included])
1605 fi
1606
1607 LIST_MEMBER(crc, $enabled_digests)
1608 if test "$found" = "1" ; then
1609    GCRYPT_DIGESTS="$GCRYPT_DIGESTS crc.lo"
1610    AC_DEFINE(USE_CRC, 1, [Defined if this module should be included])
1611 fi
1612
1613 LIST_MEMBER(gostr3411-94, $enabled_digests)
1614 if test "$found" = "1" ; then
1615    # GOST R 34.11-94 internally uses GOST 28147-89
1616    LIST_MEMBER(gost28147, $enabled_ciphers)
1617    if test "$found" = "1" ; then
1618       GCRYPT_DIGESTS="$GCRYPT_DIGESTS gostr3411-94.lo"
1619       AC_DEFINE(USE_GOST_R_3411_94, 1, [Defined if this module should be included])
1620    fi
1621 fi
1622
1623 LIST_MEMBER(stribog, $enabled_digests)
1624 if test "$found" = "1" ; then
1625    GCRYPT_DIGESTS="$GCRYPT_DIGESTS stribog.lo"
1626    AC_DEFINE(USE_GOST_R_3411_12, 1, [Defined if this module should be included])
1627 fi
1628
1629 LIST_MEMBER(md4, $enabled_digests)
1630 if test "$found" = "1" ; then
1631    GCRYPT_DIGESTS="$GCRYPT_DIGESTS md4.lo"
1632    AC_DEFINE(USE_MD4, 1, [Defined if this module should be included])
1633 fi
1634
1635 LIST_MEMBER(md5, $enabled_digests)
1636 if test "$found" = "1" ; then
1637    GCRYPT_DIGESTS="$GCRYPT_DIGESTS md5.lo"
1638    AC_DEFINE(USE_MD5, 1, [Defined if this module should be included])
1639 fi
1640
1641 LIST_MEMBER(sha256, $enabled_digests)
1642 if test "$found" = "1" ; then
1643    GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha256.lo"
1644    AC_DEFINE(USE_SHA256, 1, [Defined if this module should be included])
1645 fi
1646
1647 LIST_MEMBER(sha512, $enabled_digests)
1648 if test "$found" = "1" ; then
1649    GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha512.lo"
1650    AC_DEFINE(USE_SHA512, 1, [Defined if this module should be included])
1651
1652    if test x"$neonsupport" = xyes ; then
1653      # Build with the NEON implementation
1654      GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha512-armv7-neon.lo"
1655    fi
1656 fi
1657
1658 LIST_MEMBER(tiger, $enabled_digests)
1659 if test "$found" = "1" ; then
1660    GCRYPT_DIGESTS="$GCRYPT_DIGESTS tiger.lo"
1661    AC_DEFINE(USE_TIGER, 1, [Defined if this module should be included])
1662 fi
1663
1664 LIST_MEMBER(whirlpool, $enabled_digests)
1665 if test "$found" = "1" ; then
1666    GCRYPT_DIGESTS="$GCRYPT_DIGESTS whirlpool.lo"
1667    AC_DEFINE(USE_WHIRLPOOL, 1, [Defined if this module should be included])
1668 fi
1669
1670 # rmd160 and sha1 should be included always.
1671 GCRYPT_DIGESTS="$GCRYPT_DIGESTS rmd160.lo sha1.lo"
1672 AC_DEFINE(USE_RMD160, 1, [Defined if this module should be included])
1673 AC_DEFINE(USE_SHA1, 1,   [Defined if this module should be included])
1674
1675 LIST_MEMBER(scrypt, $enabled_kdfs)
1676 if test "$found" = "1" ; then
1677    GCRYPT_KDFS="$GCRYPT_KDFS scrypt.lo"
1678    AC_DEFINE(USE_SCRYPT, 1, [Defined if this module should be included])
1679 fi
1680
1681 LIST_MEMBER(linux, $random_modules)
1682 if test "$found" = "1" ; then
1683    GCRYPT_RANDOM="$GCRYPT_RANDOM rndlinux.lo"
1684    AC_DEFINE(USE_RNDLINUX, 1, [Defined if the /dev/random RNG should be used.])
1685 fi
1686
1687 LIST_MEMBER(unix, $random_modules)
1688 if test "$found" = "1" ; then
1689    GCRYPT_RANDOM="$GCRYPT_RANDOM rndunix.lo"
1690    AC_DEFINE(USE_RNDUNIX, 1, [Defined if the default Unix RNG should be used.])
1691    print_egd_notice=yes
1692 fi
1693
1694 LIST_MEMBER(egd, $random_modules)
1695 if test "$found" = "1" ; then
1696    GCRYPT_RANDOM="$GCRYPT_RANDOM rndegd.lo"
1697    AC_DEFINE(USE_RNDEGD, 1, [Defined if the EGD based RNG should be used.])
1698 fi
1699
1700 LIST_MEMBER(w32, $random_modules)
1701 if test "$found" = "1" ; then
1702    GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32.lo"
1703    AC_DEFINE(USE_RNDW32, 1,
1704              [Defined if the Windows specific RNG should be used.])
1705 fi
1706
1707 LIST_MEMBER(w32ce, $random_modules)
1708 if test "$found" = "1" ; then
1709    GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32ce.lo"
1710    AC_DEFINE(USE_RNDW32CE, 1,
1711              [Defined if the WindowsCE specific RNG should be used.])
1712 fi
1713
1714 AC_SUBST([GCRYPT_CIPHERS])
1715 AC_SUBST([GCRYPT_PUBKEY_CIPHERS])
1716 AC_SUBST([GCRYPT_DIGESTS])
1717 AC_SUBST([GCRYPT_KDFS])
1718 AC_SUBST([GCRYPT_RANDOM])
1719
1720 AC_SUBST(LIBGCRYPT_CIPHERS, $enabled_ciphers)
1721 AC_SUBST(LIBGCRYPT_PUBKEY_CIPHERS, $enabled_pubkey_ciphers)
1722 AC_SUBST(LIBGCRYPT_DIGESTS, $enabled_digests)
1723
1724 # For printing the configuration we need a colon separated list of
1725 # algorithm names.
1726 tmp=`echo "$enabled_ciphers" | tr ' ' : `
1727 AC_DEFINE_UNQUOTED(LIBGCRYPT_CIPHERS, "$tmp",
1728                    [List of available cipher algorithms])
1729 tmp=`echo "$enabled_pubkey_ciphers" | tr ' ' : `
1730 AC_DEFINE_UNQUOTED(LIBGCRYPT_PUBKEY_CIPHERS, "$tmp",
1731                    [List of available public key cipher algorithms])
1732 tmp=`echo "$enabled_digests" | tr ' ' : `
1733 AC_DEFINE_UNQUOTED(LIBGCRYPT_DIGESTS, "$tmp",
1734                    [List of available digest algorithms])
1735 tmp=`echo "$enabled_kdfs" | tr ' ' : `
1736 AC_DEFINE_UNQUOTED(LIBGCRYPT_KDFS, "$tmp",
1737                    [List of available KDF algorithms])
1738
1739
1740 #
1741 # Define conditional sources depending on the used hardware platform.
1742 # Note that all possible modules must also be listed in
1743 # src/Makefile.am (EXTRA_libgcrypt_la_SOURCES).
1744 #
1745 GCRYPT_HWF_MODULES=
1746 case "$mpi_cpu_arch" in
1747      x86)
1748         AC_DEFINE(HAVE_CPU_ARCH_X86, 1,   [Defined for the x86 platforms])
1749         GCRYPT_HWF_MODULES="hwf-x86.lo"
1750         ;;
1751      alpha)
1752         AC_DEFINE(HAVE_CPU_ARCH_ALPHA, 1, [Defined for Alpha platforms])
1753         ;;
1754      sparc)
1755         AC_DEFINE(HAVE_CPU_ARCH_SPARC, 1, [Defined for SPARC platforms])
1756         ;;
1757      mips)
1758         AC_DEFINE(HAVE_CPU_ARCH_MIPS, 1,  [Defined for MIPS platforms])
1759         ;;
1760      m68k)
1761         AC_DEFINE(HAVE_CPU_ARCH_M68K, 1,  [Defined for M68k platforms])
1762         ;;
1763      ppc)
1764         AC_DEFINE(HAVE_CPU_ARCH_PPC, 1,   [Defined for PPC platforms])
1765         ;;
1766      arm)
1767         AC_DEFINE(HAVE_CPU_ARCH_ARM, 1,   [Defined for ARM platforms])
1768         GCRYPT_HWF_MODULES="hwf-arm.lo"
1769         ;;
1770 esac
1771 AC_SUBST([GCRYPT_HWF_MODULES])
1772
1773
1774 #
1775 # Provide information about the build.
1776 #
1777 BUILD_REVISION="mym4_revision"
1778 AC_SUBST(BUILD_REVISION)
1779 AC_DEFINE_UNQUOTED(BUILD_REVISION, "$BUILD_REVISION",
1780                    [GIT commit id revision used to build this package])
1781
1782 changequote(,)dnl
1783 BUILD_FILEVERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./;s/\./,/g'`
1784 changequote([,])dnl
1785 BUILD_FILEVERSION="${BUILD_FILEVERSION}mym4_revision_dec"
1786 AC_SUBST(BUILD_FILEVERSION)
1787
1788 BUILD_TIMESTAMP=`date -u +%Y-%m-%dT%H:%M+0000 2>/dev/null || date`
1789 AC_SUBST(BUILD_TIMESTAMP)
1790 AC_DEFINE_UNQUOTED(BUILD_TIMESTAMP, "$BUILD_TIMESTAMP",
1791                    [The time this package was configured for a build])
1792
1793
1794 # And create the files.
1795 AC_CONFIG_FILES([
1796 Makefile
1797 m4/Makefile
1798 compat/Makefile
1799 mpi/Makefile
1800 cipher/Makefile
1801 random/Makefile
1802 doc/Makefile
1803 src/Makefile
1804 src/gcrypt.h
1805 src/libgcrypt-config
1806 src/versioninfo.rc
1807 tests/Makefile
1808 ])
1809 AC_OUTPUT
1810
1811
1812 detection_module="${GCRYPT_HWF_MODULES%.lo}"
1813 test -n "$detection_module" || detection_module="none"
1814
1815 # Give some feedback
1816 GCRY_MSG_SHOW([],[])
1817 GCRY_MSG_SHOW([Libgcrypt],[v${VERSION} has been configured as follows:])
1818 GCRY_MSG_SHOW([],[])
1819 GCRY_MSG_SHOW([Platform:                 ],[$PRINTABLE_OS_NAME ($host)])
1820 GCRY_MSG_SHOW([Hardware detection module:],[$detection_module])
1821 GCRY_MSG_WRAP([Enabled cipher algorithms:],[$enabled_ciphers])
1822 GCRY_MSG_WRAP([Enabled digest algorithms:],[$enabled_digests])
1823 GCRY_MSG_WRAP([Enabled kdf algorithms:   ],[$enabled_kdfs])
1824 GCRY_MSG_WRAP([Enabled pubkey algorithms:],[$enabled_pubkey_ciphers])
1825 GCRY_MSG_SHOW([Random number generator:  ],[$random])
1826 GCRY_MSG_SHOW([Using linux capabilities: ],[$use_capabilities])
1827 GCRY_MSG_SHOW([Try using Padlock crypto: ],[$padlocksupport])
1828 GCRY_MSG_SHOW([Try using AES-NI crypto:  ],[$aesnisupport])
1829 GCRY_MSG_SHOW([Try using DRNG (RDRAND):  ],[$drngsupport])
1830 GCRY_MSG_SHOW([Try using Intel AVX:      ],[$avxsupport])
1831 GCRY_MSG_SHOW([Try using Intel AVX2:     ],[$avx2support])
1832 GCRY_MSG_SHOW([Try using ARM NEON:       ],[$neonsupport])
1833 GCRY_MSG_SHOW([],[])
1834
1835 if test "$print_egd_notice" = "yes"; then
1836 cat <<G10EOF
1837
1838    The performance of the Unix random gatherer module (rndunix) is not
1839    very good and it does not keep the entropy pool over multiple
1840    invocations of Libgcrypt base applications.  The suggested way to
1841    overcome this problem is to use the
1842
1843                  Entropy Gathering Daemon (EGD)
1844
1845    which provides a entropy source for the whole system.  It is written
1846    in Perl and available at the GnuPG FTP servers.  To enable EGD you
1847    should rerun configure with the option "--enable-static-rnd=egd".
1848    For more information consult the GnuPG webpages:
1849
1850              http://www.gnupg.org/download.html#egd
1851
1852 G10EOF
1853 fi
1854
1855 if test "$gcry_cv_gcc_attribute_aligned" != "yes" ; then
1856 cat <<G10EOF
1857
1858    Please not that your compiler does not support the GCC style
1859    aligned attribute. Using this software may evoke bus errors.
1860
1861 G10EOF
1862 fi
1863
1864 if test -n "$gpl"; then
1865   echo "Please note that you are building a version of Libgcrypt with"
1866   echo "  $gpl"
1867   echo "included.  These parts are licensed under the GPL and thus the"
1868   echo "use of this library has to comply with the conditions of the GPL."
1869 fi