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