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