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