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