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