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