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