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