* configure.ac: Add --disable-xxx options for CAST5, BLOWFISH, AES (all),
[gnupg.git] / configure.ac
1 dnl Configure.ac script for GnuPG
2 dnl Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
3 dnl
4 dnl This file is part of GnuPG.
5 dnl
6 dnl GnuPG is free software; you can redistribute it and/or modify
7 dnl it under the terms of the GNU General Public License as published by
8 dnl the Free Software Foundation; either version 2 of the License, or
9 dnl (at your option) any later version.
10 dnl 
11 dnl GnuPG is distributed in the hope that it will be useful,
12 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
13 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 dnl GNU General Public License for more details.
15 dnl 
16 dnl You should have received a copy of the GNU General Public License
17 dnl along with this program; if not, write to the Free Software
18 dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19 dnl
20 dnl (Process this file with autoconf to produce a configure script.)
21 dnlAC_REVISION($Revision$)dnl
22
23 AC_PREREQ(2.52)
24
25 # Remember to change the version number immediately *after* a release
26 # and remove the "-cvs" or "rc" suffix immediately *before* a release.
27 AC_INIT(gnupg, 1.3.2-cvs, bug-gnupg@gnu.org)
28 # Set development_version to yes if the minor number is odd or you
29 # feel that the default check for a development version is not
30 # sufficient.
31 development_version=yes
32
33 ALL_LINGUAS="de"
34
35 PACKAGE=$PACKAGE_NAME
36 VERSION=$PACKAGE_VERSION
37
38 AC_CONFIG_AUX_DIR(scripts)
39 AC_CONFIG_SRCDIR(g10/g10.c)
40 AC_CANONICAL_TARGET()
41 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
42 AM_CONFIG_HEADER(config.h)
43
44 AC_SUBST(PACKAGE)
45 AC_SUBST(VERSION)
46 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
47 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
48 AC_DEFINE(_GNU_SOURCE,1,[Some tests rely on this (stpcpy) and it should be used for new programs anyway])
49
50 dnl
51 dnl  Check for random module options
52 dnl
53 AC_MSG_CHECKING([which random module to use])
54 AC_ARG_ENABLE(static-rnd,
55     [  --enable-static-rnd=[egd|unix|linux|auto]  ],
56 [use_static_rnd=$enableval], [use_static_rnd=default] )
57
58 if test "$use_static_rnd" = no; then
59     use_static_rnd=default
60 fi
61
62 case "$use_static_rnd" in
63     egd | linux | unix | default )
64       AC_MSG_RESULT($use_static_rnd)
65       ;;
66     auto )
67       AC_MSG_RESULT(automagically selected at runtime)
68       ;;
69     * )
70       AC_MSG_RESULT(invalid argument)
71       AC_MSG_ERROR(there is no random module rnd$use_static_rnd)
72       ;;
73 esac
74
75 AC_ARG_WITH(egd-socket,
76     [  --with-egd-socket=NAME  use NAME for the EGD socket],
77             egd_socket_name="$withval", egd_socket_name="" )
78 AC_DEFINE_UNQUOTED(EGD_SOCKET_NAME, "$egd_socket_name",
79                    [Define if you don't want the default EGD socket name.
80                     For details see cipher/rndegd.c])
81
82
83 dnl
84 dnl See whether the user wants to disable checking for /dev/random
85
86 AC_MSG_CHECKING([whether use of /dev/random is requested])
87 AC_ARG_ENABLE(dev-random,
88 [  --disable-dev-random    disable the use of dev random],
89     try_dev_random=$enableval, try_dev_random=yes)
90 AC_MSG_RESULT($try_dev_random)
91
92
93 dnl
94 dnl  Check other options
95 dnl
96
97 # We don't need idea but some people claim that they need it for
98 # research etc., so we allow to place an idea source code into the
99 # cipher directory and statically link it if available, otherwise we
100 # link to a stub.  We don't use AC_CHECK_FILE to avoid caching.
101 AC_MSG_CHECKING(for extra cipher modules)
102 tmp=""
103 if test -f $srcdir/cipher/idea.c; then 
104    IDEA_O=idea.o
105    tmp=idea
106 else
107    IDEA_O=idea-stub.o
108    tmp=no
109 fi
110 AC_SUBST(IDEA_O)
111 AC_MSG_RESULT($tmp)
112
113 # if the static idea is present, disable dynload.
114 if test "$IDEA_O" = idea-stub.o ; then
115   AC_MSG_CHECKING([whether use of extensions is requested])
116   AC_ARG_ENABLE(dynload,
117   [  --disable-dynload       disable use of extensions],
118       try_dynload=$enableval, try_dynload=yes)
119   AC_MSG_RESULT($try_dynload)
120 else
121   try_dynload=no
122 fi
123
124 AC_MSG_CHECKING([whether assembler modules are requested])
125 AC_ARG_ENABLE(asm,
126 [  --disable-asm           do not use assembler modules],
127      try_asm_modules=$enableval, try_asm_modules=yes)
128 AC_MSG_RESULT($try_asm_modules)
129
130 AC_MSG_CHECKING([whether memory guard is requested])
131 AC_ARG_ENABLE(m-guard,
132     [  --enable-m-guard        enable memory guard facility],
133     use_m_guard=$enableval, use_m_guard=no)
134 AC_MSG_RESULT($use_m_guard)
135 if test "$use_m_guard" = yes ; then
136     AC_DEFINE(M_GUARD,1,[Define to use the (obsolete) malloc guarding feature])
137 fi
138
139 dnl See if we are disabling any algorithms or features for a smaller
140 dnl binary
141
142 use_cast5=yes
143 use_blowfish=yes
144 use_aes=yes
145 use_twofish=yes
146 use_tiger192=yes
147 use_sha256=yes
148 use_sha512=yes
149 use_exec=yes
150
151 AC_ARG_ENABLE(minimal,
152    AC_HELP_STRING([--enable-minimal],[build the smallest gpg binary possible]),
153    use_cast5=no
154    use_blowfish=no
155    use_aes=no
156    use_twofish=no
157    use_tiger192=no
158    use_sha256=no
159    use_sha512=no
160    use_exec=no)
161
162 AC_MSG_CHECKING([whether to enable the CAST5 cipher])
163 AC_ARG_ENABLE(cast5,
164    AC_HELP_STRING([--disable-cast5],[disable the CAST5 cipher]),
165    use_cast5=$enableval)
166 AC_MSG_RESULT($use_cast5)
167 if test x"$use_cast5" = xyes ; then
168    AC_DEFINE(USE_CAST5,1,[Define to include the CAST5 cipher])
169 fi
170
171 AC_MSG_CHECKING([whether to enable the BLOWFISH cipher])
172 AC_ARG_ENABLE(blowfish,
173    AC_HELP_STRING([--disable-blowfish],[disable the BLOWFISH cipher]),
174    use_blowfish=$enableval)
175 AC_MSG_RESULT($use_blowfish)
176 if test x"$use_blowfish" = xyes ; then
177    AC_DEFINE(USE_BLOWFISH,1,[Define to include the BLOWFISH cipher])
178 fi
179
180 AC_MSG_CHECKING([whether to enable the AES ciphers])
181 AC_ARG_ENABLE(aes,
182    AC_HELP_STRING([--disable-aes],[disable the AES ciphers]),
183    use_aes=$enableval)
184 AC_MSG_RESULT($use_aes)
185 if test x"$use_aes" = xyes ; then
186    AC_DEFINE(USE_AES,1,[Define to include the AES ciphers])
187 fi
188
189 AC_MSG_CHECKING([whether to enable the TWOFISH cipher])
190 AC_ARG_ENABLE(twofish,
191    AC_HELP_STRING([--disable-twofish],[disable the TWOFISH cipher]),
192    use_twofish=$enableval)
193 AC_MSG_RESULT($use_twofish)
194 if test x"$use_twofish" = xyes ; then
195    AC_DEFINE(USE_TWOFISH,1,[Define to include the TWOFISH cipher])
196 fi
197
198 dnl TIGER192 is defined only after we confirm 64-bit support later
199 AC_MSG_CHECKING([whether to enable the TIGER/192 digest])
200 AC_ARG_ENABLE(tiger192,
201    AC_HELP_STRING([--disable-tiger192],[disable the TIGER/192 digest]),
202    use_tiger192=$enableval)
203 AC_MSG_RESULT($use_tiger192)
204
205 AC_MSG_CHECKING([whether to enable the SHA-256 digest])
206 AC_ARG_ENABLE(sha256,
207    AC_HELP_STRING([--disable-sha256],[disable the SHA-256 digest]),
208    use_sha256=$enableval)
209 AC_MSG_RESULT($use_sha256)
210 if test x"$use_sha256" = xyes ; then
211    AC_DEFINE(USE_SHA256,1,[Define to include the SHA-256 digest])
212 fi
213
214 dnl SHA512 is defined only after we confirm 64-bit support later
215 AC_MSG_CHECKING([whether to enable the SHA-384 and SHA-512 digests])
216 AC_ARG_ENABLE(sha512,
217    AC_HELP_STRING([--disable-sha512],[disable the SHA-384 and SHA-512 digests]),
218    use_sha512=$enableval)
219 AC_MSG_RESULT($use_sha512)
220
221 AC_MSG_CHECKING([whether to enable external program execution])
222 AC_ARG_ENABLE(exec,
223     AC_HELP_STRING([--disable-exec],[disable all external program execution]),
224     use_exec=$enableval)
225 AC_MSG_RESULT($use_exec)
226 if test "$use_exec" = no ; then
227     AC_DEFINE(NO_EXEC,1,[Define to disable all external program execution])
228 fi
229
230 if test "$use_exec" = yes ; then
231   AC_MSG_CHECKING([whether to enable photo ID viewing])
232   AC_ARG_ENABLE(photo-viewers,
233       [  --disable-photo-viewers disable photo ID viewers],
234       [if test "$enableval" = no ; then
235          AC_DEFINE(DISABLE_PHOTO_VIEWER,1,[define to disable photo viewing])
236       fi],enableval=yes)
237   gnupg_cv_enable_photo_viewers=$enableval
238   AC_MSG_RESULT($enableval)
239
240   if test "$gnupg_cv_enable_photo_viewers" = yes ; then
241     AC_MSG_CHECKING([whether to use a fixed photo ID viewer])
242     AC_ARG_WITH(photo-viewer,
243         [  --with-photo-viewer=FIXED_VIEWER  set a fixed photo ID viewer],
244         [if test "$withval" = yes ; then
245            withval=no
246         elif test "$withval" != no ; then
247            AC_DEFINE_UNQUOTED(FIXED_PHOTO_VIEWER,"$withval",
248                             [if set, restrict photo-viewer to this])
249         fi],withval=no)
250     AC_MSG_RESULT($withval)
251   fi
252
253   AC_MSG_CHECKING([whether to enable external keyserver helpers])
254   AC_ARG_ENABLE(keyserver-helpers,
255       [  --disable-keyserver-helpers  disable all external keyserver support],
256       [if test "$enableval" = no ; then
257          AC_DEFINE(DISABLE_KEYSERVER_HELPERS,1,
258                   [define to disable keyserver helpers])
259       fi],enableval=yes)
260   gnupg_cv_enable_keyserver_helpers=$enableval
261   AC_MSG_RESULT($enableval)
262
263   if test "$gnupg_cv_enable_keyserver_helpers" = yes ; then
264     AC_MSG_CHECKING([whether LDAP keyserver support is requested])
265     AC_ARG_ENABLE(ldap,
266     [  --disable-ldap          disable LDAP keyserver interface],
267         try_ldap=$enableval, try_ldap=yes)
268     AC_MSG_RESULT($try_ldap)
269
270     AC_MSG_CHECKING([whether HKP keyserver support is requested])
271     AC_ARG_ENABLE(hkp,
272     [  --disable-hkp           disable HKP keyserver interface],
273         try_hkp=$enableval, try_hkp=yes)
274     AC_MSG_RESULT($try_hkp)
275
276     if test "$try_hkp" = yes ; then
277       AC_SUBST(GPGKEYS_HKP,"gpgkeys_hkp$EXEEXT")
278     fi
279
280     AC_MSG_CHECKING([whether email keyserver support is requested])
281     AC_ARG_ENABLE(mailto,
282     [  --disable-mailto        disable email keyserver interface],
283         try_mailto=$enableval, try_mailto=yes)
284     AC_MSG_RESULT($try_mailto)
285     fi
286
287     AC_MSG_CHECKING([whether keyserver exec-path is enabled])
288     AC_ARG_ENABLE(keyserver-path,
289         [  --disable-keyserver-path disable the exec-path option for keyserver helpers],
290         [if test "$enableval" = no ; then
291          AC_DEFINE(DISABLE_KEYSERVER_PATH,1,[define to disable exec-path for keyserver helpers])
292         fi],enableval=yes)
293     AC_MSG_RESULT($enableval)
294   fi
295
296 AC_MSG_CHECKING([whether the included zlib is requested])
297 AC_ARG_WITH(included-zlib,
298     [  --with-included-zlib    use the zlib code included here],
299 [g10_force_zlib=yes], [g10_force_zlib=no] )
300 AC_MSG_RESULT($g10_force_zlib)
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 AH_BOTTOM([
313 #if !(defined(HAVE_FORK) && defined(HAVE_PIPE) && defined(HAVE_WAITPID))
314 #define EXEC_TEMPFILE_ONLY
315 #endif
316
317 #include "g10defs.h"
318 ])
319
320
321 AM_MAINTAINER_MODE
322
323 dnl Checks for programs.
324
325 AC_PROG_MAKE_SET
326 AM_SANITY_CHECK
327 missing_dir=`cd $ac_aux_dir && pwd`
328 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
329 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
330 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
331 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
332 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
333 AC_PROG_CC
334 AC_PROG_CPP
335 AC_PATH_PROG(PERL,"perl")
336 AC_ISC_POSIX
337 AC_SYS_LARGEFILE
338 AC_PROG_INSTALL
339 AC_PROG_AWK
340 AC_CHECK_PROG(DOCBOOK_TO_MAN, docbook-to-man, yes, no)
341 AM_CONDITIONAL(HAVE_DOCBOOK_TO_MAN, test "$ac_cv_prog_DOCBOOK_TO_MAN" = yes)
342 GNUPG_CHECK_FAQPROG
343 GNUPG_CHECK_DOCBOOK_TO_TEXI
344
345 MPI_OPT_FLAGS=""
346
347
348 try_gettext=yes
349 case "${target}" in
350     *-*-mingw32*)
351         # special stuff for Windoze NT
352         ac_cv_have_dev_random=no
353         AC_DEFINE(USE_ONLY_8DOT3,1,
354                   [set this to limit filenames to the 8.3 format])
355         AC_DEFINE(HAVE_DRIVE_LETTERS,1,
356                   [defined if we must run on a stupid file system])
357         AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
358                   [defined if we run on some of the PCDOS like systems 
359                    (DOS, Windoze. OS/2) with special properties like
360                     no file modes])
361         AC_DEFINE(USE_SIMPLE_GETTEXT,1,
362                   [because the Unix gettext has too much overhead on
363                    MingW32 systems and these systems lack Posix functions,
364                    we use a simplified version of gettext])
365         try_gettext="no"
366         ;;
367     i?86-emx-os2 | i?86-*-os2*emx )
368         # OS/2 with the EMX environment
369         ac_cv_have_dev_random=no
370         AC_DEFINE(HAVE_DRIVE_LETTERS)
371         AC_DEFINE(HAVE_DOSISH_SYSTEM)
372         try_gettext="no"
373         ;;
374
375     i?86-*-msdosdjgpp*)
376         # DOS with the DJGPP environment
377         ac_cv_have_dev_random=no
378         AC_DEFINE(HAVE_DRIVE_LETTERS)
379         AC_DEFINE(HAVE_DOSISH_SYSTEM)
380         try_gettext="no"
381         ;;
382
383     *-*-freebsd*)
384        # FreeBSD
385        CPPFLAGS="$CPPFLAGS -I/usr/local/include"
386        LDFLAGS="$LDFLAGS -L/usr/local/lib"
387        ;;
388
389     *-*-hpux*)
390         if test -z "$GCC" ; then
391             CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
392         fi
393         ;;
394     *-dec-osf4*)
395         if test -z "$GCC" ; then
396             # Suppress all warnings
397             # to get rid of the unsigned/signed char mismatch warnings.
398             CFLAGS="$CFLAGS -w"
399         fi
400         ;;
401     *-dec-osf5*)
402         if test -z "$GCC" ; then
403             # Use the newer compiler `-msg_disable ptrmismatch' to
404             # get rid of the unsigned/signed char mismatch warnings.
405             # Using this may hide other pointer mismatch warnings, but
406             # it at least lets other warning classes through
407             CFLAGS="$CFLAGS -msg_disable ptrmismatch"
408         fi
409         ;;
410     m68k-atari-mint)
411         ;;
412     *)
413        ;;
414 esac
415
416 AC_SUBST(MPI_OPT_FLAGS)
417 GNUPG_SYS_SYMBOL_UNDERSCORE
418
419 dnl Must check for network library requirements before doing link tests
420 dnl for ldap, for example. If ldap libs are static (or dynamic and without
421 dnl ELF runtime link paths), then link will fail and LDAP support won't
422 dnl be detected.
423
424 AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname,
425         [NETLIBS="-lnsl $NETLIBS"]))
426 AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt,
427         [NETLIBS="-lsocket $NETLIBS"]))
428
429 # Try and link a LDAP test program to weed out unusable LDAP
430 # libraries.  -lldap [-llber [-lresolv]] is for OpenLDAP.  OpenLDAP in
431 # general is terrible with creating weird dependencies.  If all else
432 # fails, the user can play guess-the-dependency by using something
433 # like ./configure LDAPLIBS="-Lfoo -lbar"
434
435 if test "$try_ldap" = yes ; then
436   for MY_LDAPLIBS in ${LDAPLIBS+"$LDAPLIBS"} "-lldap" "-lldap -llber" "-lldap -llber -lresolv"; do
437     _ldap_save_libs=$LIBS
438     LIBS="$MY_LDAPLIBS $NETLIBS $LIBS"
439
440     AC_MSG_CHECKING([whether LDAP via \"$MY_LDAPLIBS\" is present and sane])
441     AC_TRY_LINK([#include <ldap.h>],[ldap_open("foobar",1234);],
442                 [gnupg_cv_func_ldap_init=yes],[gnupg_cv_func_ldap_init=no])
443     AC_MSG_RESULT([$gnupg_cv_func_ldap_init])
444
445     if test $gnupg_cv_func_ldap_init = no; then
446       AC_MSG_CHECKING([whether I can make LDAP be sane with lber.h])
447       AC_TRY_LINK([#include <lber.h>
448 #include <ldap.h>],[ldap_open("foobar",1234);],
449          [gnupg_cv_func_ldaplber_init=yes],[gnupg_cv_func_ldaplber_init=no])
450       AC_MSG_RESULT([$gnupg_cv_func_ldaplber_init])
451     fi
452
453     if test "$gnupg_cv_func_ldaplber_init" = yes ; then
454        AC_DEFINE(NEED_LBER_H,1,[Define if the LDAP library requires including lber.h before ldap.h])
455     fi
456
457     if test "$gnupg_cv_func_ldap_init" = yes || \
458         test "$gnupg_cv_func_ldaplber_init" = yes ; then
459        LDAPLIBS=$MY_LDAPLIBS
460        GPGKEYS_LDAP="gpgkeys_ldap$EXEEXT"
461
462        AC_MSG_CHECKING([whether LDAP supports ldap_get_option])
463
464        if test "$gnupg_cv_func_ldap_init" = yes ; then
465           AC_TRY_LINK([#include <ldap.h>],
466              [ldap_get_option((void *)0,0,(void *)0);],
467              [gnupg_cv_func_ldap_get_option=yes],
468              [gnupg_cv_func_ldap_get_option=no])
469         else
470           AC_TRY_LINK([#include <lber.h>
471 #include <ldap.h>],[ldap_get_option((void *)0,0,(void *)0);],
472              [gnupg_cv_func_ldap_get_option=yes],
473              [gnupg_cv_func_ldap_get_option=no])
474        fi
475
476        AC_MSG_RESULT([$gnupg_cv_func_ldap_get_option])
477
478        if test "$gnupg_cv_func_ldap_get_option" = yes ; then
479           AC_DEFINE(HAVE_LDAP_GET_OPTION,1,[Define if the LDAP library has ldap_get_option])
480        else
481           AC_MSG_CHECKING([whether LDAP supports ld_errno])
482
483           if test "$gnupg_cv_func_ldap_init" = yes ; then
484             AC_TRY_COMPILE([#include <ldap.h>],
485                [LDAP *ldap; ldap->ld_errno;],
486                [gnupg_cv_func_ldap_ld_errno=yes],
487                [gnupg_cv_func_ldap_ld_errno=no])
488            else
489             AC_TRY_LINK([#include <lber.h>
490 #include <ldap.h>],[LDAP *ldap; ldap->ld_errno;],
491                [gnupg_cv_func_ldap_ld_errno=yes],
492                [gnupg_cv_func_ldap_ld_errno=no])
493           fi
494
495           AC_MSG_RESULT([$gnupg_cv_func_ldap_ld_errno])
496
497           if test "$gnupg_cv_func_ldap_ld_errno" = yes ; then
498              AC_DEFINE(HAVE_LDAP_LD_ERRNO,1,[Define if the LDAP library supports ld_errno])
499           fi
500        fi
501     fi
502
503     LIBS=$_ldap_save_libs
504
505     if test "$GPGKEYS_LDAP" != "" ; then break; fi
506   done
507 fi
508
509 AC_SUBST(GPGKEYS_LDAP)
510 AC_SUBST(LDAPLIBS)
511
512 dnl This isn't necessarily sendmail itself, but anything that gives a
513 dnl sendmail-ish interface to the outside world.  That includes qmail,
514 dnl postfix, etc.  Basically, anything that can handle "sendmail -t".
515
516 if test "$try_mailto" = yes ; then
517   AC_ARG_WITH(mailprog,[  --with-mailprog=NAME    use "NAME -t" for mail transport],,with_mailprog=yes)
518
519   if test "$with_mailprog" = yes ; then
520     AC_PATH_PROG(SENDMAIL,sendmail,,$PATH:/usr/sbin:/usr/libexec:/usr/lib)
521     if test "$ac_cv_path_SENDMAIL" ; then
522       GPGKEYS_MAILTO="gpgkeys_mailto"
523     fi
524   elif test "$with_mailprog" != no ; then
525     AC_MSG_CHECKING([for a mail transport program])
526     AC_SUBST(SENDMAIL,$with_mailprog)
527     AC_MSG_RESULT($with_mailprog)
528     GPGKEYS_MAILTO="gpgkeys_mailto"
529   fi
530 fi
531
532 AC_SUBST(GPGKEYS_MAILTO)
533
534 case "${target}" in
535     *-*-mingw32*)
536         PRINTABLE_OS_NAME="MingW32"
537         ;;
538     *-*-cygwin*)
539         PRINTABLE_OS_NAME="Cygwin"
540         ;;
541     i?86-emx-os2 | i?86-*-os2*emx )
542         PRINTABLE_OS_NAME="OS/2"
543         ;;
544     i?86-*-msdosdjgpp*)
545         PRINTABLE_OS_NAME="MSDOS/DJGPP"
546         try_dynload=no
547         ;;
548     *-linux*)
549         PRINTABLE_OS_NAME="GNU/Linux"
550         ;;
551 dnl let that after linux to avoid gnu-linux problems
552     *-gnu*)
553         PRINTABLE_OS_NAME="GNU/Hurd"
554         ;;
555     *)
556         PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
557         ;;
558 esac
559 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
560                    [A human readable text with the name of the OS])
561
562
563 #
564 # 1. Set names of random devices
565 #
566 NAME_OF_DEV_RANDOM="/dev/random"
567 NAME_OF_DEV_URANDOM="/dev/urandom"
568 case "${target}" in
569     *-openbsd*)
570         NAME_OF_DEV_RANDOM="/dev/srandom"
571         NAME_OF_DEV_URANDOM="/dev/urandom"
572         ;;
573 esac
574 AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM",
575                    [defined to the name of the strong random device])
576 AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM",
577                    [defined to the name of the weaker random device])
578 AC_SUBST(MPI_OPT_FLAGS)
579
580
581 dnl Checks for libraries.
582
583 if test "$try_gettext" = yes; then
584   AM_GNU_GETTEXT
585 else
586   USE_NLS=no
587   USE_INCLUDED_LIBINTL=no
588   BUILD_INCLUDED_LIBINTL=no
589   AC_SUBST(USE_NLS)
590   AC_SUBST(USE_INCLUDED_LIBINTL)
591   AC_SUBST(BUILD_INCLUDED_LIBINTL)
592 fi
593
594
595 if test "$try_dynload" = yes ; then
596   AC_CHECK_LIB(dl,dlopen)
597   if test "$ac_cv_lib_dl_dlopen" = "yes"; then
598     AC_DEFINE(USE_DYNAMIC_LINKING,1,
599               [define to enable the use of extensions])
600     AC_DEFINE(HAVE_DL_DLOPEN,1,
601               [Defined when the dlopen function family is available])
602   else
603     AC_CHECK_FUNCS(dlopen)
604     if test "$ac_cv_func_dlopen" = "yes"; then
605       AC_DEFINE(USE_DYNAMIC_LINKING)
606       AC_DEFINE(HAVE_DL_DLOPEN)
607     fi
608   fi
609 else
610   AC_MSG_CHECKING(for dynamic loading)
611   DYNLINK_LDFLAGS=
612   DYNLINK_MOD_CFLAGS=
613   AC_MSG_RESULT(has been disabled)
614 fi
615
616 dnl Checks for header files.
617 AC_HEADER_STDC
618 AC_CHECK_HEADERS(unistd.h langinfo.h termio.h locale.h)
619
620 dnl Checks for typedefs, structures, and compiler characteristics.
621 AC_C_CONST
622 AC_C_INLINE
623 AC_C_VOLATILE
624 AC_TYPE_SIZE_T
625 AC_TYPE_MODE_T
626 AC_TYPE_SIGNAL
627 AC_DECL_SYS_SIGLIST
628
629 GNUPG_CHECK_ENDIAN
630
631 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
632 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
633 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
634 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
635 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
636
637 AC_CHECK_SIZEOF(unsigned short)
638 AC_CHECK_SIZEOF(unsigned int)
639 AC_CHECK_SIZEOF(unsigned long)
640 AC_CHECK_SIZEOF(unsigned long long)
641 AC_CHECK_SIZEOF(uint64_t)
642
643 if test "$ac_cv_sizeof_unsigned_short" = "0" \
644    || test "$ac_cv_sizeof_unsigned_int" = "0" \
645    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
646     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
647 fi
648
649 dnl Do we have any 64-bit data types?
650 if test "$ac_cv_sizeof_unsigned_int" != "8" \
651    && test "$ac_cv_sizeof_unsigned_long" != "8" \
652    && test "$ac_cv_sizeof_unsigned_long_long" != "8" \
653    && test "$ac_cv_sizeof_uint64_t" != "8"; then
654     AC_MSG_WARN([No 64-bit types.  Disabling TIGER/192, SHA-384, and SHA-512])
655 else
656   if test x"$use_tiger192" = xyes ; then
657      AC_SUBST(TIGER_O,tiger.o)
658      AC_DEFINE(USE_TIGER192,1,[Define to include the TIGER/192 digest])
659
660      AC_MSG_CHECKING([whether to enable old-style TIGER/192 digest support])
661      AC_ARG_ENABLE(old-tiger,
662         [  --enable-old-tiger      enable old-style TIGER/192 digest support],
663         old_tiger=$enableval, old_tiger=no)
664      AC_MSG_RESULT($old_tiger)
665      if test "$old_tiger" = yes ; then
666         AC_DEFINE(USE_OLD_TIGER,1,[Define to use the old fake OID for TIGER/192 digest support])
667      fi
668   fi
669   if test x"$use_sha512" = xyes ; then
670      AC_SUBST(SHA512_O,sha512.o)
671      AC_DEFINE(USE_SHA512,1,[Define to include the SHA-384 and SHA-512 digests])
672   fi
673 fi
674
675 dnl Checks for library functions.
676 AC_FUNC_FSEEKO
677 AC_FUNC_VPRINTF
678 AC_FUNC_FORK
679 AC_CHECK_FUNCS(strerror stpcpy strsep strlwr tcgetattr strtoul mmap)
680 AC_CHECK_FUNCS(strcasecmp strncasecmp ctermid)
681 AC_CHECK_FUNCS(memmove gettimeofday getrusage setrlimit clock_gettime)
682 AC_CHECK_FUNCS(atexit raise getpagesize strftime nl_langinfo setlocale)
683 AC_CHECK_FUNCS(waitpid wait4 sigaction sigprocmask rand pipe stat)
684 AC_REPLACE_FUNCS(mkdtemp)
685
686 #
687 # check for gethrtime and run a testprogram to see whether
688 # it is broken.  It has been reported that some Solaris and HP UX systems 
689 # raise an SIGILL
690 #
691 AC_CACHE_CHECK([for gethrtime], 
692                [gnupg_cv_func_gethrtime],
693                [AC_TRY_LINK([#include <sys/times.h>],[
694                    hrtime_t tv;
695                    tv = gethrtime();
696                  ],
697                  [gnupg_cv_func_gethrtime=yes],
698                  [gnupg_cv_func_gethrtime=no])
699                ])
700 if test $gnupg_cv_func_gethrtime = yes; then
701      AC_DEFINE([HAVE_GETHRTIME], 1,
702                [Define if you have the `gethrtime(2)' function.])
703      AC_CACHE_CHECK([whether gethrtime is broken], 
704                [gnupg_cv_func_broken_gethrtime],
705                [AC_TRY_RUN([
706                    #include <sys/times.h>
707                    int main () {
708                    hrtime_t tv;
709                    tv = gethrtime(); 
710                  }
711                  ],
712                  [gnupg_cv_func_broken_gethrtime=no],
713                  [gnupg_cv_func_broken_gethrtime=yes],
714                  [gnupg_cv_func_broken_gethrtime=assume-no])
715                 ])
716     if test $gnupg_cv_func_broken_gethrtime = yes; then
717       AC_DEFINE([HAVE_BROKEN_GETHRTIME], 1,
718       [Define if `gethrtime(2)' does not work correctly i.e. issues a SIGILL.])
719     fi
720 fi
721      
722
723 GNUPG_CHECK_MLOCK
724 GNUPG_FUNC_MKDIR_TAKES_ONE_ARG
725
726 dnl
727 dnl Check whether we can use Linux capabilities as requested
728 dnl
729 if test "$use_capabilities" = "yes" ; then
730 use_capabilities=no
731 AC_CHECK_HEADERS(sys/capability.h)
732 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
733   AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
734   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
735      AC_DEFINE(USE_CAPABILITIES,1,
736                [define if capabilities should be used])
737      LIBS="$LIBS -lcap"
738      use_capabilities=yes
739   fi
740 fi
741 if test "$use_capabilities" = "no" ; then
742     AC_MSG_WARN([[
743 ***
744 *** The use of capabilities on this system is not possible.
745 *** You need a recent Linux kernel and some patches:
746 ***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
747 ***   fcap-module-990613.tar.gz     (kernel module)
748 ***   libcap-1.92.tar.gz            (user mode library and utilities)
749 *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
750 *** set (filesystems menu). Be warned: This code is *really* ALPHA.
751 ***]])
752 fi
753 fi
754
755
756 GNUPG_CHECK_IPC
757 if test "$ac_cv_header_sys_shm_h" = "yes"; then
758   AC_DEFINE(USE_SHM_COPROCESSING,1,
759             [define if the shared memory interface should be made available])
760 fi
761
762 dnl
763 dnl check whether we have a random device
764 dnl
765 if test "$try_dev_random" = yes ; then
766     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
767     [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
768       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
769     if test "$ac_cv_have_dev_random" = yes; then
770         AC_DEFINE(HAVE_DEV_RANDOM,1,
771                  [defined if the system supports a random device] )
772     fi
773 else
774     AC_MSG_CHECKING(for random device)
775     ac_cv_have_dev_random=no
776     AC_MSG_RESULT(has been disabled)
777 fi
778
779
780 dnl
781 dnl Figure out the default random module.
782 dnl
783 random_modules=""
784 if test "$use_static_rnd" = default; then
785      if test "$ac_cv_have_dev_random" = yes; then
786         random_modules="rndlinux"
787      else
788          case "${target}" in
789             *-*-mingw32*|*-*-cygwin*)
790                 random_modules="rndw32"
791                 ;;
792             i?86-emx-os2|i?86-*-os2*emx)
793                 random_modules="rndos2"
794                 ;;
795             m68k-atari-mint)
796                 random_modules="rndatari"
797                 ;;
798             i?86-*-msdosdjgpp*)
799                 :
800                 ;;
801             *)
802                 random_modules="rndlinux rndegd rndunix"
803                 AC_DEFINE(USE_ALL_RANDOM_MODULES, 1, 
804                           [Allow to select random modules at runtime.])
805                 ;;
806          esac
807      fi
808 else
809   if test "$use_static_rnd" = auto; then
810      random_modules="rndlinux rndegd rndunix"
811      AC_DEFINE(USE_ALL_RANDOM_MODULES, 1)
812   else
813      random_modules="rnd$use_static_rnd";
814   fi
815 fi
816
817 if test -z "$random_modules"; then
818    AC_MSG_ERROR(no random module available)
819 fi
820 print_egd_warning=no
821 for rndmod in $random_modules "" ; do
822   case "$rndmod" in
823     rndlinux)
824          AC_DEFINE(USE_RNDLINUX,1, 
825                   [Defined if the /dev/random based RNG should be used.])
826          ;;
827     rndunix)
828          AC_DEFINE(USE_RNDUNIX,1, 
829                   [Defined if the default Unix RNG should be used.])
830          print_egd_warning=yes
831           ;;
832     rndegd)
833          AC_DEFINE(USE_RNDEGD,1, 
834                   [Defined if the EGD based RNG should be used.])
835          EGDLIBS=$NETLIBS
836          AC_SUBST(EGDLIBS)
837          ;;
838     rndw32)
839          AC_DEFINE(USE_RNDW32,1, 
840                   [Defined if the Windows specific RNG should be used.])
841         ;;
842    esac
843 done
844
845 dnl setup assembler stuff
846 AC_MSG_CHECKING(for mpi assembler functions)
847 if test -f $srcdir/mpi/config.links ; then
848     . $srcdir/mpi/config.links
849     AC_CONFIG_LINKS("$mpi_ln_list")
850     ac_cv_mpi_extra_asm_modules="$mpi_extra_modules"
851     ac_cv_mpi_sflags="$mpi_sflags"
852     ac_cv_mpi_config_done="yes"
853     AC_MSG_RESULT(done)
854 else
855     AC_MSG_RESULT(failed)
856     AC_MSG_ERROR([mpi/config.links missing!])
857 fi
858 MPI_EXTRA_ASM_OBJS=""
859 show_extraasm=""
860 if test "$ac_cv_mpi_extra_asm_modules" != ""; then
861 for i in $ac_cv_mpi_extra_asm_modules; do
862     show_extraasm="$show_extraasm $i"
863     MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o"
864 done
865 fi
866 AC_SUBST(MPI_EXTRA_ASM_OBJS)
867 MPI_SFLAGS="$ac_cv_mpi_sflags"
868 AC_SUBST(MPI_SFLAGS)
869
870 # Sanity check regex.  Tests adapted from mutt.
871
872 AC_MSG_CHECKING([whether regular expression support is requested])
873 AC_ARG_ENABLE(regex,
874 [  --disable-regex         do not handle regular expressions in trust sigs],
875      use_regex=$enableval, use_regex=yes)
876 AC_MSG_RESULT($use_regex)
877
878 if test "$use_regex" = yes ; then
879   AC_MSG_CHECKING([whether the included regex lib is requested])
880   AC_ARG_WITH(included-regex,
881       [  --with-included-regex   use the included GNU regex library],
882       [gnupg_cv_included_regex=yes],[gnupg_cv_included_regex=no])
883   AC_MSG_RESULT($gnupg_cv_included_regex)
884
885   if test $gnupg_cv_included_regex = no ; then
886      # Does the system have regex functions at all?
887      AC_CHECK_FUNC(regcomp,gnupg_cv_included_regex=no,
888                            gnupg_cv_included_regex=yes)
889   fi
890
891   if test $gnupg_cv_included_regex = no ; then
892      AC_CACHE_CHECK([whether your system's regexp library is broken],
893        [gnupg_cv_regex_broken],
894        AC_TRY_RUN([
895 #include <unistd.h>
896 #include <regex.h>
897 main() { regex_t blah ; regmatch_t p; p.rm_eo = p.rm_eo; return regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0); }],
898        gnupg_cv_regex_broken=no, gnupg_cv_regex_broken=yes, gnupg_cv_regex_broken=yes))
899
900      if test $gnupg_cv_regex_broken = yes ; then
901       AC_MSG_WARN(your regex is broken - using the included GNU regex instead.)
902       gnupg_cv_included_regex=yes
903      fi
904   fi
905
906   if test $gnupg_cv_included_regex = yes; then
907      AC_DEFINE(USE_GNU_REGEX,1,[ Define if you want to use the included regex lib ])
908      AC_SUBST(REGEX_O,regex.o)
909   fi
910 else
911
912   AC_DEFINE(DISABLE_REGEX,1,[ Define to disable regular expression support ])
913 fi
914
915 dnl Do we have zlib? Must do it here because Solaris failed
916 dnl when compiling a conftest (due to the "-lz" from LIBS).
917 use_local_zlib=yes
918 if test "$g10_force_zlib" = "yes"; then
919   :
920 else
921   _cppflags="${CPPFLAGS}"
922   _ldflags="${LDFLAGS}"
923
924   AC_ARG_WITH(zlib,
925   [  --with-zlib=DIR         use libz in DIR],[
926     if test -d "$withval"; then
927       CPPFLAGS="${CPPFLAGS} -I$withval/include"
928       LDFLAGS="${LDFLAGS} -L$withval/lib"
929     fi
930   ])
931
932   AC_CHECK_HEADER(zlib.h,
933       AC_CHECK_LIB(z, deflateInit2_,
934        use_local_zlib=no
935        LIBS="$LIBS -lz",
936        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
937        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags})
938 fi
939  
940 if test "$use_local_zlib" = yes ; then
941     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
942     AC_CONFIG_LINKS(zlib.h:zlib/zlib.h zconf.h:zlib/zconf.h )
943     ZLIBS="../zlib/libzlib.a"
944 else
945     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, false)
946     ZLIBS=
947 fi
948 AC_SUBST(ZLIBS)
949
950
951 # Allow users to append something to the version string without
952 # flagging it as development version.  The user version parts is
953 # considered everything after a dash. 
954 if test "$development_version" != yes; then
955   changequote(,)dnl
956   tmp_pat='[a-zA-Z]'
957   changequote([,])dnl
958   if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
959     development_version=yes
960   fi
961 fi
962 if test "$development_version" = yes; then
963     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
964             [Defined if this is not a regular release])
965 fi
966
967 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
968
969 GNUPG_CHECK_GNUMAKE
970
971 # add some extra libs here so that previous tests don't fail for
972 # mysterious reasons - the final link step should bail out. 
973 case "${target}" in
974     *-*-mingw32*)
975         LIBS="$LIBS -lwsock32"
976         ;;
977     *)
978        ;;
979 esac
980
981
982 if test "$GCC" = yes; then
983     if test "$USE_MAINTAINER_MODE" = "yes"; then
984         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
985     else
986         CFLAGS="$CFLAGS -Wall"
987     fi
988 fi
989
990 AC_SUBST(NETLIBS)
991
992
993 if test "$print_egd_warning" = yes; then
994   AC_MSG_WARN([[
995 ***
996 *** The performance of the UNIX random gatherer module is not very good
997 *** and it does not keep the entropy pool over multiple invocations of
998 *** GnuPG.  The suggested way to overcome this problem is to use the
999 ***
1000 ***               Entropy Gathering Daemon (EGD)
1001 ***
1002 *** which provides a entropy source for the whole system.  It is written
1003 *** in Perl and available at the GnuPG FTP servers.  For more information
1004 *** consult the GnuPG webpages:
1005 ***
1006 ***           http://www.gnupg.org/download.html#egd
1007 ***
1008 *** You may want to run ./configure with --enable-static-rnd=egd to use it.
1009 ***]])
1010 fi
1011
1012 # Note the \\\\ for backslashes.  Autoconf eats one layer, leaving \\
1013
1014 AC_CONFIG_COMMANDS(g10defs.h,[[
1015 cat >g10defs.tmp <<G10EOF
1016 /* Generated automatically by configure */
1017 #ifdef HAVE_DRIVE_LETTERS
1018   #define G10_LOCALEDIR     "c:\\\\lib\\\\gnupg\\\\locale"
1019   #define GNUPG_LIBDIR      "c:\\\\lib\\\\gnupg"
1020   #define GNUPG_LIBEXECDIR  "c:\\\\lib\\\\gnupg"
1021   #define GNUPG_DATADIR     "c:\\\\lib\\\\gnupg"
1022   #define GNUPG_HOMEDIR     "c:\\\\gnupg"
1023 #else
1024   #define G10_LOCALEDIR     "${datadir}/locale"
1025   #define GNUPG_LIBDIR      "${libdir}/gnupg"
1026   #define GNUPG_DATADIR     "${datadir}/gnupg"
1027   #ifdef __VMS
1028     #define GNUPG_HOMEDIR "/SYS\$LOGIN/gnupg" 
1029   #else
1030     #define GNUPG_HOMEDIR "~/.gnupg" 
1031   #endif
1032 #endif
1033 /* those are here to be redefined by handcrafted g10defs.h.
1034    Please note that the string version must not contain more
1035    than one character because the using code assumes strlen()==1 */
1036 #ifdef HAVE_DOSISH_SYSTEM
1037 #define DIRSEP_C '\\\\'
1038 #define EXTSEP_C '.'
1039 #define DIRSEP_S "\\\\"
1040 #define EXTSEP_S "."
1041 #else
1042 #define DIRSEP_C '/'
1043 #define EXTSEP_C '.'
1044 #define DIRSEP_S "/"
1045 #define EXTSEP_S "."
1046 #endif
1047 G10EOF
1048 cat mpi/mpi-asm-defs.h >>g10defs.tmp 
1049 if cmp -s g10defs.h g10defs.tmp 2>/dev/null; then
1050     echo "g10defs.h is unchanged"
1051     rm -f g10defs.tmp
1052 else
1053     rm -f g10defs.h
1054     mv g10defs.tmp g10defs.h
1055     echo "g10defs.h created"
1056 fi
1057 ]],[[
1058 prefix=$prefix
1059 exec_prefix=$exec_prefix
1060 libdir=$libdir
1061 libexecdir=$libexecdir
1062 datadir=$datadir
1063 DATADIRNAME=$DATADIRNAME
1064 ]])
1065
1066
1067 AC_CONFIG_FILES([
1068 Makefile
1069 intl/Makefile
1070 po/Makefile.in
1071 util/Makefile
1072 mpi/Makefile
1073 cipher/Makefile
1074 g10/Makefile
1075 keyserver/Makefile
1076 keyserver/gpgkeys_mailto
1077 keyserver/gpgkeys_test
1078 doc/Makefile
1079 tools/Makefile
1080 zlib/Makefile
1081 checks/Makefile
1082 ])
1083 AC_OUTPUT
1084
1085 # Give some feedback
1086 echo
1087 echo   "                Configured for: $PRINTABLE_OS_NAME ($target)"
1088 if test -n "$show_extraasm"; then
1089   echo "  Extra cpu specific functions:$show_extraasm"
1090 fi
1091 echo