2003-09-02 Moritz Schulte <mo@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 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
571 #
572 # Setup assembler stuff.
573 #
574 GNUPG_SYS_SYMBOL_UNDERSCORE()
575 AC_MSG_CHECKING(for mpi assembler functions)
576 if test -f $srcdir/mpi/config.links ; then
577     . $srcdir/mpi/config.links
578     AC_CONFIG_LINKS("$mpi_ln_list")
579     ac_cv_mpi_mod_list="$mpi_mod_list"
580     ac_cv_mpi_sflags="$mpi_sflags"
581     ac_cv_mpi_config_done="yes"
582     AC_MSG_RESULT(done)
583 else
584     AC_MSG_RESULT(failed)
585     AC_MSG_ERROR([mpi/config.links missing!])
586 fi
587 MPI_MOD_LIST_LO=""
588 MPI_MOD_LIST_O=""
589 if test "$ac_cv_mpi_mod_list" != ""; then
590   for i in $ac_cv_mpi_mod_list; do
591       MPI_MOD_LIST_LO="$MPI_MOD_LIST_LO $i.lo"
592       MPI_MOD_LIST_O="$MPI_MOD_LIST_O $i.o"
593   done
594 fi
595 AC_SUBST(MPI_MOD_LIST_LO)
596 AC_SUBST(MPI_MOD_LIST_O)
597 MPI_SFLAGS="$ac_cv_mpi_sflags"
598 AC_SUBST(MPI_SFLAGS)
599
600 # Allow users to append something to the version string without
601 # flagging it as development version.  The user version part is
602 # considered everything after a dash.
603 changequote(,)#
604 tmp_pat='[a-zA-Z]'
605 changequote([,])#
606 if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
607     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
608               [Defined if this is not a regular release])
609 fi
610
611 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
612
613 GNUPG_CHECK_GNUMAKE
614
615 if test "$GCC" = yes; then
616     if test "$MAINTAINER_MODE" = "yes"; then
617         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
618     else
619         CFLAGS="$CFLAGS -Wall"
620     fi
621 fi
622
623 #
624 # Make the version number in src/gcrypt.h the same as the one here.
625 # (this is easier than to have a *.in file just for one substitution)
626 #
627 GNUPG_FIX_HDR_VERSION([src/gcrypt.h], GCRYPT_VERSION)
628
629 AC_SUBST(LIBGCRYPT_CONFIG_LIBS)
630 AC_SUBST(LIBGCRYPT_CONFIG_CFLAGS)
631 AC_SUBST(LIBGCRYPT_CONFIG_LIBS_PTHREAD)
632 AC_SUBST(LIBGCRYPT_CONFIG_CFLAGS_PTHREAD)
633 AC_SUBST(LIBGCRYPT_CONFIG_LIBS_PTH)
634 AC_SUBST(LIBGCRYPT_CONFIG_CFLAGS_PTH)
635 AC_SUBST(LIBGCRYPT_THREAD_MODULES)
636
637 AC_CONFIG_COMMANDS([gcrypt-defs],[[
638 chmod +x src/libgcrypt-config
639 cat >gcrypt-defs.tmp <<G10EOF
640 /* Generated automatically by configure */
641 #ifdef HAVE_DRIVE_LETTERS
642   #define GNUPG_LOCALEDIR "c:/lib/gnupg/locale"
643   #define GNUPG_LIBDIR  "c:/lib/gnupg"
644   #define GNUPG_DATADIR "c:/lib/gnupg"
645   #define GNUPG_HOMEDIR "c:/gnupg-test"
646 #else
647   #define GNUPG_LOCALEDIR "${prefix}/${DATADIRNAME}/locale"
648   #define GNUPG_LIBDIR  "${libdir}/gnupg"
649   #define GNUPG_DATADIR "${datadir}/gnupg"
650   #ifdef __VMS
651     #define GNUPG_HOMEDIR "/SYS\$LOGIN/gnupg" 
652   #else
653     #define GNUPG_HOMEDIR "~/.gnupg-test" 
654   #endif
655 #endif
656 G10EOF
657 if cmp -s gcrypt-defs.h gcrypt-defs.tmp 2>/dev/null; then
658     echo "gcrypt-defs.h is unchanged"
659     rm -f gcrypt-defs.tmp
660 else
661     rm -f gcrypt-defs.h
662     mv gcrypt-defs.tmp gcrypt-defs.h
663     echo "gcrypt-defs.h created"
664 fi
665 ]],[[
666 prefix=$prefix
667 exec_prefix=$exec_prefix
668 libdir=$libdir
669 datadir=$datadir
670 DATADIRNAME=$DATADIRNAME
671 ]])
672
673 #####################
674 #### Conclusion. ####
675 #####################
676
677 # Define conditional sources and config.h symbols depending on the
678 # selected ciphers, pubkey-ciphers, digests and random modules.
679
680 LIST_MEMBER(arcfour, $enabled_ciphers)
681 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS arcfour.lo"
682 AC_DEFINE_UNQUOTED(USE_ARCFOUR, $found, [Defined if this module should be included])
683 LIST_MEMBER(blowfish, $enabled_ciphers)
684 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS blowfish.lo"
685 AC_DEFINE_UNQUOTED(USE_BLOWFISH, $found, [Defined if this module should be included])
686 LIST_MEMBER(cast5, $enabled_ciphers)
687 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS cast5.lo"
688 AC_DEFINE_UNQUOTED(USE_CAST5, $found, [Defined if this module should be included])
689 LIST_MEMBER(des, $enabled_ciphers)
690 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS des.lo"
691 AC_DEFINE_UNQUOTED(USE_DES, $found, [Defined if this module should be included])
692 LIST_MEMBER(aes, $enabled_ciphers)
693 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS rijndael.lo"
694 AC_DEFINE_UNQUOTED(USE_AES, $found, [Defined if this module should be included])
695 LIST_MEMBER(twofish, $enabled_ciphers)
696 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS twofish.lo"
697 AC_DEFINE_UNQUOTED(USE_TWOFISH, $found, [Defined if this module should be included])
698 LIST_MEMBER(serpent, $enabled_ciphers)
699 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS serpent.lo"
700 AC_DEFINE_UNQUOTED(USE_SERPENT, $found, [Defined if this module should be included])
701
702 LIST_MEMBER(dsa, $enabled_pubkey_ciphers)
703 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS dsa.lo"
704 AC_DEFINE_UNQUOTED(USE_DSA, $found, [Defined if this module should be included])
705 LIST_MEMBER(rsa, $enabled_pubkey_ciphers)
706 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS rsa.lo"
707 AC_DEFINE_UNQUOTED(USE_RSA, $found, [Defined if this module should be included])
708 LIST_MEMBER(elgamal, $enabled_pubkey_ciphers)
709 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS elgamal.lo"
710 AC_DEFINE_UNQUOTED(USE_ELGAMAL, $found, [Defined if this module should be included])
711
712 LIST_MEMBER(crc, $enabled_digests)
713 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS crc.lo"
714 AC_DEFINE_UNQUOTED(USE_CRC, $found, [Defined if this module should be included])
715 LIST_MEMBER(md4, $enabled_digests)
716 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS md4.lo"
717 AC_DEFINE_UNQUOTED(USE_MD4, $found, [Defined if this module should be included])
718 LIST_MEMBER(md5, $enabled_digests)
719 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS md5.lo"
720 AC_DEFINE_UNQUOTED(USE_MD5, $found, [Defined if this module should be included])
721 LIST_MEMBER(sha1, $enabled_digests)
722 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha1.lo"
723 AC_DEFINE_UNQUOTED(USE_SHA1, $found, [Defined if this module should be included])
724 LIST_MEMBER(sha256, $enabled_digests)
725 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha256.lo"
726 AC_DEFINE_UNQUOTED(USE_SHA256, $found, [Defined if this module should be included])
727 LIST_MEMBER(sha512, $enabled_digests)
728 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha512.lo"
729 AC_DEFINE_UNQUOTED(USE_SHA512, $found, [Defined if this module should be included])
730 LIST_MEMBER(tiger, $enabled_digests)
731 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS tiger.lo"
732 AC_DEFINE_UNQUOTED(USE_TIGER, $found, [Defined if this module should be included])
733
734 # rmd160 should be included always.
735 GCRYPT_DIGESTS="$GCRYPT_DIGESTS rmd160.lo"
736 AM_CONDITIONAL(USE_RMD160, true)
737 AC_DEFINE_UNQUOTED(USE_RMD160, 1, [Defined if this module should be included])
738
739 LIST_MEMBER(linux, $random_modules)
740 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndlinux.lo"
741 AC_DEFINE_UNQUOTED(USE_RNDLINUX, $found, [Defined if the /dev/random based RNG should be used.])
742
743 LIST_MEMBER(unix, $random_modules)
744 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndunix.lo"
745 AC_DEFINE_UNQUOTED(USE_RNDUNIX, $found, [Defined if the default Unix RNG should be used.])
746 if test "$found" = "1"; then
747    print_egd_notice=yes
748 fi
749
750 LIST_MEMBER(egd, $random_modules)
751 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndegd.lo"
752 AC_DEFINE_UNQUOTED(USE_RNDEGD, $found, [Defined if the EGD based RNG should be used.])
753
754 LIST_MEMBER(w32, $random_modules)
755 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32.lo"
756 AC_DEFINE_UNQUOTED(USE_RNDW32, $found, [Defined if the Windows specific RNG should be used.])
757
758 AC_SUBST([GCRYPT_CIPHERS])
759 AC_SUBST([GCRYPT_PUBKEY_CIPHERS])
760 AC_SUBST([GCRYPT_DIGESTS])
761 AC_SUBST([GCRYPT_RANDOM])
762
763 AC_SUBST(LIBGCRYPT_CIPHERS, $enabled_ciphers)
764 AC_SUBST(LIBGCRYPT_PUBKEY_CIPHERS, $enabled_pubkey_ciphers)
765 AC_SUBST(LIBGCRYPT_DIGESTS, $enabled_digests)
766
767 AC_CONFIG_FILES([
768 Makefile
769 mpi/Makefile
770 cipher/Makefile
771 doc/Makefile
772 src/Makefile
773 src/libgcrypt-config
774 tests/Makefile
775 w32-dll/Makefile
776 ])
777 AC_OUTPUT
778
779 # Give some feedback
780 echo
781
782 if test "$print_egd_notice" = "yes"; then
783 cat <<G10EOF
784   
785    The performance of the Unix random gatherer module (rndunix) is not
786    very good and it does not keep the entropy pool over multiple
787    invocations of GnuPG.  The suggested way to overcome this problem is
788    to use the
789   
790                  Entropy Gathering Daemon (EGD)
791   
792    which provides a entropy source for the whole system.  It is written
793    in Perl and available at the GnuPG FTP servers.  To enable EGD you
794    should rerun configure with the option "--enable-static-rnd=egd".
795    For more information consult the GnuPG webpages:
796   
797              http://www.gnupg.org/download.html#egd
798
799 G10EOF
800 fi
801
802 warn=""
803 for file in "random_modules"; do
804   case "$file" in rndunix | rndw32) warn="$warn $file";; esac
805 done
806 if test -n "$warn"; then
807   echo "Please note that you are building a version of Libgcrypt with"
808   echo "  $warn"
809   echo "included.  These parts are licensed under the GPL and thus the"
810   echo "use of this library has to comply with the conditions of the GPL."
811 fi
812
813 # Give some feedback
814 echo   "                Configured for: $PRINTABLE_OS_NAME ($target)"
815 echo
816
817