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