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