2003-08-07 Moritz Schulte <moritz@g10code.com>
[libgcrypt.git] / configure.ac
1 # Configure.ac script for Libgcrypt
2 # Copyright (C) 1998, 1999, 2000, 2001, 2002
3 #               2003 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, write to the Free Software
19 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
20 #
21 # (Process this file with autoconf to produce a configure script.)
22 AC_REVISION($Revision$)
23 AC_PREREQ(2.52)
24
25 # Version number: Remember to change it immediately *after* a release
26 # but remove a "-cvs" prefix right *before* a release and append it
27 # soon later.
28
29 AC_INIT(libgcrypt, 1.1.43-cvs, bug-libgcrypt@gnupg.org)
30
31 # LT Version numbers, remember to change them just *before* a release.
32 #   (Interfaces removed:    CURRENT++, AGE=0, REVISION=0)
33 #   (Interfaces added:      CURRENT++, AGE++, REVISION=0)
34 #   (No interfaces changed:                   REVISION++)
35 LIBGCRYPT_LT_CURRENT=7
36 LIBGCRYPT_LT_AGE=0
37 LIBGCRYPT_LT_REVISION=0
38
39 PACKAGE=$PACKAGE_NAME
40 VERSION=$PACKAGE_VERSION
41
42 AC_CONFIG_SRCDIR([src/gcrypt.h])
43 AC_CONFIG_AUX_DIR(scripts)
44 AC_CANONICAL_TARGET()
45 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
46 AM_CONFIG_HEADER(config.h)
47 AM_MAINTAINER_MODE
48
49 AH_TOP([
50 /* need this, because some autoconf tests rely on this (e.g. stpcpy)
51  * and it should be used for new programs  */
52 #define _GNU_SOURCE  1
53 ])
54
55 AH_BOTTOM([
56 #include "gcrypt-defs.h"
57 #define _GCRYPT_IN_LIBGCRYPT 1
58 ])
59
60 AH_VERBATIM([_REENTRANT],
61 [/* To allow the use of Libgcrypt in multithreaded programs we have to use
62     special features from the library. */
63 #ifndef _REENTRANT
64 # define _REENTRANT 1
65 #endif
66 ])
67
68 AC_SUBST(LIBGCRYPT_LT_CURRENT)
69 AC_SUBST(LIBGCRYPT_LT_AGE)
70 AC_SUBST(LIBGCRYPT_LT_REVISION)
71 AC_SUBST(PACKAGE)
72 AC_SUBST(VERSION)
73 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
74 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
75
76 ##########################
77 ## General definitions. ##
78 ##########################
79
80 # Used by libgcrypt-config
81 LIBGCRYPT_CONFIG_LIBS="-lgcrypt"
82 LIBGCRYPT_CONFIG_CFLAGS=""
83
84 # Definitions for symmetric ciphers.
85 available_ciphers="arcfour blowfish cast5 des aes twofish"
86 enabled_ciphers=""
87
88 # Definitions for public-key ciphers.
89 available_pubkey_ciphers="dsa elgamal rsa"
90 enabled_pubkey_ciphers=""
91
92 # Definitions for message digests.
93 available_digests="crc md4 md5 rmd160 sha1 sha256"
94 available_digests_64="sha512 tiger"
95 enabled_digests=""
96
97 # Definitions for random modules.
98 available_random_modules="linux egd unix"
99 auto_random_modules="$available_random_modules"
100
101 # Other definitions.
102 print_egd_notice=no
103
104 # Setup some stuff depending on host/target.
105 case "${target}" in
106     *-*-mingw32*)
107       available_random_modules="w32"
108       ac_cv_have_dev_random=no
109       AC_DEFINE(USE_ONLY_8DOT3,1,
110                 [set this to limit filenames to the 8.3 format])
111       AC_DEFINE(HAVE_DRIVE_LETTERS,1,
112                 [defined if we must run on a stupid file system])
113       AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
114                 [defined if we run on some of the PCDOS like systems 
115                  (DOS, Windoze. OS/2) with special properties like
116                   no file modes])
117       ;;
118
119     i?86-emx-os2 | i?86-*-os2*emx)
120         # OS/2 with the EMX environment
121         ac_cv_have_dev_random=no
122         AC_DEFINE(HAVE_DRIVE_LETTERS)
123         AC_DEFINE(HAVE_DOSISH_SYSTEM)
124         ;;
125
126     i?86-*-msdosdjgpp*)
127         # DOS with the DJGPP environment
128         ac_cv_have_dev_random=no
129         AC_DEFINE(HAVE_DRIVE_LETTERS)
130         AC_DEFINE(HAVE_DOSISH_SYSTEM)
131         ;;
132
133     *-*-freebsd*)
134        # FreeBSD
135        CPPFLAGS="$CPPFLAGS -I/usr/local/include"
136        LDFLAGS="$LDFLAGS -L/usr/local/lib"
137        ;;
138
139     *-*-hpux*)
140         if test -z "$GCC" ; then
141             CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
142         fi
143         ;;
144     *-dec-osf4*)
145         if test -z "$GCC" ; then
146             # Suppress all warnings
147             # to get rid of the unsigned/signed char mismatch warnings.
148             CFLAGS="$CFLAGS -w"
149         fi
150         ;;
151     m68k-atari-mint)
152         ;;
153     *)
154       ;;
155 esac
156
157 # For now we hardcode the use of version scripts.  It would be better
158 # to write a text for this or even implement this within libtool
159 have_ld_version_script=no
160 case "${target}" in
161     *-*-mingw32*)
162         PRINTABLE_OS_NAME="MingW32"
163         ;;
164
165     i?86-emx-os2 | i?86-*-os2*emx )
166         PRINTABLE_OS_NAME="OS/2"
167         ;;
168
169     i?86-*-msdosdjgpp*)
170         PRINTABLE_OS_NAME="MSDOS/DJGPP"
171         ;;
172
173     *-linux*)
174         PRINTABLE_OS_NAME="GNU/Linux"
175         have_ld_version_script=yes
176         ;;
177
178 # let that after linux to avoid gnu-linux problems
179     *-gnu*)
180         PRINTABLE_OS_NAME="GNU/Hurd"
181         have_ld_version_script=yes
182         ;;
183
184     *)
185         PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
186         ;;
187 esac
188
189 case "${target}" in
190     *-openbsd* | *-netbsd*)
191         # FIXME: Are these the best flags for OpenBSD?
192         NAME_OF_DEV_RANDOM="/dev/srandom"
193         NAME_OF_DEV_URANDOM="/dev/urandom"
194 #       DYNLINK_MOD_CFLAGS="-shared -rdynamic $CFLAGS_PIC -Wl,-Bshareable -Wl,-x"
195         ;;
196
197     *-solaris* | *-irix* | *-dec-osf* )
198         NAME_OF_DEV_RANDOM="/dev/random"
199         NAME_OF_DEV_URANDOM="/dev/random"
200 #       DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
201         ;;
202
203     *)
204         NAME_OF_DEV_RANDOM="/dev/random"
205         NAME_OF_DEV_URANDOM="/dev/urandom"
206         # -shared is a gcc-ism.  Find pic flags from GNUPG_CHECK_PIC.
207 #        if test -n "$GCC" ; then
208 #           DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"                            
209 #        else
210 #           DYNLINK_MOD_CFLAGS="$CFLAGS_PIC"
211 #        fi
212         ;;
213 esac
214
215
216 AC_C_BIGENDIAN
217
218 AC_CHECK_SIZEOF(unsigned short, 2)
219 AC_CHECK_SIZEOF(unsigned int, 4)
220 AC_CHECK_SIZEOF(unsigned long, 4)
221 AC_CHECK_SIZEOF(unsigned long long, 0)
222
223 if test "$ac_cv_sizeof_unsigned_short" = "0" \
224    || test "$ac_cv_sizeof_unsigned_int" = "0" \
225    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
226     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
227 fi
228
229 # Do we have any 64-bit data types?
230 if test "$ac_cv_sizeof_unsigned_int" != "8" \
231    && test "$ac_cv_sizeof_unsigned_long" != "8" \
232    && test "$ac_cv_sizeof_unsigned_long_long" != "8" \
233    && test "$ac_cv_sizeof_uint64_t" != "8"; then
234     AC_MSG_WARN([No 64-bit types.  Disabling TIGER/192, SHA-384, and SHA-512])
235 else
236   available_digests="$available_digests $available_digests_64"
237 fi
238
239 # If not specified otherwise, all available algorithms will be
240 # included.
241 default_ciphers="$available_ciphers"
242 default_pubkey_ciphers="$available_pubkey_ciphers"
243 default_digests="$available_digests"
244
245 ############################
246 ## Command line switches. ##
247 ############################
248
249 # Implementation of the --enable-ciphers switch.
250 AC_ARG_ENABLE(ciphers,
251               AC_HELP_STRING([--enable-ciphers=ciphers],
252                              [select the symmetric ciphers to include]),
253               [enabled_ciphers=$(echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]')],
254               [enabled_ciphers=""])
255 if test "x$enabled_ciphers" = "x" \
256    -o "$enabled_ciphers" = "yes"  \
257    -o "$enabled_ciphers" = "no"; then
258    enabled_ciphers=$default_ciphers
259 fi
260 AC_MSG_CHECKING([which symmetric ciphers to include])
261 for cipher in $enabled_ciphers; do
262     LIST_MEMBER($cipher, $available_ciphers)
263     if test "$found" = "0"; then
264        AC_MSG_ERROR([unsupported cipher specified])
265     fi
266 done
267 AC_MSG_RESULT([$enabled_ciphers])
268
269 # Implementation of the --enable-pubkey-ciphers switch.
270 AC_ARG_ENABLE(pubkey-ciphers,
271               AC_HELP_STRING([--enable-pubkey-ciphers=ciphers],
272                              [select the public-key ciphers to include]),
273               [enabled_pubkey_ciphers=$(echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]')],
274               [enabled_pubkey_ciphers=""])
275 if test "x$enabled_pubkey_ciphers" = "x" \
276    -o "$enabled_pubkey_ciphers" = "yes"  \
277    -o "$enabled_pubkey_ciphers" = "no"; then
278    enabled_pubkey_ciphers=$default_pubkey_ciphers
279 fi
280 AC_MSG_CHECKING([which public-key ciphers to include])
281 for cipher in $enabled_pubkey_ciphers; do
282     LIST_MEMBER($cipher, $available_pubkey_ciphers)
283     if test "$found" = "0"; then
284        AC_MSG_ERROR([unsupported public-key cipher specified])
285     fi
286 done
287 AC_MSG_RESULT([$enabled_pubkey_ciphers])
288
289 # Implementation of the --enable-digests switch.
290 AC_ARG_ENABLE(digests,
291               AC_HELP_STRING([--enable-digests=digests],
292                              [select the message digests to include]),
293               [enabled_digests=$(echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]')],
294               [enabled_digests=""])
295 if test "x$enabled_digests" = "x" \
296    -o "$enabled_digests" = "yes"  \
297    -o "$enabled_digests" = "no"; then
298    enabled_digests=$default_digests
299 fi
300 AC_MSG_CHECKING([which message digests to include])
301 for digest in $enabled_digests; do
302     LIST_MEMBER($digest, $available_digests)
303     if test "$found" = "0"; then
304        AC_MSG_ERROR([unsupported message digest specified])
305     fi
306 done
307 AC_MSG_RESULT([$enabled_digests])
308
309 # Implementation of the --enable-random switch.
310 AC_ARG_ENABLE(random,
311               AC_HELP_STRING([--enable-random=name],
312                              [select which random number generator to use]),
313               [random=$(echo $enableval | tr '[A-Z]' '[a-z]')],
314               [])
315 if test "x$random" = "x" -o "$random" = "yes" -o "$random" = "no"; then
316     random=default
317 fi
318 AC_MSG_CHECKING([which random module to use])
319 if test "$random" != "default" -a "$random" != "auto"; then
320     LIST_MEMBER($random, $available_random_modules)
321     if test "$found" = "0"; then
322        AC_MSG_ERROR([unsupported random module specified])
323     fi
324 fi
325 AC_MSG_RESULT($random)
326
327 # Implementation of the --disable-dev-random switch.
328 AC_MSG_CHECKING([whether use of /dev/random is requested])
329 AC_ARG_ENABLE(dev-random,
330 [  --disable-dev-random    disable the use of dev random],
331     try_dev_random=$enableval, try_dev_random=yes)
332 AC_MSG_RESULT($try_dev_random)
333
334 # Implementation of the --with-egd-socket switch.
335 AC_ARG_WITH(egd-socket,
336     [  --with-egd-socket=NAME  Use NAME for the EGD socket)],
337             egd_socket_name="$withval", egd_socket_name="" )
338 AC_DEFINE_UNQUOTED(EGD_SOCKET_NAME, "$egd_socket_name",
339                    [Define if you don't want the default EGD socket name.
340                     For details see cipher/rndegd.c])
341
342 # Implementation of --disable-asm.
343 AC_MSG_CHECKING([whether assembler modules are requested])
344 AC_ARG_ENABLE([asm],
345               AC_HELP_STRING([--disable-asm],
346                              [Disable assembler modules]),
347               [try_asm_modules=$enableval],
348               [try_asm_modules=yes])
349 AC_MSG_RESULT($try_asm_modules)
350
351 # Implementation of the --enable-m-guard switch.
352 AC_MSG_CHECKING([whether memory guard is requested])
353 AC_ARG_ENABLE(m-guard,
354     [  --enable-m-guard        enable memory guard facility],
355     use_m_guard=$enableval, use_m_guard=no)
356     AC_MSG_RESULT($use_m_guard)
357 if test "$use_m_guard" = yes ; then
358     AC_DEFINE(M_GUARD,1,[Define to use the (obsolete) malloc guarding feature])
359 fi
360
361 # Implementation of the --with-capabilities switch.
362 # Check whether we want to use Linux capabilities
363 AC_MSG_CHECKING([whether use of capabilities is requested])
364 AC_ARG_WITH(capabilities,
365     [  --with-capabilities     use linux capabilities [default=no]],
366 [use_capabilities="$withval"],[use_capabilities=no])
367 AC_MSG_RESULT($use_capabilities)
368
369 ##############################
370 #### Checks for programs. ####
371 ##############################
372
373 AC_PROG_MAKE_SET
374 missing_dir=`cd $ac_aux_dir && pwd`
375 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
376 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
377 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
378 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
379 # AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
380 AC_PROG_CC
381 AC_PROG_CPP
382 AM_PROG_AS
383 AC_ISC_POSIX
384 AC_PROG_INSTALL
385 AC_PROG_AWK
386
387 AM_PROG_LIBTOOL
388
389 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
390                    [A human readable text with the name of the OS])
391 AC_ARG_ENABLE([ld-version-script],
392               AC_HELP_STRING([--enable-ld-version-script],
393                              [enable/disable use of linker version script.
394                               (default is system dependent)]),
395               [have_ld_version_script=$enableval],
396               [ : ] )
397 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
398
399 AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM",
400                    [defined to the name of the strong random device])
401 AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM",
402                    [defined to the name of the weaker random device])
403
404 ###############################
405 #### Checks for libraries. ####
406 ###############################
407
408 AM_PATH_GPG_ERROR(0.1)
409 if test "x$GPG_ERROR_LIBS" = "x"; then
410   AC_MSG_ERROR([libgpg-error is needed])
411 fi
412
413 AC_DEFINE(GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_GCRYPT,
414           [The default error source for libgcrypt.])
415
416 # Solaris needs -lsocket and -lnsl. Unisys system includes
417 # gethostbyname in libsocket but needs libnsl for socket.
418 AC_CHECK_LIB(nsl, gethostbyname)
419 AC_CHECK_LIB(socket, socket, ac_need_libsocket=1, ac_try_nsl=1)
420 if test x$ac_need_libsocket = x1; then
421     LIBS="$LIBS -lsocket"
422 fi
423 if test x$ac_try_nsl = x1; then
424     AC_CHECK_LIB(nsl, gethostbyname, ac_need_libnsl=1)
425     if test x$ac_need_libnsl = x1
426     then
427         LIBS="$LIBS -lnsl"
428     fi
429 fi
430
431 ##################################
432 #### Checks for header files. ####
433 ##################################
434
435 AC_HEADER_STDC
436 AC_CHECK_HEADERS(unistd.h sys/select.h)
437
438 ##########################################
439 #### Checks for typedefs, structures, ####
440 ####  and compiler characteristics.   ####
441 ##########################################
442
443 AC_C_CONST
444 AC_C_INLINE
445 AC_TYPE_SIZE_T
446 AC_TYPE_SIGNAL
447 AC_DECL_SYS_SIGLIST
448
449 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
450 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
451 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
452 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
453 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
454
455 #######################################
456 #### Checks for library functions. ####
457 #######################################
458
459 AC_FUNC_VPRINTF
460 # We have replacements for these in src/missing-string.c
461 AC_CHECK_FUNCS(stpcpy strcasecmp)
462 # We have replacements for these in src/g10lib.h
463 AC_CHECK_FUNCS(strtoul memmove stricmp atexit raise)
464 # Other checks
465 AC_CHECK_FUNCS(strerror rand mmap getpagesize waitpid wait4)
466 AC_CHECK_FUNCS(gettimeofday getrusage gethrtime clock_gettime)
467
468 GNUPG_CHECK_MLOCK
469
470 # The ATH systems needs to know whether pth or pthreads are available.
471 have_pth=no
472 have_pthread=no
473 AC_CHECK_LIB(pth,pth_version,have_pth=yes)
474 if test "$have_pth" = yes; then
475   AC_DEFINE(HAVE_PTH, ,[Define if we have Pth.])
476 fi
477 AC_CHECK_LIB(pthread,pthread_create,have_pthread=yes)
478 if test "$have_pthread" != yes; then
479   AC_CHECK_LIB(c,pthread_create,have_pthread=yes)
480 fi
481 if test "$have_pthread" = yes; then
482   AC_DEFINE(HAVE_PTHREAD, ,[Define if we have pthread.])
483 fi
484 AM_CONDITIONAL(HAVE_PTH, test "$have_pth" = "yes")
485 AM_CONDITIONAL(HAVE_PTHREAD, test "$have_pthread" = "yes")
486
487 # Check whether we can use Linux capabilities as requested.
488 if test "$use_capabilities" = "yes" ; then
489 use_capabilities=no
490 AC_CHECK_HEADERS(sys/capability.h)
491 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
492   AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
493   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
494      AC_DEFINE(USE_CAPABILITIES,1,
495                [define if capabilities should be used])
496      LIBS="$LIBS -lcap"
497      use_capabilities=yes
498   fi
499 fi
500 if test "$use_capabilities" = "no" ; then
501     AC_MSG_WARN([[
502 ***
503 *** The use of capabilities on this system is not possible.
504 *** You need a recent Linux kernel and some patches:
505 ***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
506 ***   fcap-module-990613.tar.gz     (kernel module)
507 ***   libcap-1.92.tar.gz            (user mode library and utilities)
508 *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
509 *** set (filesystems menu). Be warned: This code is *really* ALPHA.
510 ***]])
511 fi
512 fi
513
514 # Check whether a random device is available.
515 if test "$try_dev_random" = yes ; then
516     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
517     [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
518       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
519     if test "$ac_cv_have_dev_random" = yes; then
520         AC_DEFINE(HAVE_DEV_RANDOM,1,
521                  [defined if the system supports a random device] )
522     fi
523 else
524     AC_MSG_CHECKING(for random device)
525     ac_cv_have_dev_random=no
526     AC_MSG_RESULT(has been disabled)
527 fi
528
529 # Figure out the random modules for this configuration.
530 if test "$random" = "default"; then
531
532     # Select default value.
533     if test "$ac_cv_have_dev_random" = yes; then
534         # Try Linuxish random device.
535         random_modules="linux"
536     else
537         case "${target}" in
538         *-*-mingw32*|*-*-cygwin*)
539           # Windows random device.
540           random_modules="w32"
541           ;;
542         *)
543           # Build everything, allow to select at runtime.
544           random_modules="$auto_random_modules"
545           ;;
546         esac    
547     fi
548 else
549     if test "$random" = "auto"; then
550         # Build everything, allow to select at runtime.
551         random_modules="$auto_random_modules"
552     fi
553 fi
554
555 AC_MSG_RESULT()
556
557 # Setup assembler stuff.
558 AC_MSG_CHECKING(for mpi assembler functions)
559 if test -f $srcdir/mpi/config.links ; then
560     . $srcdir/mpi/config.links
561     AC_CONFIG_LINKS("$mpi_ln_list")
562     ac_cv_mpi_mod_list="$mpi_mod_list"
563     ac_cv_mpi_sflags="$mpi_sflags"
564     ac_cv_mpi_config_done="yes"
565     AC_MSG_RESULT(done)
566 else
567     AC_MSG_RESULT(failed)
568     AC_MSG_ERROR([mpi/config.links missing!])
569 fi
570 MPI_MOD_LIST_LO=""
571 MPI_MOD_LIST_O=""
572 if test "$ac_cv_mpi_mod_list" != ""; then
573   for i in $ac_cv_mpi_mod_list; do
574       MPI_MOD_LIST_LO="$MPI_MOD_LIST_LO $i.lo"
575       MPI_MOD_LIST_O="$MPI_MOD_LIST_O $i.o"
576   done
577 fi
578 AC_SUBST(MPI_MOD_LIST_LO)
579 AC_SUBST(MPI_MOD_LIST_O)
580 MPI_SFLAGS="$ac_cv_mpi_sflags"
581 AC_SUBST(MPI_SFLAGS)
582
583 # Allow users to append something to the version string without
584 # flagging it as development version.  The user version part is
585 # considered everything after a dash.
586 changequote(,)#
587 tmp_pat='[a-zA-Z]'
588 changequote([,])#
589 if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
590     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
591               [Defined if this is not a regular release])
592 fi
593
594 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
595
596 GNUPG_CHECK_GNUMAKE
597
598 if test "$GCC" = yes; then
599     if test "$MAINTAINER_MODE" = "yes"; then
600         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
601     else
602         CFLAGS="$CFLAGS -Wall"
603     fi
604 fi
605
606 #
607 # Make the version number in src/gcrypt.h the same as the one here.
608 # (this is easier than to have a *.in file just for one substitution)
609 #
610 GNUPG_FIX_HDR_VERSION([src/gcrypt.h], GCRYPT_VERSION)
611
612 AC_SUBST(LIBGCRYPT_CONFIG_LIBS)
613 AC_SUBST(LIBGCRYPT_CONFIG_CFLAGS)
614
615 AC_CONFIG_COMMANDS([gcrypt-defs],[[
616 chmod +x src/libgcrypt-config
617 cat >gcrypt-defs.tmp <<G10EOF
618 /* Generated automatically by configure */
619 #ifdef HAVE_DRIVE_LETTERS
620   #define GNUPG_LOCALEDIR "c:/lib/gnupg/locale"
621   #define GNUPG_LIBDIR  "c:/lib/gnupg"
622   #define GNUPG_DATADIR "c:/lib/gnupg"
623   #define GNUPG_HOMEDIR "c:/gnupg-test"
624 #else
625   #define GNUPG_LOCALEDIR "${prefix}/${DATADIRNAME}/locale"
626   #define GNUPG_LIBDIR  "${libdir}/gnupg"
627   #define GNUPG_DATADIR "${datadir}/gnupg"
628   #ifdef __VMS
629     #define GNUPG_HOMEDIR "/SYS\$LOGIN/gnupg" 
630   #else
631     #define GNUPG_HOMEDIR "~/.gnupg-test" 
632   #endif
633 #endif
634 G10EOF
635 if cmp -s gcrypt-defs.h gcrypt-defs.tmp 2>/dev/null; then
636     echo "gcrypt-defs.h is unchanged"
637     rm -f gcrypt-defs.tmp
638 else
639     rm -f gcrypt-defs.h
640     mv gcrypt-defs.tmp gcrypt-defs.h
641     echo "gcrypt-defs.h created"
642 fi
643 ]],[[
644 prefix=$prefix
645 exec_prefix=$exec_prefix
646 libdir=$libdir
647 datadir=$datadir
648 DATADIRNAME=$DATADIRNAME
649 ]])
650
651 #####################
652 #### Conclusion. ####
653 #####################
654
655 # Define conditional sources and config.h symbols depending on the
656 # selected ciphers, pubkey-ciphers, digests and random modules.
657
658 LIST_MEMBER(arcfour, $enabled_ciphers)
659 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS arcfour.lo"
660 AC_DEFINE_UNQUOTED(USE_ARCFOUR, $found, [Defined if this module should be included])
661 LIST_MEMBER(blowfish, $enabled_ciphers)
662 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS blowfish.lo"
663 AC_DEFINE_UNQUOTED(USE_BLOWFISH, $found, [Defined if this module should be included])
664 LIST_MEMBER(cast5, $enabled_ciphers)
665 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS cast5.lo"
666 AC_DEFINE_UNQUOTED(USE_CAST5, $found, [Defined if this module should be included])
667 LIST_MEMBER(des, $enabled_ciphers)
668 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS des.lo"
669 AC_DEFINE_UNQUOTED(USE_DES, $found, [Defined if this module should be included])
670 LIST_MEMBER(aes, $enabled_ciphers)
671 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS rijndael.lo"
672 AC_DEFINE_UNQUOTED(USE_AES, $found, [Defined if this module should be included])
673 LIST_MEMBER(twofish, $enabled_ciphers)
674 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS twofish.lo"
675 AC_DEFINE_UNQUOTED(USE_TWOFISH, $found, [Defined if this module should be included])
676 LIST_MEMBER(serpent, $enabled_ciphers)
677 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS serpent.lo"
678 AC_DEFINE_UNQUOTED(USE_SERPENT, $found, [Defined if this module should be included])
679
680 LIST_MEMBER(dsa, $enabled_pubkey_ciphers)
681 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS dsa.lo"
682 AC_DEFINE_UNQUOTED(USE_DSA, $found, [Defined if this module should be included])
683 LIST_MEMBER(rsa, $enabled_pubkey_ciphers)
684 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS rsa.lo"
685 AC_DEFINE_UNQUOTED(USE_RSA, $found, [Defined if this module should be included])
686 LIST_MEMBER(elgamal, $enabled_pubkey_ciphers)
687 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS elgamal.lo"
688 AC_DEFINE_UNQUOTED(USE_ELGAMAL, $found, [Defined if this module should be included])
689
690 LIST_MEMBER(crc, $enabled_digests)
691 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS crc.lo"
692 AC_DEFINE_UNQUOTED(USE_CRC, $found, [Defined if this module should be included])
693 LIST_MEMBER(md4, $enabled_digests)
694 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS md4.lo"
695 AC_DEFINE_UNQUOTED(USE_MD4, $found, [Defined if this module should be included])
696 LIST_MEMBER(md5, $enabled_digests)
697 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS md5.lo"
698 AC_DEFINE_UNQUOTED(USE_MD5, $found, [Defined if this module should be included])
699 LIST_MEMBER(sha1, $enabled_digests)
700 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha1.lo"
701 AC_DEFINE_UNQUOTED(USE_SHA1, $found, [Defined if this module should be included])
702 LIST_MEMBER(sha256, $enabled_digests)
703 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha256.lo"
704 AC_DEFINE_UNQUOTED(USE_SHA256, $found, [Defined if this module should be included])
705 LIST_MEMBER(sha512, $enabled_digests)
706 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha512.lo"
707 AC_DEFINE_UNQUOTED(USE_SHA512, $found, [Defined if this module should be included])
708 LIST_MEMBER(tiger, $enabled_digests)
709 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS tiger.lo"
710 AC_DEFINE_UNQUOTED(USE_TIGER, $found, [Defined if this module should be included])
711
712 # rmd160 should be included always.
713 GCRYPT_DIGESTS="$GCRYPT_DIGESTS rmd160.lo"
714 AM_CONDITIONAL(USE_RMD160, true)
715 AC_DEFINE_UNQUOTED(USE_RMD160, 1, [Defined if this module should be included])
716
717 LIST_MEMBER(linux, $random_modules)
718 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndlinux.lo"
719 AC_DEFINE_UNQUOTED(USE_RNDLINUX, $found, [Defined if the /dev/random based RNG should be used.])
720
721 LIST_MEMBER(unix, $random_modules)
722 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndunix.lo"
723 AC_DEFINE_UNQUOTED(USE_RNDUNIX, $found, [Defined if the default Unix RNG should be used.])
724 if test "$found" = "1"; then
725    print_egd_notice=yes
726 fi
727
728 LIST_MEMBER(egd, $random_modules)
729 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndegd.lo"
730 AC_DEFINE_UNQUOTED(USE_RNDEGD, $found, [Defined if the EGD based RNG should be used.])
731
732 LIST_MEMBER(w32, $random_modules)
733 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32.lo"
734 AC_DEFINE_UNQUOTED(USE_RNDW32, $found, [Defined if the Windows specific RNG should be used.])
735
736 AC_SUBST([GCRYPT_CIPHERS])
737 AC_SUBST([GCRYPT_PUBKEY_CIPHERS])
738 AC_SUBST([GCRYPT_DIGESTS])
739 AC_SUBST([GCRYPT_RANDOM])
740
741 AC_SUBST(LIBGCRYPT_CIPHERS, $enabled_ciphers)
742 AC_SUBST(LIBGCRYPT_PUBKEY_CIPHERS, $enabled_pubkey_ciphers)
743 AC_SUBST(LIBGCRYPT_DIGESTS, $enabled_digests)
744
745 AC_CONFIG_FILES([
746 Makefile
747 mpi/Makefile
748 cipher/Makefile
749 doc/Makefile
750 src/Makefile
751 src/libgcrypt-config
752 tests/Makefile
753 w32-dll/Makefile
754 ])
755 AC_OUTPUT
756
757 # Give some feedback
758 echo
759
760 if test "$print_egd_notice" = "yes"; then
761 cat <<G10EOF
762   
763    The performance of the Unix random gatherer module (rndunix) is not
764    very good and it does not keep the entropy pool over multiple
765    invocations of GnuPG.  The suggested way to overcome this problem is
766    to use the
767   
768                  Entropy Gathering Daemon (EGD)
769   
770    which provides a entropy source for the whole system.  It is written
771    in Perl and available at the GnuPG FTP servers.  To enable EGD you
772    should rerun configure with the option "--enable-static-rnd=egd".
773    For more information consult the GnuPG webpages:
774   
775              http://www.gnupg.org/download.html#egd
776
777 G10EOF
778 fi
779
780 warn=""
781 for file in "random_modules"; do
782   case "$file" in rndunix | rndw32) warn="$warn $file";; esac
783 done
784 if test -n "$warn"; then
785   echo "Please note that you are building a version of Libgcrypt with"
786   echo "  $warn"
787   echo "included.  These parts are licensed under the GPL and thus the"
788   echo "use of this library has to comply with the conditions of the GPL."
789 fi
790
791 # Give some feedback
792 echo   "                Configured for: $PRINTABLE_OS_NAME ($target)"
793 echo
794
795