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