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