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