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