Provide GCRYPT_VERSION_NUMBER macro, add build info to the binary.
[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 AM_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 if test x"$aesnisupport" = xyes ; then
545   AC_DEFINE(ENABLE_AESNI_SUPPORT, 1,
546             [Enable support for Intel AES-NI instructions.])
547 fi
548
549 # Implementation of the --disable-drng-support switch.
550 AC_MSG_CHECKING([whether DRNG support is requested])
551 AC_ARG_ENABLE(drng-support,
552               AC_HELP_STRING([--disable-drng-support],
553                  [Disable support for the Intel DRNG (RDRAND instruction)]),
554               drngsupport=$enableval,drngsupport=yes)
555 AC_MSG_RESULT($drngsupport)
556 if test x"$drngsupport" = xyes ; then
557   AC_DEFINE(ENABLE_DRNG_SUPPORT, 1,
558             [Enable support for Intel DRNG (RDRAND instruction).])
559 fi
560
561 # Implementation of the --disable-avx-support switch.
562 AC_MSG_CHECKING([whether AVX support is requested])
563 AC_ARG_ENABLE(avx-support,
564               AC_HELP_STRING([--disable-avx-support],
565                  [Disable support for the Intel AVX instructions]),
566               avxsupport=$enableval,avxsupport=yes)
567 AC_MSG_RESULT($avxsupport)
568
569 # Implementation of the --disable-O-flag-munging switch.
570 AC_MSG_CHECKING([whether a -O flag munging is requested])
571 AC_ARG_ENABLE([O-flag-munging],
572               AC_HELP_STRING([--disable-O-flag-munging],
573                  [Disable modification of the cc -O flag]),
574               [enable_o_flag_munging=$enableval],
575               [enable_o_flag_munging=yes])
576 AC_MSG_RESULT($enable_o_flag_munging)
577 AM_CONDITIONAL(ENABLE_O_FLAG_MUNGING, test "$enable_o_flag_munging" = "yes")
578
579
580
581 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
582                    [A human readable text with the name of the OS])
583
584 # For some systems we know that we have ld_version scripts.
585 # Use it then as default.
586 have_ld_version_script=no
587 case "${host}" in
588     *-*-linux*)
589         have_ld_version_script=yes
590         ;;
591     *-*-gnu*)
592         have_ld_version_script=yes
593         ;;
594 esac
595 AC_ARG_ENABLE([ld-version-script],
596               AC_HELP_STRING([--enable-ld-version-script],
597                              [enable/disable use of linker version script.
598                               (default is system dependent)]),
599               [have_ld_version_script=$enableval],
600               [ : ] )
601 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
602
603 AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM",
604                    [defined to the name of the strong random device])
605 AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM",
606                    [defined to the name of the weaker random device])
607
608
609 ###############################
610 #### Checks for libraries. ####
611 ###############################
612
613 #
614 # gpg-error is required.
615 #
616 AM_PATH_GPG_ERROR("$NEED_GPG_ERROR_VERSION")
617 if test "x$GPG_ERROR_LIBS" = "x"; then
618   AC_MSG_ERROR([libgpg-error is needed.
619                 See ftp://ftp.gnupg.org/gcrypt/libgpg-error/ .])
620 fi
621
622 AC_DEFINE(GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_GCRYPT,
623           [The default error source for libgcrypt.])
624
625 #
626 # Check whether the GNU Pth library is available.  We require this
627 # to build the optional gcryptrnd program.
628 #
629 AC_ARG_WITH(pth-prefix,
630             AC_HELP_STRING([--with-pth-prefix=PFX],
631                            [prefix where GNU Pth is installed (optional)]),
632      pth_config_prefix="$withval", pth_config_prefix="")
633 if test x$pth_config_prefix != x ; then
634    PTH_CONFIG="$pth_config_prefix/bin/pth-config"
635 fi
636 if test "$use_random_daemon" = "yes"; then
637   AC_PATH_PROG(PTH_CONFIG, pth-config, no)
638   if test "$PTH_CONFIG" = "no"; then
639     AC_MSG_WARN([[
640 ***
641 *** To build the Libgcrypt's random number daemon
642 *** we need the support of the GNU Portable Threads Library.
643 *** Download it from ftp://ftp.gnu.org/gnu/pth/
644 *** On a Debian GNU/Linux system you might want to try
645 ***   apt-get install libpth-dev
646 ***]])
647   else
648     GNUPG_PTH_VERSION_CHECK([1.3.7])
649     if test $have_pth = yes; then
650        PTH_CFLAGS=`$PTH_CONFIG --cflags`
651        PTH_LIBS=`$PTH_CONFIG --ldflags`
652        PTH_LIBS="$PTH_LIBS `$PTH_CONFIG --libs --all`"
653        AC_DEFINE(USE_GNU_PTH, 1,
654                 [Defined if the GNU Portable Thread Library should be used])
655        AC_DEFINE(HAVE_PTH, 1,
656                 [Defined if the GNU Pth is available])
657     fi
658   fi
659 fi
660 AC_SUBST(PTH_CFLAGS)
661 AC_SUBST(PTH_LIBS)
662
663 #
664 # Check whether pthreads is available
665 #
666 AC_CHECK_LIB(pthread,pthread_create,have_pthread=yes)
667 if test "$have_pthread" = yes; then
668    AC_DEFINE(HAVE_PTHREAD, ,[Define if we have pthread.])
669 fi
670
671 #
672 # See which thread system we have
673 # FIXME: Thus duplicates the above check.
674 #
675 gl_LOCK
676
677 # Solaris needs -lsocket and -lnsl. Unisys system includes
678 # gethostbyname in libsocket but needs libnsl for socket.
679 AC_SEARCH_LIBS(setsockopt, [socket], ,
680         [AC_SEARCH_LIBS(setsockopt, [socket], , , [-lnsl])])
681 AC_SEARCH_LIBS(setsockopt, [nsl])
682
683 ##################################
684 #### Checks for header files. ####
685 ##################################
686
687 AC_HEADER_STDC
688 AC_CHECK_HEADERS(unistd.h sys/select.h sys/msg.h)
689 INSERT_SYS_SELECT_H=
690 if test x"$ac_cv_header_sys_select_h" = xyes; then
691   INSERT_SYS_SELECT_H=" include <sys/select.h>"
692 fi
693 AC_SUBST(INSERT_SYS_SELECT_H)
694
695
696 ##########################################
697 #### Checks for typedefs, structures, ####
698 ####  and compiler characteristics.   ####
699 ##########################################
700
701 AC_C_CONST
702 AC_C_INLINE
703 AC_TYPE_SIZE_T
704 AC_TYPE_SIGNAL
705 AC_DECL_SYS_SIGLIST
706 AC_TYPE_PID_T
707
708 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
709 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
710 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
711 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
712 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
713
714 gl_TYPE_SOCKLEN_T
715 case "${host}" in
716   *-*-mingw32*)
717     # socklen_t may or may not be defined depending on what headers
718     # are included.  To be safe we use int as this is the actual type.
719     FALLBACK_SOCKLEN_T="typedef int gcry_socklen_t;"
720     ;;
721   *)
722     if test ".$gl_cv_socklen_t_equiv" = "."; then
723       FALLBACK_SOCKLEN_T="typedef socklen_t gcry_socklen_t;"
724     else
725       FALLBACK_SOCKLEN_T="typedef ${gl_cv_socklen_t_equiv} gcry_socklen_t;"
726     fi
727 esac
728 AC_SUBST(FALLBACK_SOCKLEN_T)
729
730 #
731 # Check for ELF visibility support.
732 #
733 AC_CACHE_CHECK(whether the visibility attribute is supported,
734        gcry_cv_visibility_attribute,
735        [gcry_cv_visibility_attribute=no
736         AC_LANG_CONFTEST([AC_LANG_SOURCE(
737           [[int foo __attribute__ ((visibility ("hidden"))) = 1;
738             int bar __attribute__ ((visibility ("protected"))) = 1;
739           ]])])
740
741         if ${CC-cc} -Werror -S conftest.c -o conftest.s \
742                   1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
743             if grep '\.hidden.*foo' conftest.s >/dev/null 2>&1 ; then
744                 if grep '\.protected.*bar' conftest.s >/dev/null 2>&1; then
745                     gcry_cv_visibility_attribute=yes
746                 fi
747             fi
748         fi
749        ])
750 if test "$gcry_cv_visibility_attribute" = "yes"; then
751     AC_CACHE_CHECK(for broken visibility attribute,
752        gcry_cv_broken_visibility_attribute,
753        [gcry_cv_broken_visibility_attribute=yes
754         AC_LANG_CONFTEST([AC_LANG_SOURCE(
755           [[int foo (int x);
756             int bar (int x) __asm__ ("foo")
757                             __attribute__ ((visibility ("hidden")));
758             int bar (int x) { return x; }
759           ]])])
760
761         if ${CC-cc} -Werror -S conftest.c -o conftest.s \
762                   1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
763            if grep '\.hidden@<:@        _@:>@foo' conftest.s >/dev/null 2>&1;
764             then
765                gcry_cv_broken_visibility_attribute=no
766            fi
767         fi
768        ])
769 fi
770 if test "$gcry_cv_visibility_attribute" = "yes"; then
771     AC_CACHE_CHECK(for broken alias attribute,
772        gcry_cv_broken_alias_attribute,
773        [gcry_cv_broken_alias_attribute=yes
774         AC_LANG_CONFTEST([AC_LANG_SOURCE(
775           [[extern int foo (int x) __asm ("xyzzy");
776             int bar (int x) { return x; }
777             extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
778             extern int dfoo;
779             extern __typeof (dfoo) dfoo __asm ("abccb");
780             int dfoo = 1;
781           ]])])
782
783         if ${CC-cc} -Werror -S conftest.c -o conftest.s \
784                   1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
785            if grep 'xyzzy' conftest.s >/dev/null 2>&1 && \
786               grep 'abccb' conftest.s >/dev/null 2>&1; then
787               gcry_cv_broken_alias_attribute=no
788            fi
789         fi
790         ])
791 fi
792 if test "$gcry_cv_visibility_attribute" = "yes"; then
793     AC_CACHE_CHECK(if gcc supports -fvisibility=hidden,
794        gcry_cv_gcc_has_f_visibility,
795        [gcry_cv_gcc_has_f_visibility=no
796         _gcc_cflags_save=$CFLAGS
797         CFLAGS="-fvisibility=hidden"
798         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
799                           gcry_cv_gcc_has_f_visibility=yes)
800         CFLAGS=$_gcc_cflags_save;
801        ])
802 fi
803 if test "$gcry_cv_visibility_attribute" = "yes" \
804    && test "$gcry_cv_broken_visibility_attribute" != "yes" \
805    && test "$gcry_cv_broken_alias_attribute" != "yes" \
806    && test "$gcry_cv_gcc_has_f_visibility" = "yes"
807  then
808    AC_DEFINE(GCRY_USE_VISIBILITY, 1,
809                [Define to use the GNU C visibility attribute.])
810    CFLAGS="$CFLAGS -fvisibility=hidden"
811 fi
812
813
814 #
815 # Check whether the compiler supports the GCC style aligned attribute
816 #
817 AC_CACHE_CHECK([whether the GCC style aligned attribute is supported],
818        [gcry_cv_gcc_attribute_aligned],
819        [gcry_cv_gcc_attribute_aligned=no
820         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
821           [[struct { int a; } foo __attribute__ ((aligned (16)));]])],
822           [gcry_cv_gcc_attribute_aligned=yes])])
823 if test "$gcry_cv_gcc_attribute_aligned" = "yes" ; then
824    AC_DEFINE(HAVE_GCC_ATTRIBUTE_ALIGNED,1,
825      [Defined if a GCC style "__attribute__ ((aligned (n))" is supported])
826 fi
827
828
829 #
830 # Check whether the compiler supports 'asm' or '__asm__' keyword for
831 # assembler blocks
832 #
833 AC_CACHE_CHECK([whether 'asm' assembler keyword is supported],
834        [gcry_cv_have_asm],
835        [gcry_cv_have_asm=no
836         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
837           [[void a(void) { asm("":::"memory"); }]])],
838           [gcry_cv_have_asm=yes])])
839 AC_CACHE_CHECK([whether '__asm__' assembler keyword is supported],
840        [gcry_cv_have___asm__],
841        [gcry_cv_have___asm__=no
842         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
843           [[void a(void) { __asm__("":::"memory"); }]])],
844           [gcry_cv_have___asm__=yes])])
845 if test "$gcry_cv_have_asm" = "no" ; then
846    if test "$gcry_cv_have___asm__" = "yes" ; then
847       AC_DEFINE(asm,__asm__,
848         [Define to supported assembler block keyword, if plain 'asm' was not
849          supported])
850    fi
851 fi
852
853
854 #
855 # Check whether GCC inline assembler supports AVX instructions
856 #
857 AC_CACHE_CHECK([whether GCC inline assembler supports AVX instructions],
858        [gcry_cv_gcc_inline_asm_avx],
859        [gcry_cv_gcc_inline_asm_avx=no
860         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
861           [[void a(void) {
862               __asm__("vaesdeclast (%[mem]),%%xmm0,%%xmm7\n\t"::[mem]"r"(0):);
863             }]])],
864           [gcry_cv_gcc_inline_asm_avx=yes])])
865 if test "$gcry_cv_gcc_inline_asm_avx" = "yes" ; then
866    AC_DEFINE(HAVE_GCC_INLINE_ASM_AVX,1,
867      [Defined if inline assembler supports AVX instructions])
868
869    if test x"$avxsupport" = xyes ; then
870       AC_DEFINE(ENABLE_AVX_SUPPORT,1,
871         [Enable support for Intel AVX instructions.])
872    fi
873 else
874    if test x"$avxsupport" = xyes ; then
875       avxsupport="no (unsupported by compiler)"
876    fi
877 fi
878
879
880 #######################################
881 #### Checks for library functions. ####
882 #######################################
883
884 AC_FUNC_VPRINTF
885 # We have replacements for these in src/missing-string.c
886 AC_CHECK_FUNCS(stpcpy strcasecmp)
887 # We have replacements for these in src/g10lib.h
888 AC_CHECK_FUNCS(strtoul memmove stricmp atexit raise)
889 # Other checks
890 AC_CHECK_FUNCS(strerror rand mmap getpagesize sysconf waitpid wait4)
891 AC_CHECK_FUNCS(gettimeofday getrusage gethrtime clock_gettime syslog)
892 AC_CHECK_FUNCS(fcntl ftruncate)
893
894 GNUPG_CHECK_MLOCK
895
896 #
897 # Replacement functions.
898 #
899 AC_REPLACE_FUNCS([getpid clock])
900
901
902 #
903 # Check wether it is necessary to link against libdl.
904 #
905 DL_LIBS=""
906 if test "$use_hmac_binary_check" = yes ; then
907   _gcry_save_libs="$LIBS"
908   LIBS=""
909   AC_SEARCH_LIBS(dlopen, c dl,,,)
910   DL_LIBS=$LIBS
911   LIBS="$_gcry_save_libs"
912   LIBGCRYPT_CONFIG_LIBS="${LIBGCRYPT_CONFIG_LIBS} ${DL_LIBS}"
913 fi
914 AC_SUBST(DL_LIBS)
915
916
917 #
918 # Check whether we can use Linux capabilities as requested.
919 #
920 if test "$use_capabilities" = "yes" ; then
921 use_capabilities=no
922 AC_CHECK_HEADERS(sys/capability.h)
923 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
924   AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
925   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
926      AC_DEFINE(USE_CAPABILITIES,1,
927                [define if capabilities should be used])
928      LIBS="$LIBS -lcap"
929      use_capabilities=yes
930   fi
931 fi
932 if test "$use_capabilities" = "no" ; then
933     AC_MSG_WARN([[
934 ***
935 *** The use of capabilities on this system is not possible.
936 *** You need a recent Linux kernel and some patches:
937 ***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
938 ***   fcap-module-990613.tar.gz     (kernel module)
939 ***   libcap-1.92.tar.gz            (user mode library and utilities)
940 *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
941 *** set (filesystems menu). Be warned: This code is *really* ALPHA.
942 ***]])
943 fi
944 fi
945
946 # Check whether a random device is available.
947 if test "$try_dev_random" = yes ; then
948     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
949     [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
950       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
951     if test "$ac_cv_have_dev_random" = yes; then
952         AC_DEFINE(HAVE_DEV_RANDOM,1,
953                  [defined if the system supports a random device] )
954     fi
955 else
956     AC_MSG_CHECKING(for random device)
957     ac_cv_have_dev_random=no
958     AC_MSG_RESULT(has been disabled)
959 fi
960
961 # Figure out the random modules for this configuration.
962 if test "$random" = "default"; then
963
964     # Select default value.
965     if test "$ac_cv_have_dev_random" = yes; then
966         # Try Linuxish random device.
967         random_modules="linux"
968     else
969         case "${host}" in
970         *-*-mingw32ce*)
971           # WindowsCE random device.
972           random_modules="w32ce"
973           ;;
974         *-*-mingw32*|*-*-cygwin*)
975           # Windows random device.
976           random_modules="w32"
977           ;;
978         *)
979           # Build everything, allow to select at runtime.
980           random_modules="$auto_random_modules"
981           ;;
982         esac
983     fi
984 else
985     if test "$random" = "auto"; then
986         # Build everything, allow to select at runtime.
987         random_modules="$auto_random_modules"
988     else
989         random_modules="$random"
990     fi
991 fi
992
993
994 #
995 # Setup assembler stuff.
996 #
997 # Note that config.links also defines mpi_cpu_arch, which is required
998 # later on.
999 #
1000 GNUPG_SYS_SYMBOL_UNDERSCORE()
1001 AC_ARG_ENABLE(mpi-path,
1002               AC_HELP_STRING([--enable-mpi-path=EXTRA_PATH],
1003               [prepend EXTRA_PATH to list of CPU specific optimizations]),
1004               mpi_extra_path="$enableval",mpi_extra_path="")
1005 AC_MSG_CHECKING(for mpi assembler functions)
1006 if test -f $srcdir/mpi/config.links ; then
1007     . $srcdir/mpi/config.links
1008     AC_CONFIG_LINKS("$mpi_ln_list")
1009     ac_cv_mpi_sflags="$mpi_sflags"
1010     AC_MSG_RESULT(done)
1011 else
1012     AC_MSG_RESULT(failed)
1013     AC_MSG_ERROR([mpi/config.links missing!])
1014 fi
1015 MPI_SFLAGS="$ac_cv_mpi_sflags"
1016 AC_SUBST(MPI_SFLAGS)
1017
1018 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_ADD1, test "$mpi_mod_asm_mpih_add1" = yes)
1019 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_SUB1, test "$mpi_mod_asm_mpih_sub1" = yes)
1020 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL1, test "$mpi_mod_asm_mpih_mul1" = yes)
1021 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL2, test "$mpi_mod_asm_mpih_mul2" = yes)
1022 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL3, test "$mpi_mod_asm_mpih_mul3" = yes)
1023 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_LSHIFT, test "$mpi_mod_asm_mpih_lshift" = yes)
1024 AM_CONDITIONAL(MPI_MOD_ASM_MPIH_RSHIFT, test "$mpi_mod_asm_mpih_rshift" = yes)
1025 AM_CONDITIONAL(MPI_MOD_ASM_UDIV, test "$mpi_mod_asm_udiv" = yes)
1026 AM_CONDITIONAL(MPI_MOD_ASM_UDIV_QRNND, test "$mpi_mod_asm_udiv_qrnnd" = yes)
1027 AM_CONDITIONAL(MPI_MOD_C_MPIH_ADD1, test "$mpi_mod_c_mpih_add1" = yes)
1028 AM_CONDITIONAL(MPI_MOD_C_MPIH_SUB1, test "$mpi_mod_c_mpih_sub1" = yes)
1029 AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL1, test "$mpi_mod_c_mpih_mul1" = yes)
1030 AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL2, test "$mpi_mod_c_mpih_mul2" = yes)
1031 AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL3, test "$mpi_mod_c_mpih_mul3" = yes)
1032 AM_CONDITIONAL(MPI_MOD_C_MPIH_LSHIFT, test "$mpi_mod_c_mpih_lshift" = yes)
1033 AM_CONDITIONAL(MPI_MOD_C_MPIH_RSHIFT, test "$mpi_mod_c_mpih_rshift" = yes)
1034 AM_CONDITIONAL(MPI_MOD_C_UDIV, test "$mpi_mod_c_udiv" = yes)
1035 AM_CONDITIONAL(MPI_MOD_C_UDIV_QRNND, test "$mpi_mod_c_udiv_qrnnd" = yes)
1036
1037 if test mym4_isgit = "yes"; then
1038     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
1039               [Defined if this is not a regular release])
1040 fi
1041
1042
1043 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
1044
1045
1046 # This is handy for debugging so the compiler doesn't rearrange
1047 # things and eliminate variables.
1048 AC_ARG_ENABLE(optimization,
1049        AC_HELP_STRING([--disable-optimization],
1050                       [disable compiler optimization]),
1051                       [if test $enableval = no ; then
1052                          CFLAGS=`echo $CFLAGS | sed 's/-O[[0-9]]//'`
1053                        fi])
1054
1055 # CFLAGS mangling when using gcc.
1056 if test "$GCC" = yes; then
1057     CFLAGS="$CFLAGS -Wall"
1058     if test "$USE_MAINTAINER_MODE" = "yes"; then
1059         CFLAGS="$CFLAGS -Wcast-align -Wshadow -Wstrict-prototypes"
1060         CFLAGS="$CFLAGS -Wformat -Wno-format-y2k -Wformat-security"
1061
1062         # If -Wno-missing-field-initializers is supported we can enable a
1063         # a bunch of really useful warnings.
1064         AC_MSG_CHECKING([if gcc supports -Wno-missing-field-initializers])
1065         _gcc_cflags_save=$CFLAGS
1066         CFLAGS="-Wno-missing-field-initializers"
1067         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
1068         AC_MSG_RESULT($_gcc_wopt)
1069         CFLAGS=$_gcc_cflags_save;
1070         if test x"$_gcc_wopt" = xyes ; then
1071           CFLAGS="$CFLAGS -W -Wextra -Wbad-function-cast"
1072           CFLAGS="$CFLAGS -Wwrite-strings"
1073           CFLAGS="$CFLAGS -Wdeclaration-after-statement"
1074           CFLAGS="$CFLAGS -Wno-missing-field-initializers"
1075           CFLAGS="$CFLAGS -Wno-sign-compare"
1076         fi
1077
1078         AC_MSG_CHECKING([if gcc supports -Wpointer-arith])
1079         _gcc_cflags_save=$CFLAGS
1080         CFLAGS="-Wpointer-arith"
1081         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
1082         AC_MSG_RESULT($_gcc_wopt)
1083         CFLAGS=$_gcc_cflags_save;
1084         if test x"$_gcc_wopt" = xyes ; then
1085           CFLAGS="$CFLAGS -Wpointer-arith"
1086         fi
1087     fi
1088
1089 fi
1090
1091 # Check whether as(1) supports a noeexecstack feature.  This test
1092 # includes an override option.
1093 CL_AS_NOEXECSTACK
1094
1095
1096 AC_SUBST(LIBGCRYPT_CONFIG_API_VERSION)
1097 AC_SUBST(LIBGCRYPT_CONFIG_LIBS)
1098 AC_SUBST(LIBGCRYPT_CONFIG_CFLAGS)
1099 AC_SUBST(LIBGCRYPT_CONFIG_HOST)
1100 AC_SUBST(LIBGCRYPT_THREAD_MODULES)
1101
1102 AC_CONFIG_COMMANDS([gcrypt-conf],[[
1103 chmod +x src/libgcrypt-config
1104 ]],[[
1105 prefix=$prefix
1106 exec_prefix=$exec_prefix
1107 libdir=$libdir
1108 datadir=$datadir
1109 DATADIRNAME=$DATADIRNAME
1110 ]])
1111
1112 #####################
1113 #### Conclusion. ####
1114 #####################
1115
1116 # Define conditional sources and config.h symbols depending on the
1117 # selected ciphers, pubkey-ciphers, digests and random modules.
1118
1119 LIST_MEMBER(arcfour, $enabled_ciphers)
1120 if test "$found" = "1"; then
1121    GCRYPT_CIPHERS="$GCRYPT_CIPHERS arcfour.lo"
1122    AC_DEFINE(USE_ARCFOUR, 1, [Defined if this module should be included])
1123 fi
1124
1125 LIST_MEMBER(blowfish, $enabled_ciphers)
1126 if test "$found" = "1" ; then
1127    GCRYPT_CIPHERS="$GCRYPT_CIPHERS blowfish.lo"
1128    AC_DEFINE(USE_BLOWFISH, 1, [Defined if this module should be included])
1129 fi
1130
1131 LIST_MEMBER(cast5, $enabled_ciphers)
1132 if test "$found" = "1" ; then
1133    GCRYPT_CIPHERS="$GCRYPT_CIPHERS cast5.lo"
1134    AC_DEFINE(USE_CAST5, 1, [Defined if this module should be included])
1135 fi
1136
1137 LIST_MEMBER(des, $enabled_ciphers)
1138 if test "$found" = "1" ; then
1139    GCRYPT_CIPHERS="$GCRYPT_CIPHERS des.lo"
1140    AC_DEFINE(USE_DES, 1, [Defined if this module should be included])
1141 fi
1142
1143 LIST_MEMBER(aes, $enabled_ciphers)
1144 if test "$found" = "1" ; then
1145    GCRYPT_CIPHERS="$GCRYPT_CIPHERS rijndael.lo"
1146    AC_DEFINE(USE_AES, 1, [Defined if this module should be included])
1147 fi
1148
1149 LIST_MEMBER(twofish, $enabled_ciphers)
1150 if test "$found" = "1" ; then
1151    GCRYPT_CIPHERS="$GCRYPT_CIPHERS twofish.lo"
1152    AC_DEFINE(USE_TWOFISH, 1, [Defined if this module should be included])
1153 fi
1154
1155 LIST_MEMBER(serpent, $enabled_ciphers)
1156 if test "$found" = "1" ; then
1157    GCRYPT_CIPHERS="$GCRYPT_CIPHERS serpent.lo"
1158    AC_DEFINE(USE_SERPENT, 1, [Defined if this module should be included])
1159 fi
1160
1161 LIST_MEMBER(rfc2268, $enabled_ciphers)
1162 if test "$found" = "1" ; then
1163    GCRYPT_CIPHERS="$GCRYPT_CIPHERS rfc2268.lo"
1164    AC_DEFINE(USE_RFC2268, 1, [Defined if this module should be included])
1165 fi
1166
1167 LIST_MEMBER(seed, $enabled_ciphers)
1168 if test "$found" = "1" ; then
1169    GCRYPT_CIPHERS="$GCRYPT_CIPHERS seed.lo"
1170    AC_DEFINE(USE_SEED, 1, [Defined if this module should be included])
1171 fi
1172
1173 LIST_MEMBER(camellia, $enabled_ciphers)
1174 if test "$found" = "1" ; then
1175    GCRYPT_CIPHERS="$GCRYPT_CIPHERS camellia.lo camellia-glue.lo"
1176    AC_DEFINE(USE_CAMELLIA, 1, [Defined if this module should be included])
1177
1178    if test x"$avxsupport" = xyes ; then
1179       if test x"$aesnisupport" = xyes ; then
1180         # Build with the AES-NI/AVX implementation
1181         GCRYPT_CIPHERS="$GCRYPT_CIPHERS camellia_aesni_avx_x86-64.lo"
1182       fi
1183    fi
1184 fi
1185
1186 LIST_MEMBER(idea, $enabled_ciphers)
1187 if test "$found" = "1" ; then
1188    GCRYPT_CIPHERS="$GCRYPT_CIPHERS idea.lo"
1189    AC_DEFINE(USE_IDEA, 1, [Defined if this module should be included])
1190 fi
1191
1192 LIST_MEMBER(dsa, $enabled_pubkey_ciphers)
1193 if test "$found" = "1" ; then
1194    GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS dsa.lo"
1195    AC_DEFINE(USE_DSA, 1, [Defined if this module should be included])
1196 fi
1197
1198 LIST_MEMBER(rsa, $enabled_pubkey_ciphers)
1199 if test "$found" = "1" ; then
1200    GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS rsa.lo"
1201    AC_DEFINE(USE_RSA, 1, [Defined if this module should be included])
1202 fi
1203
1204 LIST_MEMBER(elgamal, $enabled_pubkey_ciphers)
1205 if test "$found" = "1" ; then
1206    GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS elgamal.lo"
1207    AC_DEFINE(USE_ELGAMAL, 1, [Defined if this module should be included])
1208 fi
1209
1210 LIST_MEMBER(ecc, $enabled_pubkey_ciphers)
1211 if test "$found" = "1" ; then
1212    GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS ecc.lo"
1213    AC_DEFINE(USE_ECC, 1, [Defined if this module should be included])
1214 fi
1215
1216 LIST_MEMBER(crc, $enabled_digests)
1217 if test "$found" = "1" ; then
1218    GCRYPT_DIGESTS="$GCRYPT_DIGESTS crc.lo"
1219    AC_DEFINE(USE_CRC, 1, [Defined if this module should be included])
1220 fi
1221
1222 LIST_MEMBER(md4, $enabled_digests)
1223 if test "$found" = "1" ; then
1224    GCRYPT_DIGESTS="$GCRYPT_DIGESTS md4.lo"
1225    AC_DEFINE(USE_MD4, 1, [Defined if this module should be included])
1226 fi
1227
1228 LIST_MEMBER(md5, $enabled_digests)
1229 if test "$found" = "1" ; then
1230    GCRYPT_DIGESTS="$GCRYPT_DIGESTS md5.lo"
1231    AC_DEFINE(USE_MD5, 1, [Defined if this module should be included])
1232 fi
1233
1234 LIST_MEMBER(sha256, $enabled_digests)
1235 if test "$found" = "1" ; then
1236    GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha256.lo"
1237    AC_DEFINE(USE_SHA256, 1, [Defined if this module should be included])
1238 fi
1239
1240 LIST_MEMBER(sha512, $enabled_digests)
1241 if test "$found" = "1" ; then
1242    GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha512.lo"
1243    AC_DEFINE(USE_SHA512, 1, [Defined if this module should be included])
1244 fi
1245
1246 LIST_MEMBER(tiger, $enabled_digests)
1247 if test "$found" = "1" ; then
1248    GCRYPT_DIGESTS="$GCRYPT_DIGESTS tiger.lo"
1249    AC_DEFINE(USE_TIGER, 1, [Defined if this module should be included])
1250 fi
1251
1252 LIST_MEMBER(whirlpool, $enabled_digests)
1253 if test "$found" = "1" ; then
1254    GCRYPT_DIGESTS="$GCRYPT_DIGESTS whirlpool.lo"
1255    AC_DEFINE(USE_WHIRLPOOL, 1, [Defined if this module should be included])
1256 fi
1257
1258 # rmd160 and sha1 should be included always.
1259 GCRYPT_DIGESTS="$GCRYPT_DIGESTS rmd160.lo sha1.lo"
1260 AC_DEFINE(USE_RMD160, 1, [Defined if this module should be included])
1261 AC_DEFINE(USE_SHA1, 1,   [Defined if this module should be included])
1262
1263 LIST_MEMBER(linux, $random_modules)
1264 if test "$found" = "1" ; then
1265    GCRYPT_RANDOM="$GCRYPT_RANDOM rndlinux.lo"
1266    AC_DEFINE(USE_RNDLINUX, 1, [Defined if the /dev/random RNG should be used.])
1267 fi
1268
1269 LIST_MEMBER(unix, $random_modules)
1270 if test "$found" = "1" ; then
1271    GCRYPT_RANDOM="$GCRYPT_RANDOM rndunix.lo"
1272    AC_DEFINE(USE_RNDUNIX, 1, [Defined if the default Unix RNG should be used.])
1273    print_egd_notice=yes
1274 fi
1275
1276 LIST_MEMBER(egd, $random_modules)
1277 if test "$found" = "1" ; then
1278    GCRYPT_RANDOM="$GCRYPT_RANDOM rndegd.lo"
1279    AC_DEFINE(USE_RNDEGD, 1, [Defined if the EGD based RNG should be used.])
1280 fi
1281
1282 LIST_MEMBER(w32, $random_modules)
1283 if test "$found" = "1" ; then
1284    GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32.lo"
1285    AC_DEFINE(USE_RNDW32, 1,
1286              [Defined if the Windows specific RNG should be used.])
1287 fi
1288
1289 LIST_MEMBER(w32ce, $random_modules)
1290 if test "$found" = "1" ; then
1291    GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32ce.lo"
1292    AC_DEFINE(USE_RNDW32CE, 1,
1293              [Defined if the WindowsCE specific RNG should be used.])
1294 fi
1295
1296 AC_SUBST([GCRYPT_CIPHERS])
1297 AC_SUBST([GCRYPT_PUBKEY_CIPHERS])
1298 AC_SUBST([GCRYPT_DIGESTS])
1299 AC_SUBST([GCRYPT_RANDOM])
1300
1301 AC_SUBST(LIBGCRYPT_CIPHERS, $enabled_ciphers)
1302 AC_SUBST(LIBGCRYPT_PUBKEY_CIPHERS, $enabled_pubkey_ciphers)
1303 AC_SUBST(LIBGCRYPT_DIGESTS, $enabled_digests)
1304
1305 # For printing the configuration we need a colon separated list of
1306 # algorithm names.
1307 tmp=`echo "$enabled_ciphers" | tr ' ' : `
1308 AC_DEFINE_UNQUOTED(LIBGCRYPT_CIPHERS, "$tmp",
1309                    [List of available cipher algorithms])
1310 tmp=`echo "$enabled_pubkey_ciphers" | tr ' ' : `
1311 AC_DEFINE_UNQUOTED(LIBGCRYPT_PUBKEY_CIPHERS, "$tmp",
1312                    [List of available public key cipher algorithms])
1313 tmp=`echo "$enabled_digests" | tr ' ' : `
1314 AC_DEFINE_UNQUOTED(LIBGCRYPT_DIGESTS, "$tmp",
1315                    [List of available digest algorithms])
1316
1317
1318 #
1319 # Define conditional sources depending on the used hardware platform.
1320 # Note that all possible modules must also be listed in
1321 # src/Makefile.am (EXTRA_libgcrypt_la_SOURCES).
1322 #
1323 GCRYPT_HWF_MODULES=
1324 case "$mpi_cpu_arch" in
1325      x86)
1326         AC_DEFINE(HAVE_CPU_ARCH_X86, 1,   [Defined for the x86 platforms])
1327         GCRYPT_HWF_MODULES="hwf-x86.lo"
1328         ;;
1329      alpha)
1330         AC_DEFINE(HAVE_CPU_ARCH_ALPHA, 1, [Defined for Alpha platforms])
1331         ;;
1332      sparc)
1333         AC_DEFINE(HAVE_CPU_ARCH_SPARC, 1, [Defined for SPARC platforms])
1334         ;;
1335      mips)
1336         AC_DEFINE(HAVE_CPU_ARCH_MIPS, 1,  [Defined for MIPS platforms])
1337         ;;
1338      m68k)
1339         AC_DEFINE(HAVE_CPU_ARCH_M68K, 1,  [Defined for M68k platforms])
1340         ;;
1341      ppc)
1342         AC_DEFINE(HAVE_CPU_ARCH_PPC, 1,   [Defined for PPC platforms])
1343         ;;
1344      arm)
1345         AC_DEFINE(HAVE_CPU_ARCH_ARM, 1,   [Defined for ARM platforms])
1346         ;;
1347 esac
1348 AC_SUBST([GCRYPT_HWF_MODULES])
1349
1350
1351 #
1352 # Provide information about the build.
1353 #
1354 BUILD_REVISION="mym4_revision"
1355 AC_SUBST(BUILD_REVISION)
1356 AC_DEFINE_UNQUOTED(BUILD_REVISION, "$BUILD_REVISION",
1357                    [GIT commit id revision used to build this package])
1358
1359 changequote(,)dnl
1360 BUILD_FILEVERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./;s/\./,/g'`
1361 changequote([,])dnl
1362 BUILD_FILEVERSION="${BUILD_FILEVERSION}mym4_revision_dec"
1363 AC_SUBST(BUILD_FILEVERSION)
1364
1365 BUILD_TIMESTAMP=`date -u +%Y-%m-%dT%H:%M+0000 2>/dev/null || date`
1366 AC_SUBST(BUILD_TIMESTAMP)
1367 AC_DEFINE_UNQUOTED(BUILD_TIMESTAMP, "$BUILD_TIMESTAMP",
1368                    [The time this package was configured for a build])
1369
1370
1371 # And create the files.
1372 AC_CONFIG_FILES([
1373 Makefile
1374 m4/Makefile
1375 compat/Makefile
1376 mpi/Makefile
1377 cipher/Makefile
1378 random/Makefile
1379 doc/Makefile
1380 src/Makefile
1381 src/gcrypt.h
1382 src/libgcrypt-config
1383 src/versioninfo.rc
1384 tests/Makefile
1385 ])
1386 AC_OUTPUT
1387
1388
1389 detection_module="${GCRYPT_HWF_MODULES%.lo}"
1390 test -n "$detection_module" || detection_module="none"
1391
1392 # Give some feedback
1393 GCRY_MSG_SHOW([],[])
1394 GCRY_MSG_SHOW([Libgcrypt],[v${VERSION} has been configured as follows:])
1395 GCRY_MSG_SHOW([],[])
1396 GCRY_MSG_SHOW([Platform:                 ],[$PRINTABLE_OS_NAME ($host)])
1397 GCRY_MSG_SHOW([Hardware detection module:],[$detection_module])
1398 GCRY_MSG_WRAP([Enabled cipher algorithms:],[$enabled_ciphers])
1399 GCRY_MSG_WRAP([Enabled digest algorithms:],[$enabled_digests])
1400 GCRY_MSG_WRAP([Enabled pubkey algorithms:],[$enabled_pubkey_ciphers])
1401 GCRY_MSG_SHOW([Random number generator:  ],[$random])
1402 GCRY_MSG_SHOW([Using linux capabilities: ],[$use_capabilities])
1403 GCRY_MSG_SHOW([Try using Padlock crypto: ],[$padlocksupport])
1404 GCRY_MSG_SHOW([Try using AES-NI crypto:  ],[$aesnisupport])
1405 GCRY_MSG_SHOW([Try using DRNG (RDRAND):  ],[$drngsupport])
1406 GCRY_MSG_SHOW([Try using Intel AVX:      ],[$avxsupport])
1407 GCRY_MSG_SHOW([],[])
1408
1409 if test "$print_egd_notice" = "yes"; then
1410 cat <<G10EOF
1411
1412    The performance of the Unix random gatherer module (rndunix) is not
1413    very good and it does not keep the entropy pool over multiple
1414    invocations of Libgcrypt base applications.  The suggested way to
1415    overcome this problem is to use the
1416
1417                  Entropy Gathering Daemon (EGD)
1418
1419    which provides a entropy source for the whole system.  It is written
1420    in Perl and available at the GnuPG FTP servers.  To enable EGD you
1421    should rerun configure with the option "--enable-static-rnd=egd".
1422    For more information consult the GnuPG webpages:
1423
1424              http://www.gnupg.org/download.html#egd
1425
1426 G10EOF
1427 fi
1428
1429 if test "$gcry_cv_gcc_attribute_aligned" != "yes" ; then
1430 cat <<G10EOF
1431
1432    Please not that your compiler does not support the GCC style
1433    aligned attribute. Using this software may evoke bus errors.
1434
1435 G10EOF
1436 fi
1437
1438 if test -n "$gpl"; then
1439   echo "Please note that you are building a version of Libgcrypt with"
1440   echo "  $gpl"
1441   echo "included.  These parts are licensed under the GPL and thus the"
1442   echo "use of this library has to comply with the conditions of the GPL."
1443 fi