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