2003-07-14 Moritz Schulte <moritz@g10code.com>
[libgcrypt.git] / configure.ac
1 # Configure.ac script for Libgcrypt
2 # Copyright (C) 1998, 1999, 2000, 2001,
3 #               2002, 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.42-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=6
36 LIBGCRYPT_LT_AGE=5
37 LIBGCRYPT_LT_REVISION=1
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 AC_CHECK_SIZEOF(unsigned short, 2)
216 AC_CHECK_SIZEOF(unsigned int, 4)
217 AC_CHECK_SIZEOF(unsigned long, 4)
218 AC_CHECK_SIZEOF(unsigned long long, 0)
219
220 if test "$ac_cv_sizeof_unsigned_short" = "0" \
221    || test "$ac_cv_sizeof_unsigned_int" = "0" \
222    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
223     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
224 fi
225
226 # Do we have any 64-bit data types?
227 if test "$ac_cv_sizeof_unsigned_int" != "8" \
228    && test "$ac_cv_sizeof_unsigned_long" != "8" \
229    && test "$ac_cv_sizeof_unsigned_long_long" != "8" \
230    && test "$ac_cv_sizeof_uint64_t" != "8"; then
231     AC_MSG_WARN([No 64-bit types.  Disabling TIGER/192, SHA-384, and SHA-512])
232 else
233   available_digests="$available_digests $available_digests_64"
234 fi
235
236 # If not specified otherwise, all available algorithms will be
237 # included.
238 default_ciphers="$available_ciphers"
239 default_pubkey_ciphers="$available_pubkey_ciphers"
240 default_digests="$available_digests"
241
242 ############################
243 ## Command line switches. ##
244 ############################
245
246 # Implementation of the --enable-ciphers switch.
247 AC_ARG_ENABLE(ciphers,
248               AC_HELP_STRING([--enable-ciphers=ciphers],
249                              [select the symmetric ciphers to include]),
250               [enabled_ciphers=$(echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]')],
251               [enabled_ciphers=""])
252 if test "x$enabled_ciphers" = "x" \
253    -o "$enabled_ciphers" = "yes"  \
254    -o "$enabled_ciphers" = "no"; then
255    enabled_ciphers=$default_ciphers
256 fi
257 AC_MSG_CHECKING([which symmetric ciphers to include])
258 for cipher in $enabled_ciphers; do
259     LIST_MEMBER($cipher, $available_ciphers)
260     if test "$found" = "0"; then
261        AC_MSG_ERROR([unsupported cipher specified])
262     fi
263 done
264 AC_MSG_RESULT([$enabled_ciphers])
265
266 # Implementation of the --enable-pubkey-ciphers switch.
267 AC_ARG_ENABLE(pubkey-ciphers,
268               AC_HELP_STRING([--enable-pubkey-ciphers=ciphers],
269                              [select the public-key ciphers to include]),
270               [enabled_pubkey_ciphers=$(echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]')],
271               [enabled_pubkey_ciphers=""])
272 if test "x$enabled_pubkey_ciphers" = "x" \
273    -o "$enabled_pubkey_ciphers" = "yes"  \
274    -o "$enabled_pubkey_ciphers" = "no"; then
275    enabled_pubkey_ciphers=$default_pubkey_ciphers
276 fi
277 AC_MSG_CHECKING([which public-key ciphers to include])
278 for cipher in $enabled_pubkey_ciphers; do
279     LIST_MEMBER($cipher, $available_pubkey_ciphers)
280     if test "$found" = "0"; then
281        AC_MSG_ERROR([unsupported public-key cipher specified])
282     fi
283 done
284 AC_MSG_RESULT([$enabled_pubkey_ciphers])
285
286 # Implementation of the --enable-digests switch.
287 AC_ARG_ENABLE(digests,
288               AC_HELP_STRING([--enable-digests=digests],
289                              [select the message digests to include]),
290               [enabled_digests=$(echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]')],
291               [enabled_digests=""])
292 if test "x$enabled_digests" = "x" \
293    -o "$enabled_digests" = "yes"  \
294    -o "$enabled_digests" = "no"; then
295    enabled_digests=$default_digests
296 fi
297 AC_MSG_CHECKING([which message digests to include])
298 for digest in $enabled_digests; do
299     LIST_MEMBER($digest, $available_digests)
300     if test "$found" = "0"; then
301        AC_MSG_ERROR([unsupported message digest specified])
302     fi
303 done
304 AC_MSG_RESULT([$enabled_digests])
305
306 # Implementation of the --enable-random switch.
307 AC_ARG_ENABLE(random,
308               AC_HELP_STRING([--enable-random=name],
309                              [select which random number generator to use]),
310               [random=$(echo $enableval | tr '[A-Z]' '[a-z]')],
311               [])
312 if test "x$random" = "x" -o "$random" = "yes" -o "$random" = "no"; then
313     random=default
314 fi
315 AC_MSG_CHECKING([which random module to use])
316 if test "$random" != "default" -a "$random" != "auto"; then
317     LIST_MEMBER($random, $available_random_modules)
318     if test "$found" = "0"; then
319        AC_MSG_ERROR([unsupported random module specified])
320     fi
321 fi
322 AC_MSG_RESULT($random)
323
324 # Implementation of the --disable-dev-random switch.
325 AC_MSG_CHECKING([whether use of /dev/random is requested])
326 AC_ARG_ENABLE(dev-random,
327 [  --disable-dev-random    disable the use of dev random],
328     try_dev_random=$enableval, try_dev_random=yes)
329 AC_MSG_RESULT($try_dev_random)
330
331 # Implementation of the --with-egd-socket switch.
332 AC_ARG_WITH(egd-socket,
333     [  --with-egd-socket=NAME  Use NAME for the EGD socket)],
334             egd_socket_name="$withval", egd_socket_name="" )
335 AC_DEFINE_UNQUOTED(EGD_SOCKET_NAME, "$egd_socket_name",
336                    [Define if you don't want the default EGD socket name.
337                     For details see cipher/rndegd.c])
338
339 # Implementation of --disable-asm.
340 AC_MSG_CHECKING([whether assembler modules are requested])
341 AC_ARG_ENABLE([asm],
342               AC_HELP_STRING([--disable-asm],
343                              [Disable assembler modules]),
344               [try_asm_modules=$enableval],
345               [try_asm_modules=yes])
346 AC_MSG_RESULT($try_asm_modules)
347
348 # Implementation of the --enable-m-guard switch.
349 AC_MSG_CHECKING([whether memory guard is requested])
350 AC_ARG_ENABLE(m-guard,
351     [  --enable-m-guard        enable memory guard facility],
352     use_m_guard=$enableval, use_m_guard=no)
353     AC_MSG_RESULT($use_m_guard)
354 if test "$use_m_guard" = yes ; then
355     AC_DEFINE(M_GUARD,1,[Define to use the (obsolete) malloc guarding feature])
356 fi
357
358 # Implementation of the --with-capabilities switch.
359 # Check whether we want to use Linux capabilities
360 AC_MSG_CHECKING([whether use of capabilities is requested])
361 AC_ARG_WITH(capabilities,
362     [  --with-capabilities     use linux capabilities [default=no]],
363 [use_capabilities="$withval"],[use_capabilities=no])
364 AC_MSG_RESULT($use_capabilities)
365
366 ##############################
367 #### Checks for programs. ####
368 ##############################
369
370 AC_PROG_MAKE_SET
371 missing_dir=`cd $ac_aux_dir && pwd`
372 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
373 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
374 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
375 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
376 # AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
377 AC_PROG_CC
378 AC_PROG_CPP
379 AM_PROG_AS
380 AC_ISC_POSIX
381 AC_PROG_INSTALL
382 AC_PROG_AWK
383
384 AM_PROG_LIBTOOL
385
386 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
387                    [A human readable text with the name of the OS])
388 AC_ARG_ENABLE([ld-version-script],
389               AC_HELP_STRING([--enable-ld-version-script],
390                              [enable/disable use of linker version script.
391                               (default is system dependent)]),
392               [have_ld_version_script=$enableval],
393               [ : ] )
394 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
395
396 AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM",
397                    [defined to the name of the strong random device])
398 AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM",
399                    [defined to the name of the weaker random device])
400
401 ###############################
402 #### Checks for libraries. ####
403 ###############################
404
405 AM_PATH_GPG_ERROR(0.1)
406 AC_DEFINE(GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_GCRYPT,
407           [The default error source for libgcrypt.])
408
409 # Solaris needs -lsocket and -lnsl. Unisys system includes
410 # gethostbyname in libsocket but needs libnsl for socket.
411 AC_CHECK_LIB(nsl, gethostbyname)
412 AC_CHECK_LIB(socket, socket, ac_need_libsocket=1, ac_try_nsl=1)
413 if test x$ac_need_libsocket = x1; then
414     LIBS="$LIBS -lsocket"
415 fi
416 if test x$ac_try_nsl = x1; then
417     AC_CHECK_LIB(nsl, gethostbyname, ac_need_libnsl=1)
418     if test x$ac_need_libnsl = x1
419     then
420         LIBS="$LIBS -lnsl"
421     fi
422 fi
423
424 ##################################
425 #### Checks for header files. ####
426 ##################################
427
428 AC_HEADER_STDC
429 AC_CHECK_HEADERS(unistd.h sys/select.h)
430
431 ##########################################
432 #### Checks for typedefs, structures, ####
433 ####  and compiler characteristics.   ####
434 ##########################################
435
436 AC_C_CONST
437 AC_C_INLINE
438 AC_TYPE_SIZE_T
439 AC_TYPE_SIGNAL
440 AC_DECL_SYS_SIGLIST
441 AC_C_BIGENDIAN
442
443 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
444 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
445 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
446 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
447 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
448
449 #######################################
450 #### Checks for library functions. ####
451 #######################################
452
453 AC_FUNC_VPRINTF
454 # We have replacements for these in src/missing-string.c
455 AC_CHECK_FUNCS(stpcpy strcasecmp)
456 # We have replacements for these in src/g10lib.h
457 AC_CHECK_FUNCS(strtoul memmove stricmp atexit raise)
458 # Other checks
459 AC_CHECK_FUNCS(strerror rand mmap getpagesize waitpid wait4)
460 AC_CHECK_FUNCS(gettimeofday getrusage gethrtime clock_gettime)
461
462 GNUPG_CHECK_MLOCK
463
464 # The ATH systems needs to know whether pth or pthreads are available.
465 have_pth=no
466 have_pthread=no
467 AC_CHECK_LIB(pth,pth_version,have_pth=yes)
468 if test "$have_pth" = yes; then
469   AC_DEFINE(HAVE_PTH, ,[Define if we have Pth.])
470 fi
471 AC_CHECK_LIB(pthread,pthread_create,have_pthread=yes)
472 if test "$have_pthread" != yes; then
473   AC_CHECK_LIB(c,pthread_create,have_pthread=yes)
474 fi
475 if test "$have_pthread" = yes; then
476   AC_DEFINE(HAVE_PTHREAD, ,[Define if we have pthread.])
477 fi
478 AM_CONDITIONAL(HAVE_PTH, test "$have_pth" = "yes")
479 AM_CONDITIONAL(HAVE_PTHREAD, test "$have_pthread" = "yes")
480
481 # Check whether we can use Linux capabilities as requested.
482 if test "$use_capabilities" = "yes" ; then
483 use_capabilities=no
484 AC_CHECK_HEADERS(sys/capability.h)
485 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
486   AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
487   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
488      AC_DEFINE(USE_CAPABILITIES,1,
489                [define if capabilities should be used])
490      LIBS="$LIBS -lcap"
491      use_capabilities=yes
492   fi
493 fi
494 if test "$use_capabilities" = "no" ; then
495     AC_MSG_WARN([[
496 ***
497 *** The use of capabilities on this system is not possible.
498 *** You need a recent Linux kernel and some patches:
499 ***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
500 ***   fcap-module-990613.tar.gz     (kernel module)
501 ***   libcap-1.92.tar.gz            (user mode library and utilities)
502 *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
503 *** set (filesystems menu). Be warned: This code is *really* ALPHA.
504 ***]])
505 fi
506 fi
507
508 # Check whether a random device is available.
509 if test "$try_dev_random" = yes ; then
510     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
511     [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
512       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
513     if test "$ac_cv_have_dev_random" = yes; then
514         AC_DEFINE(HAVE_DEV_RANDOM,1,
515                  [defined if the system supports a random device] )
516     fi
517 else
518     AC_MSG_CHECKING(for random device)
519     ac_cv_have_dev_random=no
520     AC_MSG_RESULT(has been disabled)
521 fi
522
523 # Figure out the random modules for this configuration.
524 if test "$random" = "default"; then
525
526     # Select default value.
527     if test "$ac_cv_have_dev_random" = yes; then
528         # Try Linuxish random device.
529         random_modules="linux"
530     else
531         case "${target}" in
532         *-*-mingw32*|*-*-cygwin*)
533           # Windows random device.
534           random_modules="w32"
535           ;;
536         *)
537           # Build everything, allow to select at runtime.
538           random_modules="$auto_random_modules"
539           ;;
540         esac    
541     fi
542 else
543     if test "$random" = "auto"; then
544         # Build everything, allow to select at runtime.
545         random_modules="$auto_random_modules"
546     fi
547 fi
548
549 AC_MSG_RESULT()
550
551 # Setup assembler stuff.
552 AC_MSG_CHECKING(for mpi assembler functions)
553 if test -f $srcdir/mpi/config.links ; then
554     . $srcdir/mpi/config.links
555     AC_CONFIG_LINKS("$mpi_ln_list")
556     ac_cv_mpi_mod_list="$mpi_mod_list"
557     ac_cv_mpi_sflags="$mpi_sflags"
558     ac_cv_mpi_config_done="yes"
559     AC_MSG_RESULT(done)
560 else
561     AC_MSG_RESULT(failed)
562     AC_MSG_ERROR([mpi/config.links missing!])
563 fi
564 MPI_MOD_LIST_LO=""
565 MPI_MOD_LIST_O=""
566 if test "$ac_cv_mpi_mod_list" != ""; then
567   for i in $ac_cv_mpi_mod_list; do
568       MPI_MOD_LIST_LO="$MPI_MOD_LIST_LO $i.lo"
569       MPI_MOD_LIST_O="$MPI_MOD_LIST_O $i.o"
570   done
571 fi
572 AC_SUBST(MPI_MOD_LIST_LO)
573 AC_SUBST(MPI_MOD_LIST_O)
574 MPI_SFLAGS="$ac_cv_mpi_sflags"
575 AC_SUBST(MPI_SFLAGS)
576
577 # Allow users to append something to the version string without
578 # flagging it as development version.  The user version part is
579 # considered everything after a dash.
580 changequote(,)#
581 tmp_pat='[a-zA-Z]'
582 changequote([,])#
583 if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
584     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
585               [Defined if this is not a regular release])
586 fi
587
588 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
589
590 GNUPG_CHECK_GNUMAKE
591
592 if test "$GCC" = yes; then
593     if test "$MAINTAINER_MODE" = "yes"; then
594         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
595     else
596         CFLAGS="$CFLAGS -Wall"
597     fi
598 fi
599
600 #
601 # Make the version number in src/gcrypt.h the same as the one here.
602 # (this is easier than to have a *.in file just for one substitution)
603 #
604 GNUPG_FIX_HDR_VERSION([src/gcrypt.h], GCRYPT_VERSION)
605
606 AC_SUBST(LIBGCRYPT_CONFIG_LIBS)
607 AC_SUBST(LIBGCRYPT_CONFIG_CFLAGS)
608
609 AC_CONFIG_COMMANDS([gcrypt-defs],[[
610 chmod +x src/libgcrypt-config
611 cat >gcrypt-defs.tmp <<G10EOF
612 /* Generated automatically by configure */
613 #ifdef HAVE_DRIVE_LETTERS
614   #define GNUPG_LOCALEDIR "c:/lib/gnupg/locale"
615   #define GNUPG_LIBDIR  "c:/lib/gnupg"
616   #define GNUPG_DATADIR "c:/lib/gnupg"
617   #define GNUPG_HOMEDIR "c:/gnupg-test"
618 #else
619   #define GNUPG_LOCALEDIR "${prefix}/${DATADIRNAME}/locale"
620   #define GNUPG_LIBDIR  "${libdir}/gnupg"
621   #define GNUPG_DATADIR "${datadir}/gnupg"
622   #ifdef __VMS
623     #define GNUPG_HOMEDIR "/SYS\$LOGIN/gnupg" 
624   #else
625     #define GNUPG_HOMEDIR "~/.gnupg-test" 
626   #endif
627 #endif
628 G10EOF
629 if cmp -s gcrypt-defs.h gcrypt-defs.tmp 2>/dev/null; then
630     echo "gcrypt-defs.h is unchanged"
631     rm -f gcrypt-defs.tmp
632 else
633     rm -f gcrypt-defs.h
634     mv gcrypt-defs.tmp gcrypt-defs.h
635     echo "gcrypt-defs.h created"
636 fi
637 ]],[[
638 prefix=$prefix
639 exec_prefix=$exec_prefix
640 libdir=$libdir
641 datadir=$datadir
642 DATADIRNAME=$DATADIRNAME
643 ]])
644
645 #####################
646 #### Conclusion. ####
647 #####################
648
649 # Define conditional sources and config.h symbols depending on the
650 # selected ciphers, pubkey-ciphers, digests and random modules.
651
652 LIST_MEMBER(arcfour, $enabled_ciphers)
653 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS arcfour.lo"
654 AC_DEFINE_UNQUOTED(USE_ARCFOUR, $found, [Defined if this module should be included])
655 LIST_MEMBER(blowfish, $enabled_ciphers)
656 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS blowfish.lo"
657 AC_DEFINE_UNQUOTED(USE_BLOWFISH, $found, [Defined if this module should be included])
658 LIST_MEMBER(cast5, $enabled_ciphers)
659 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS cast5.lo"
660 AC_DEFINE_UNQUOTED(USE_CAST5, $found, [Defined if this module should be included])
661 LIST_MEMBER(des, $enabled_ciphers)
662 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS des.lo"
663 AC_DEFINE_UNQUOTED(USE_DES, $found, [Defined if this module should be included])
664 LIST_MEMBER(aes, $enabled_ciphers)
665 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS rijndael.lo"
666 AC_DEFINE_UNQUOTED(USE_AES, $found, [Defined if this module should be included])
667 LIST_MEMBER(twofish, $enabled_ciphers)
668 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS twofish.lo"
669 AC_DEFINE_UNQUOTED(USE_TWOFISH, $found, [Defined if this module should be included])
670 LIST_MEMBER(serpent, $enabled_ciphers)
671 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS serpent.lo"
672 AC_DEFINE_UNQUOTED(USE_SERPENT, $found, [Defined if this module should be included])
673
674 LIST_MEMBER(dsa, $enabled_pubkey_ciphers)
675 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS dsa.lo"
676 AC_DEFINE_UNQUOTED(USE_DSA, $found, [Defined if this module should be included])
677 LIST_MEMBER(rsa, $enabled_pubkey_ciphers)
678 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS rsa.lo"
679 AC_DEFINE_UNQUOTED(USE_RSA, $found, [Defined if this module should be included])
680 LIST_MEMBER(elgamal, $enabled_pubkey_ciphers)
681 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS elgamal.lo"
682 AC_DEFINE_UNQUOTED(USE_ELGAMAL, $found, [Defined if this module should be included])
683
684 LIST_MEMBER(crc, $enabled_digests)
685 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS crc.lo"
686 AC_DEFINE_UNQUOTED(USE_CRC, $found, [Defined if this module should be included])
687 LIST_MEMBER(md4, $enabled_digests)
688 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS md4.lo"
689 AC_DEFINE_UNQUOTED(USE_MD4, $found, [Defined if this module should be included])
690 LIST_MEMBER(md5, $enabled_digests)
691 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS md5.lo"
692 AC_DEFINE_UNQUOTED(USE_MD5, $found, [Defined if this module should be included])
693 LIST_MEMBER(sha1, $enabled_digests)
694 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha1.lo"
695 AC_DEFINE_UNQUOTED(USE_SHA1, $found, [Defined if this module should be included])
696 LIST_MEMBER(sha256, $enabled_digests)
697 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha256.lo"
698 AC_DEFINE_UNQUOTED(USE_SHA256, $found, [Defined if this module should be included])
699 LIST_MEMBER(sha512, $enabled_digests)
700 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha512.lo"
701 AC_DEFINE_UNQUOTED(USE_SHA512, $found, [Defined if this module should be included])
702 LIST_MEMBER(tiger, $enabled_digests)
703 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS tiger.lo"
704 AC_DEFINE_UNQUOTED(USE_TIGER, $found, [Defined if this module should be included])
705
706 # rmd160 should be included always.
707 GCRYPT_DIGESTS="$GCRYPT_DIGESTS rmd160.lo"
708 AM_CONDITIONAL(USE_RMD160, true)
709 AC_DEFINE_UNQUOTED(USE_RMD160, 1, [Defined if this module should be included])
710
711 LIST_MEMBER(linux, $random_modules)
712 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndlinux.lo"
713 AC_DEFINE_UNQUOTED(USE_RNDLINUX, $found, [Defined if the /dev/random based RNG should be used.])
714
715 LIST_MEMBER(unix, $random_modules)
716 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndunix.lo"
717 AC_DEFINE_UNQUOTED(USE_RNDUNIX, $found, [Defined if the default Unix RNG should be used.])
718 if test "$found" = "1"; then
719    print_egd_notice=yes
720 fi
721
722 LIST_MEMBER(egd, $random_modules)
723 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndegd.lo"
724 AC_DEFINE_UNQUOTED(USE_RNDEGD, $found, [Defined if the EGD based RNG should be used.])
725
726 LIST_MEMBER(w32, $random_modules)
727 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32.lo"
728 AC_DEFINE_UNQUOTED(USE_RNDW32, $found, [Defined if the Windows specific RNG should be used.])
729
730 AC_SUBST([GCRYPT_CIPHERS])
731 AC_SUBST([GCRYPT_PUBKEY_CIPHERS])
732 AC_SUBST([GCRYPT_DIGESTS])
733 AC_SUBST([GCRYPT_RANDOM])
734
735 AC_SUBST(LIBGCRYPT_CIPHERS, $enabled_ciphers)
736 AC_SUBST(LIBGCRYPT_PUBKEY_CIPHERS, $enabled_pubkey_ciphers)
737 AC_SUBST(LIBGCRYPT_DIGESTS, $enabled_digests)
738
739 AC_CONFIG_FILES([
740 Makefile
741 mpi/Makefile
742 cipher/Makefile
743 doc/Makefile
744 src/Makefile
745 src/libgcrypt-config
746 tests/Makefile
747 w32-dll/Makefile
748 ])
749 AC_OUTPUT
750
751 # Give some feedback
752 echo
753
754 if test "$print_egd_notice" = "yes"; then
755 cat <<G10EOF
756   
757    The performance of the Unix random gatherer module (rndunix) is not
758    very good and it does not keep the entropy pool over multiple
759    invocations of GnuPG.  The suggested way to overcome this problem is
760    to use the
761   
762                  Entropy Gathering Daemon (EGD)
763   
764    which provides a entropy source for the whole system.  It is written
765    in Perl and available at the GnuPG FTP servers.  To enable EGD you
766    should rerun configure with the option "--enable-static-rnd=egd".
767    For more information consult the GnuPG webpages:
768   
769              http://www.gnupg.org/download.html#egd
770
771 G10EOF
772 fi
773
774 warn=""
775 for file in "random_modules"; do
776   case "$file" in rndunix | rndw32) warn="$warn $file";; esac
777 done
778 if test -n "$warn"; then
779   echo "Please note that you are building a version of Libgcrypt with"
780   echo "  $warn"
781   echo "included.  These parts are licensed under the GPL and thus the"
782   echo "use of this library has to comply with the conditions of the GPL."
783 fi
784
785 # Give some feedback
786 echo   "                Configured for: $PRINTABLE_OS_NAME ($target)"
787 echo