* delkey.c (do_delete_key): Always allow to delete a key in batch mode
[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 # Please enter the version number here and set development_version to
26 # yes if the minor number is odd or you feel that the default check 
27 # for a development version is not sufficient.
28 AC_INIT(gnupg, 1.1.91, bug-gnupg@gnu.org)
29 development_version=yes
30
31 ALL_LINGUAS="cs da de eo el es et fr gl id it ja nl pl pt_BR pt sv tr"
32 static_modules="sha1 md5 rmd160"
33 static_random_module=""
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 AC_PROG_AWK
51
52 MODULES_IN_CIPHER=`$AWK '/^EXTRA_PROGRAMS/ { for(i=3;i<=NF;i++) print $i}' \
53                                               $srcdir/cipher/Makefile.am`
54
55 dnl
56 dnl  Check for random module options
57 dnl
58 dnl  Fixme: get the list of available modules from MODULES_IN_CIPHER
59 dnl         and check against this list
60
61 AC_MSG_CHECKING([which static random module to use])
62 AC_ARG_ENABLE(static-rnd,
63     [  --enable-static-rnd=[egd|unix|linux|none]  ],
64 [use_static_rnd=$enableval], [use_static_rnd=default] )
65
66 if test "$use_static_rnd" = no; then
67     use_static_rnd=default
68 fi
69
70 case "$use_static_rnd" in
71     egd | linux | unix | none | default )
72       AC_MSG_RESULT($use_static_rnd)
73       ;;
74     * )
75       AC_MSG_RESULT(invalid argument)
76       AC_MSG_ERROR(there is no random module rnd$use_static_rnd)
77       ;;
78 esac
79
80 AC_ARG_WITH(egd-socket,
81     [  --with-egd-socket=NAME  use NAME for the EGD socket],
82             egd_socket_name="$withval", egd_socket_name="" )
83 AC_DEFINE_UNQUOTED(EGD_SOCKET_NAME, "$egd_socket_name",
84                    [Define if you don't want the default EGD socket name.
85                     For details see cipher/rndegd.c])
86
87
88 dnl
89 dnl See whether the user wants to disable checking for /dev/random
90
91 AC_MSG_CHECKING([whether use of /dev/random is requested])
92 AC_ARG_ENABLE(dev-random,
93 [  --disable-dev-random    disable the use of dev random],
94     try_dev_random=$enableval, try_dev_random=yes)
95 AC_MSG_RESULT($try_dev_random)
96
97
98 dnl
99 dnl  Check other options
100 dnl
101
102 AC_MSG_CHECKING([whether use of extensions is requested])
103 AC_ARG_ENABLE(dynload,
104 [  --disable-dynload       disable use of extensions],
105     try_dynload=$enableval, try_dynload=yes)
106 AC_MSG_RESULT($try_dynload)
107
108 AC_MSG_CHECKING([whether assembler modules are requested])
109 AC_ARG_ENABLE(asm,
110 [  --disable-asm           do not use assembler modules],
111      try_asm_modules=$enableval, try_asm_modules=yes)
112 AC_MSG_RESULT($try_asm_modules)
113
114 AC_MSG_CHECKING([whether memory guard is requested])
115 AC_ARG_ENABLE(m-guard,
116     [  --enable-m-guard        enable memory guard facility],
117     use_m_guard=$enableval, use_m_guard=no)
118 AC_MSG_RESULT($use_m_guard)
119 if test "$use_m_guard" = yes ; then
120     AC_DEFINE(M_GUARD,1,[Define to use the (obsolete) malloc guarding feature])
121 fi
122
123 AC_MSG_CHECKING([whether to enable external program execution])
124 AC_ARG_ENABLE(exec,
125     [  --disable-exec          disable all external program execution],
126     use_exec=$enableval, use_exec=yes)
127 AC_MSG_RESULT($use_exec)
128 if test "$use_exec" = no ; then
129     AC_DEFINE(NO_EXEC,1,[Define to disable all external program execution])
130 fi
131
132 if test "$use_exec" = yes ; then
133   AC_MSG_CHECKING([whether to enable photo ID viewing])
134   AC_ARG_ENABLE(photo-viewers,
135       [  --disable-photo-viewers disable photo ID viewers],
136       [if test "$enableval" = no ; then
137          AC_DEFINE(DISABLE_PHOTO_VIEWER,1,[define to disable photo viewing])
138       fi],enableval=yes)
139   gnupg_cv_enable_photo_viewers=$enableval
140   AC_MSG_RESULT($enableval)
141
142   if test "$gnupg_cv_enable_photo_viewers" = yes ; then
143     AC_MSG_CHECKING([whether to use a fixed photo ID viewer])
144     AC_ARG_WITH(photo-viewer,
145         [  --with-photo-viewer=FIXED_VIEWER  set a fixed photo ID viewer],
146         [if test "$withval" = yes ; then
147            withval=no
148         elif test "$withval" != no ; then
149            AC_DEFINE_UNQUOTED(FIXED_PHOTO_VIEWER,"$withval",
150                             [if set, restrict photo-viewer to this])
151         fi],withval=no)
152     AC_MSG_RESULT($withval)
153   fi
154
155   AC_MSG_CHECKING([whether to enable external keyserver helpers])
156   AC_ARG_ENABLE(keyserver-helpers,
157       [  --disable-keyserver-helpers  disable all external keyserver support],
158       [if test "$enableval" = no ; then
159          AC_DEFINE(DISABLE_KEYSERVER_HELPERS,1,
160                   [define to disable keyserver helpers])
161       fi],enableval=yes)
162   gnupg_cv_enable_keyserver_helpers=$enableval
163   AC_MSG_RESULT($enableval)
164
165   if test "$gnupg_cv_enable_keyserver_helpers" = yes ; then
166     AC_MSG_CHECKING([whether LDAP keyserver support is requested])
167     AC_ARG_ENABLE(ldap,
168     [  --disable-ldap          disable LDAP keyserver interface],
169         try_ldap=$enableval, try_ldap=yes)
170     AC_MSG_RESULT($try_ldap)
171
172     AC_MSG_CHECKING([whether experimental external hkp keyserver support is requested])
173     AC_ARG_ENABLE(external-hkp,
174     [  --enable-external-hkp   enable experimental external HKP keyserver interface],
175         try_hkp=$enableval, try_hkp=no)
176     AC_MSG_RESULT($try_hkp)
177
178     if test "$try_hkp" = yes ; then
179       GPGKEYS_HKP="gpgkeys_hkp"
180       AC_DEFINE(USE_EXTERNAL_HKP,1,[define to use the experimental external HKP keyserver interface])
181     fi
182
183     AC_MSG_CHECKING([whether email keyserver support is requested])
184     AC_ARG_ENABLE(mailto,
185     [  --disable-mailto        disable email keyserver interface],
186         try_mailto=$enableval, try_mailto=yes)
187     AC_MSG_RESULT($try_mailto)
188     fi
189
190     AC_MSG_CHECKING([whether to disable keyserver exec-path])
191     AC_ARG_ENABLE(keyserver-path,
192         [  --disable-keyserver-path disable the exec-path option for keyserver helpers],
193         [if test "$enableval" = no ; then
194          AC_DEFINE(DISABLE_KEYSERVER_PATH,1,[define to disable exec-path for keyserver helpers])
195         fi],enableval=yes)
196     AC_MSG_RESULT($enableval)
197   fi
198
199 AC_MSG_CHECKING([whether included zlib is requested])
200 AC_ARG_WITH(included-zlib,
201     [  --with-included-zlib    use the zlib code included here],
202 [g10_force_zlib=yes], [g10_force_zlib=no] )
203 AC_MSG_RESULT($g10_force_zlib)
204
205
206 dnl
207 dnl Check whether we want to use Linux capabilities
208 dnl
209 AC_MSG_CHECKING([whether use of capabilities is requested])
210 AC_ARG_WITH(capabilities,
211     [  --with-capabilities     use linux capabilities [default=no]],
212 [use_capabilities="$withval"],[use_capabilities=no])
213 AC_MSG_RESULT($use_capabilities)
214
215
216 AH_BOTTOM([
217 #if !(defined(HAVE_FORK) && defined(HAVE_PIPE) && defined(HAVE_WAITPID))
218 #define EXEC_TEMPFILE_ONLY
219 #endif
220
221 #include "g10defs.h"
222 ])
223
224
225 AM_MAINTAINER_MODE
226
227 dnl Checks for programs.
228
229 dnl
230 dnl Setup some stuff depending on host/target.
231 dnl
232 case "${target}" in
233     *-*-mingw32*)
234         disallowed_modules="rndunix rndlinux rndegd"
235         ;;
236     *-*-cygwin*)
237         disallowed_modules="rndunix rndlinux rndegd tiger"
238         ;;
239     *)
240         disallowed_modules="rndw32"
241        ;;
242 esac
243
244 AC_PROG_MAKE_SET
245 AM_SANITY_CHECK
246 missing_dir=`cd $ac_aux_dir && pwd`
247 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
248 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
249 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
250 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
251 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
252 AC_PROG_CC
253 AC_PROG_CPP
254 AC_PATH_PROG(PERL,"perl")
255 AC_ISC_POSIX
256 AC_SYS_LARGEFILE
257 AC_PROG_INSTALL
258 AC_PROG_AWK
259 AC_CHECK_PROG(DOCBOOK_TO_MAN, docbook-to-man, yes, no)
260 AM_CONDITIONAL(HAVE_DOCBOOK_TO_MAN, test "$ac_cv_prog_DOCBOOK_TO_MAN" = yes)
261 GNUPG_CHECK_FAQPROG
262 GNUPG_CHECK_DOCBOOK_TO_TEXI
263
264 MPI_OPT_FLAGS=""
265
266
267 try_gettext=yes
268 case "${target}" in
269     *-*-mingw32*|*-*-cygwin*)
270         # special stuff for Windoze NT
271         ac_cv_have_dev_random=no
272         AC_DEFINE(USE_ONLY_8DOT3,1,
273                   [set this to limit filenames to the 8.3 format])
274         AC_DEFINE(HAVE_DRIVE_LETTERS,1,
275                   [defined if we must run on a stupid file system])
276         AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
277                   [defined if we run on some of the PCDOS like systems 
278                    (DOS, Windoze. OS/2) with special properties like
279                     no file modes])
280         AC_DEFINE(USE_SIMPLE_GETTEXT,1,
281                   [because the Unix gettext has too much overhead on
282                    MingW32 systems and these systems lack Posix functions,
283                    we use a simplified version of gettext])
284         try_gettext="no"
285         ;;
286     i?86-emx-os2 | i?86-*-os2*emx )
287         # OS/2 with the EMX environment
288         ac_cv_have_dev_random=no
289         AC_DEFINE(HAVE_DRIVE_LETTERS)
290         AC_DEFINE(HAVE_DOSISH_SYSTEM)
291         try_gettext="no"
292         ;;
293
294     i?86-*-msdosdjgpp*)
295         # DOS with the DJGPP environment
296         ac_cv_have_dev_random=no
297         AC_DEFINE(HAVE_DRIVE_LETTERS)
298         AC_DEFINE(HAVE_DOSISH_SYSTEM)
299         try_gettext="no"
300         ;;
301
302     *-*-freebsd*)
303        # FreeBSD
304        CPPFLAGS="$CPPFLAGS -I/usr/local/include"
305        LDFLAGS="$LDFLAGS -L/usr/local/lib"
306        ;;
307
308     *-*-hpux*)
309         if test -z "$GCC" ; then
310             CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
311         fi
312         ;;
313     *-dec-osf4*)
314         if test -z "$GCC" ; then
315             # Suppress all warnings
316             # to get rid of the unsigned/signed char mismatch warnings.
317             CFLAGS="$CFLAGS -w"
318         fi
319         ;;
320     *-dec-osf5*)
321         if test -z "$GCC" ; then
322             # Use the newer compiler `-msg_disable ptrmismatch' to
323             # get rid of the unsigned/signed char mismatch warnings.
324             # Using this may hide other pointer mismatch warnings, but
325             # it at least lets other warning classes through
326             CFLAGS="$CFLAGS -msg_disable ptrmismatch"
327         fi
328         ;;
329     m68k-atari-mint)
330         ;;
331     *)
332        ;;
333 esac
334
335 AC_SUBST(MPI_OPT_FLAGS)
336 GNUPG_SYS_SYMBOL_UNDERSCORE
337 GNUPG_CHECK_PIC
338 GNUPG_CHECK_EXPORTDYNAMIC
339 if test "$NO_PIC" = yes; then
340     try_dynload=no
341 fi
342
343 dnl Must check for network library requirements before doing link tests
344 dnl for ldap, for example. If ldap libs are static (or dynamic and without
345 dnl ELF runtime link paths), then link will fail and LDAP support won't
346 dnl be detected.
347
348 AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname,
349         [NETLIBS="-lnsl $NETLIBS"]))
350 AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt,
351         [NETLIBS="-lsocket $NETLIBS"]))
352
353 # Try and link a LDAP test program to weed out unusable LDAP
354 # libraries.  -lldap -llber -lresolv is for OpenLDAP.  -lldapssl41 is
355 # for Mozilla LDAP.
356
357 if test "$try_ldap" = yes ; then
358   for LDAPLIBS in "-lldap -llber -lresolv" "-lldapssl41"; do
359     _ldap_save_libs=$LIBS
360     LIBS="$LDAPLIBS $NETLIBS $LIBS"
361
362     AC_MSG_CHECKING([whether LDAP via \"$LDAPLIBS\" is present and sane])
363     AC_TRY_LINK([#include <ldap.h>],[ldap_open("foobar",1234);],
364                 [gnupg_cv_func_ldap_init=yes],[gnupg_cv_func_ldap_init=no])
365     AC_MSG_RESULT([$gnupg_cv_func_ldap_init])
366
367     if test $gnupg_cv_func_ldap_init = no; then
368       AC_MSG_CHECKING([whether I can make LDAP be sane with lber.h])
369       AC_TRY_LINK([#include <lber.h>
370 #include <ldap.h>],[ldap_open("foobar",1234);],
371          [gnupg_cv_func_ldaplber_init=yes],[gnupg_cv_func_ldaplber_init=no])
372       AC_MSG_RESULT([$gnupg_cv_func_ldaplber_init])
373     fi
374
375     if test "$gnupg_cv_func_ldaplber_init" = yes ; then
376        AC_DEFINE(NEED_LBER_H,1,[Define if the LDAP library requires including lber.h before ldap.h])
377     fi
378
379     if test "$gnupg_cv_func_ldap_init" = yes || \
380         test "$gnupg_cv_func_ldaplber_init" = yes ; then
381        GPGKEYS_LDAP="gpgkeys_ldap"
382     fi
383
384     LIBS=$_ldap_save_libs
385
386     if test "$GPGKEYS_LDAP" != "" ; then break; fi
387   done
388 fi
389
390 AC_SUBST(GPGKEYS_LDAP)
391 AC_SUBST(LDAPLIBS)
392
393 dnl This isn't necessarily sendmail itself, but anything that gives a
394 dnl sendmail-ish interface to the outside world.  That includes qmail,
395 dnl postfix, etc.  Basically, anything that can handle "sendmail -t".
396
397 if test "$try_mailto" = yes ; then
398   AC_ARG_WITH(mailprog,[  --with-mailprog=NAME    use "NAME -t" for mail transport],,with_mailprog=yes)
399
400   if test "$with_mailprog" = yes ; then
401     AC_PATH_PROG(SENDMAIL,sendmail,,$PATH:/usr/sbin:/usr/libexec:/usr/lib)
402     if test "$ac_cv_path_SENDMAIL" ; then
403       GPGKEYS_MAILTO="gpgkeys_mailto"
404     fi
405   elif test "$with_mailprog" != no ; then
406     AC_MSG_CHECKING([for a mail transport program])
407     AC_SUBST(SENDMAIL,$with_mailprog)
408     AC_MSG_RESULT($with_mailprog)
409     GPGKEYS_MAILTO="gpgkeys_mailto"
410   fi
411 fi
412
413 AC_SUBST(GPGKEYS_MAILTO)
414 AC_SUBST(GPGKEYS_HKP)
415
416 case "${target}" in
417     *-*-mingw32*)
418         PRINTABLE_OS_NAME="MingW32"
419         ;;
420     *-*-cygwin*)
421         PRINTABLE_OS_NAME="Cygwin32"
422         ;;
423     i?86-emx-os2 | i?86-*-os2*emx )
424         PRINTABLE_OS_NAME="OS/2"
425         ;;
426     i?86-*-msdosdjgpp*)
427         PRINTABLE_OS_NAME="MSDOS/DJGPP"
428         try_dynload=no
429         ;;
430     *-linux*)
431         PRINTABLE_OS_NAME="GNU/Linux"
432         ;;
433 dnl let that after linux to avoid gnu-linux problems
434     *-gnu*)
435         PRINTABLE_OS_NAME="GNU/Hurd"
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
444
445 #
446 # 1. Set flags to be used for the extension modules
447 # 2. Set names of random devices
448 #
449 NAME_OF_DEV_RANDOM="/dev/random"
450 NAME_OF_DEV_URANDOM="/dev/urandom"
451 case "${target}" in
452     *-openbsd* | *-netbsd*)
453         NAME_OF_DEV_RANDOM="/dev/srandom"
454         NAME_OF_DEV_URANDOM="/dev/urandom"
455         DYNLINK_MOD_CFLAGS="-shared -rdynamic $CFLAGS_PIC -Wl,-Bshareable -Wl,-x"
456         ;;
457
458      hpux*)
459         # if using the vendor (ANSI) compiler, arrange to have `-b' passed
460         # to the linker.  If using gcc, it supports `-shared' to do the same.
461         if test -n "$GCC" ; then
462            DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
463         else
464            DYNLINK_MOD_CFLAGS='-Wl,-b'
465         fi
466         ;;
467
468     *-irix6.5*)
469         # Irix 6.5 (and probably a lot earlier, but I only still have
470         # access to 6.5.x) doesn't require any additional flags, as `-KPIC'
471         # is the default.  Also, `-shared' works with the vendor compiler
472         DYNLINK_MOD_CFLAGS="-shared"
473         ;;
474
475     alpha*-dec-osf*)
476         # osf (i.e. OSF/1, Digital UNIX, or Tru64 UNIX, pick any one...)
477         # on alpha doesn't require any PIC flags, everything is PIC.
478         # This may not be the case for osf ports to other machines, so
479         # hence the more specific match for target.
480         #
481         # Also, `-shared' works with the vendor compiler or gcc.
482         # -expect_unresolved turns off warnings about unresolved symbols.
483         DYNLINK_MOD_CFLAGS='-shared -Wl,-expect_unresolved,\*'
484          ;;
485
486     *-solaris*)
487         # -shared is a gcc-ism.  Find pic flags from GNUPG_CHECK_PIC.
488         if test -n "$GCC" ; then
489            DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
490         else
491            DYNLINK_MOD_CFLAGS="-G $CFLAGS_PIC"
492         fi
493         ;;
494
495     *-irix* | *-dec-osf* )
496         DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
497         ;;
498
499     *)
500         # -shared is a gcc-ism.  Find pic flags from GNUPG_CHECK_PIC.
501         if test -n "$GCC" ; then
502            DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"                            
503         else
504            DYNLINK_MOD_CFLAGS="$CFLAGS_PIC"
505         fi
506         ;;
507 esac
508 AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM",
509                    [defined to the name of the strong random device])
510 AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM",
511                    [defined to the name of the weaker random device])
512 AC_SUBST(MPI_OPT_FLAGS)
513
514
515 dnl Checks for libraries.
516
517 if test "$try_gettext" = yes; then
518 AM_GNU_GETTEXT
519 else
520 USE_NLS=no
521 USE_INCLUDED_LIBINTL=no
522 BUILD_INCLUDED_LIBINTL=no
523 AC_SUBST(USE_NLS)
524 AC_SUBST(USE_INCLUDED_LIBINTL)
525 AC_SUBST(BUILD_INCLUDED_LIBINTL)
526 fi
527
528
529 if test "$try_dynload" = yes ; then
530   AC_CHECK_LIB(dl,dlopen)
531   if test "$ac_cv_lib_dl_dlopen" = "yes"; then
532     AC_DEFINE(USE_DYNAMIC_LINKING,1,
533               [define to enable the use of extensions])
534     AC_DEFINE(HAVE_DL_DLOPEN,1,
535               [Defined when the dlopen function family is available])
536     DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
537     use_gnupg_extensions=yes
538   else
539     AC_CHECK_FUNCS(dlopen)
540     if test "$ac_cv_func_dlopen" = "yes"; then
541       AC_DEFINE(USE_DYNAMIC_LINKING)
542       AC_DEFINE(HAVE_DL_DLOPEN)
543       DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
544       use_gnupg_extensions=yes
545     else
546       AC_CHECK_LIB(dld,shl_load)
547       if test "$ac_cv_lib_dld_shl_load" = "yes"; then
548         AC_DEFINE(USE_DYNAMIC_LINKING)
549         AC_DEFINE(HAVE_DL_SHL_LOAD,1,
550                   [Defined if the shl_load function family is available])
551         DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
552         use_gnupg_extensions=yes
553 dnl -----------------
554 dnl  DLD is not ready for use. So I better disable this test
555 dnl
556 dnl    AC_CHECK_LIB(dld,dld_link)
557 dnl    if test "$ac_cv_lib_dld_dld_link" = "yes"; then
558 dnl      AC_DEFINE(USE_DYNAMIC_LINKING)
559 dnl      AC_DEFINE(HAVE_DLD_DLD_LINK)
560 dnl      DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
561 dnl      use_gnupg_extensions=yes
562 dnl ---------------
563       fi
564     fi
565   fi
566 else
567   AC_MSG_CHECKING(for dynamic loading)
568   DYNLINK_LDFLAGS=
569   DYNLINK_MOD_CFLAGS=
570   use_gnupg_extensions=no
571   AC_MSG_RESULT(has been disabled)
572 fi
573
574 AM_CONDITIONAL(ENABLE_GNUPG_EXTENSIONS, test "$use_gnupg_extensions" = yes )
575 AC_SUBST(DYNLINK_LDFLAGS)
576 AC_SUBST(DYNLINK_MOD_CFLAGS)
577
578
579 dnl Checks for header files.
580 AC_HEADER_STDC
581 AC_CHECK_HEADERS(unistd.h langinfo.h termio.h locale.h)
582
583 dnl Checks for typedefs, structures, and compiler characteristics.
584 AC_C_CONST
585 AC_C_INLINE
586 AC_TYPE_SIZE_T
587 AC_TYPE_SIGNAL
588 AC_DECL_SYS_SIGLIST
589
590 GNUPG_CHECK_ENDIAN
591
592
593 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
594 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
595 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
596 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
597 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
598
599 AC_CHECK_SIZEOF(unsigned short, 2)
600 AC_CHECK_SIZEOF(unsigned int, 4)
601 AC_CHECK_SIZEOF(unsigned long, 4)
602 AC_CHECK_SIZEOF(unsigned long long, 0)
603
604 if test "$ac_cv_sizeof_unsigned_short" = "0" \
605    || test "$ac_cv_sizeof_unsigned_int" = "0" \
606    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
607     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
608 fi
609
610 dnl Checks for library functions.
611 AC_FUNC_FSEEKO
612 AC_FUNC_VPRINTF
613 AC_FUNC_FORK
614 AC_CHECK_FUNCS(strerror stpcpy strsep strlwr tcgetattr strtoul mmap)
615 AC_CHECK_FUNCS(strcasecmp strncasecmp)
616 AC_CHECK_FUNCS(memmove gettimeofday getrusage setrlimit clock_gettime)
617 AC_CHECK_FUNCS(atexit raise getpagesize strftime nl_langinfo setlocale)
618 AC_CHECK_FUNCS(waitpid wait4 sigaction sigprocmask rand pipe stat)
619 AC_REPLACE_FUNCS(mkdtemp)
620
621 #
622 # check for gethrtime and run a testprogram to see whether
623 # it is broken.  It has been reported that some Solaris and HP UX systems 
624 # raise an SIGILL
625 #
626 AC_CACHE_CHECK([for gethrtime], 
627                [gnupg_cv_func_gethrtime],
628                [AC_TRY_LINK([#include <sys/times.h>],[
629                    hrtime_t tv;
630                    tv = gethrtime();
631                  ],
632                  [gnupg_cv_func_gethrtime=yes],
633                  [gnupg_cv_func_gethrtime=no])
634                ])
635 if test $gnupg_cv_func_gethrtime = yes; then
636      AC_DEFINE([HAVE_GETHRTIME], 1,
637                [Define if you have the `gethrtime(2)' function.])
638      AC_CACHE_CHECK([whether gethrtime is broken], 
639                [gnupg_cv_func_broken_gethrtime],
640                [AC_TRY_RUN([
641                    #include <sys/times.h>
642                    int main () {
643                    hrtime_t tv;
644                    tv = gethrtime(); 
645                  }
646                  ],
647                  [gnupg_cv_func_broken_gethrtime=no],
648                  [gnupg_cv_func_broken_gethrtime=yes],
649                  [gnupg_cv_func_broken_gethrtime=assume-no])
650                 ])
651     if test $gnupg_cv_func_broken_gethrtime = yes; then
652       AC_DEFINE([HAVE_BROKEN_GETHRTIME], 1,
653       [Define if `gethrtime(2)' does not work correctly i.e. issues a SIGILL.])
654     fi
655 fi
656      
657
658 GNUPG_CHECK_MLOCK
659 GNUPG_FUNC_MKDIR_TAKES_ONE_ARG
660
661 dnl
662 dnl Check whether we can use Linux capabilities as requested
663 dnl
664 if test "$use_capabilities" = "yes" ; then
665 use_capabilities=no
666 AC_CHECK_HEADERS(sys/capability.h)
667 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
668   AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
669   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
670      AC_DEFINE(USE_CAPABILITIES,1,
671                [define if capabilities should be used])
672      LIBS="$LIBS -lcap"
673      use_capabilities=yes
674   fi
675 fi
676 if test "$use_capabilities" = "no" ; then
677     AC_MSG_WARN([[
678 ***
679 *** The use of capabilities on this system is not possible.
680 *** You need a recent Linux kernel and some patches:
681 ***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
682 ***   fcap-module-990613.tar.gz     (kernel module)
683 ***   libcap-1.92.tar.gz            (user mode library and utilities)
684 *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
685 *** set (filesystems menu). Be warned: This code is *really* ALPHA.
686 ***]])
687 fi
688 fi
689
690
691 GNUPG_CHECK_IPC
692 if test "$ac_cv_header_sys_shm_h" = "yes"; then
693   AC_DEFINE(USE_SHM_COPROCESSING,1,
694             [define if the shared memory interface should be made available])
695 fi
696
697 dnl
698 dnl check whether we have a random device
699 dnl
700 if test "$try_dev_random" = yes ; then
701     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
702     [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
703       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
704     if test "$ac_cv_have_dev_random" = yes; then
705         AC_DEFINE(HAVE_DEV_RANDOM,1,
706                  [defined if the system supports a random device] )
707     fi
708 else
709     AC_MSG_CHECKING(for random device)
710     ac_cv_have_dev_random=no
711     AC_MSG_RESULT(has been disabled)
712 fi
713
714
715 dnl
716 dnl Figure out the default linkage mode for random modules
717 dnl
718 print_egd_notice=no
719 if test "$use_static_rnd" = default; then
720   if test "$ac_cv_have_dev_random" = yes; then
721       static_random_module="rndlinux"
722   else
723       case "${target}" in
724           *-*-mingw32*|*-*-cygwin*)
725               static_random_module="rndw32"
726               AC_DEFINE(USE_STATIC_RNDW32,1,
727                        [At some point in the code we need to know that
728                         we use the Windows random module.])
729               ;;
730           i?86-emx-os2|i?86-*-os2*emx)
731               static_random_module="rndos2"
732               ;;
733           m68k-atari-mint)
734               static_random_module="rndatari"
735               ;;
736           i?86-*-msdosdjgpp*)
737               :
738               ;;
739           *)
740               static_random_module="rndunix"
741               print_egd_notice=yes
742              ;;
743       esac
744   fi
745 else
746   if test "$use_static_rnd" = none; then
747     :
748   else
749     static_random_module="rnd$use_static_rnd"
750     if test "$use_static_rnd" = "unix"; then
751         print_egd_notice=yes
752     fi
753   fi
754 fi
755
756
757 if test "$print_egd_notice" = "yes"; then
758     AC_MSG_WARN([[
759 ***
760 *** The performance of the UNIX random gatherer module is not very good
761 *** and it does not keep the entropy pool over multiple invocations of
762 *** GnuPG.  The suggested way to overcome this problem is to use the
763 ***
764 ***               Entropy Gathering Daemon (EGD)
765 ***
766 *** which provides a entropy source for the whole system.  It is written
767 *** in Perl and available at the GnuPG FTP servers.  For more information
768 *** consult the GnuPG webpages:
769 ***
770 ***           http://www.gnupg.org/download.html#egd
771 ***
772 *** You may want to run ./configure with --enable-static-rnd=none to be
773 *** able to load the EGD client code dynamically; this way you can choose
774 *** between RNDUNIX and RNDEGD without recompilation.
775 ***]])
776 fi
777
778 dnl
779 dnl Parse the modules list and build the list
780 dnl of static and dynamically linked modules
781 dnl
782 dnl (We always need a static rmd160)
783 static_modules="$static_modules rmd160 $static_random_module"
784 STATIC_CIPHER_NAMES=""
785 STATIC_CIPHER_OBJS=""
786 DYNAMIC_CIPHER_MODS=""
787 show_dynlink=""
788 for name in $MODULES_IN_CIPHER; do
789     x="yes"
790     for i in $disallowed_modules; do
791         if test "$name" = "$i" ; then x="no" ; fi
792     done;
793     if test $x = yes; then
794         x="no"
795         for i in $static_modules; do
796             if test "$name" = "$i" ; then
797                 x="yes"
798             fi
799         done;
800         if test $x = yes; then
801             STATIC_CIPHER_NAMES="$STATIC_CIPHER_NAMES $name"
802             STATIC_CIPHER_OBJS="$STATIC_CIPHER_OBJS $name.o"
803         else
804             DYNAMIC_CIPHER_MODS="$DYNAMIC_CIPHER_MODS $name"
805             show_dynlink="$show_dynlink $name"
806         fi
807     fi
808 done
809 AC_SUBST(STATIC_CIPHER_OBJS)
810 AC_SUBST(STATIC_CIPHER_NAMES)
811 AC_SUBST(DYNAMIC_CIPHER_MODS)
812
813 dnl
814 dnl And build the constructor file
815 dnl
816
817 test -d cipher || mkdir cipher
818 cat <<G10EOF >cipher/construct.c
819 /* automatically generated by configure - do not edit */
820
821 G10EOF
822 show_statlink=""
823 for name in $STATIC_CIPHER_NAMES; do
824     echo "void ${name}_constructor(void);" >>cipher/construct.c
825     show_statlink="$show_statlink $name"
826 done
827
828 cat <<G10EOF >>cipher/construct.c
829
830 void
831 cipher_modules_constructor(void)
832 {
833     static int done = 0;
834     if( done )
835         return;
836     done = 1;
837
838 G10EOF
839 for name in $STATIC_CIPHER_NAMES; do
840     echo "   ${name}_constructor();" >>cipher/construct.c
841 done
842 echo '}' >>cipher/construct.c
843
844
845
846
847 dnl
848 dnl Figure how to link the cipher modules
849 dnl
850 AC_SUBST(STATIC_CIPHER_OBJS)
851 AC_SUBST(DYNAMIC_CIPHER_MODS)
852
853
854 dnl setup assembler stuff
855 AC_MSG_CHECKING(for mpi assembler functions)
856 if test -f $srcdir/mpi/config.links ; then
857     . $srcdir/mpi/config.links
858     AC_CONFIG_LINKS("$mpi_ln_list")
859     ac_cv_mpi_extra_asm_modules="$mpi_extra_modules"
860     ac_cv_mpi_sflags="$mpi_sflags"
861     ac_cv_mpi_config_done="yes"
862     AC_MSG_RESULT(done)
863 else
864     AC_MSG_RESULT(failed)
865     AC_MSG_ERROR([mpi/config.links missing!])
866 fi
867 MPI_EXTRA_ASM_OBJS=""
868 show_extraasm=""
869 if test "$ac_cv_mpi_extra_asm_modules" != ""; then
870 for i in $ac_cv_mpi_extra_asm_modules; do
871     show_extraasm="$show_extraasm $i"
872     MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o"
873 done
874 fi
875 AC_SUBST(MPI_EXTRA_ASM_OBJS)
876 MPI_SFLAGS="$ac_cv_mpi_sflags"
877 AC_SUBST(MPI_SFLAGS)
878
879 dnl Do we have zlib? Must do it here because Solaris failed
880 dnl when compiling a conftest (due to the "-lz" from LIBS).
881 use_local_zlib=yes
882 if test "$g10_force_zlib" = "yes"; then
883   :
884 else
885   _cppflags="${CPPFLAGS}"
886   _ldflags="${LDFLAGS}"
887
888   AC_ARG_WITH(zlib,
889   [  --with-zlib=DIR         use libz in DIR],[
890     if test -d "$withval"; then
891       CPPFLAGS="${CPPFLAGS} -I$withval/include"
892       LDFLAGS="${LDFLAGS} -L$withval/lib"
893     fi
894   ])
895
896   AC_CHECK_HEADER(zlib.h,
897       AC_CHECK_LIB(z, deflateInit2_,
898        use_local_zlib=no
899        LIBS="$LIBS -lz",
900        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
901        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags})
902 fi
903  
904 if test "$use_local_zlib" = yes ; then
905     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
906     AC_CONFIG_LINKS(zlib.h:zlib/zlib.h zconf.h:zlib/zconf.h )
907     ZLIBS="../zlib/libzlib.a"
908 else
909     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, false)
910     ZLIBS=
911 fi
912 AC_SUBST(ZLIBS)
913
914
915 # Allow users to append something to the version string without
916 # flagging it as development version.  The user version parts is
917 # considered everything after a dash. 
918 if test "$development_version" != yes; then
919   changequote(,)dnl
920   tmp_pat='[a-zA-Z]'
921   changequote([,])dnl
922   if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
923     development_version=yes
924   fi
925 fi
926 if test "$development_version" = yes; then
927     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
928             [Defined if this is not a regular release])
929 fi
930
931 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
932
933 GNUPG_CHECK_GNUMAKE
934
935 # add some extra libs here so that previous tests don't fail for
936 # mysterious reasons - the final link step should bail out. 
937 case "${target}" in
938     *-*-mingw32*)
939         LIBS="$LIBS -lwsock32"
940         ;;
941     *)
942        ;;
943 esac
944
945
946 if test "$GCC" = yes; then
947     if test "$USE_MAINTAINER_MODE" = "yes"; then
948         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
949     else
950         CFLAGS="$CFLAGS -Wall"
951     fi
952 fi
953
954 AC_SUBST(NETLIBS)
955
956 # Note the \\\\ for backslashes.  Autoconf eats one layer, leaving \\
957
958 AC_SUBST(GNUPG_LIBEXECDIR,"${libexecdir}/gnupg")
959
960 AC_CONFIG_COMMANDS(g10defs.h,[[
961 cat >g10defs.tmp <<G10EOF
962 /* Generated automatically by configure */
963 #ifdef HAVE_DRIVE_LETTERS
964   #define G10_LOCALEDIR     "c:\\\\lib\\\\gnupg\\\\locale"
965   #define GNUPG_LIBDIR      "c:\\\\lib\\\\gnupg"
966   #define GNUPG_LIBEXECDIR  "c:\\\\lib\\\\gnupg"
967   #define GNUPG_DATADIR     "c:\\\\lib\\\\gnupg"
968   #define GNUPG_HOMEDIR     "c:\\\\gnupg"
969 #else
970   #define G10_LOCALEDIR     "${datadir}/locale"
971   #define GNUPG_LIBDIR      "${libdir}/gnupg"
972   #define GNUPG_LIBEXECDIR  "${libexecdir}/gnupg"
973   #define GNUPG_DATADIR     "${datadir}/gnupg"
974   #ifdef __VMS
975     #define GNUPG_HOMEDIR "/SYS\$LOGIN/gnupg" 
976   #else
977     #define GNUPG_HOMEDIR "~/.gnupg" 
978   #endif
979 #endif
980 /* those are here to be redefined by handcrafted g10defs.h.
981    Please note that the string version must not contain more
982    than one character because the using code assumes strlen()==1 */
983 #ifdef HAVE_DOSISH_SYSTEM
984 #define DIRSEP_C '\\\\'
985 #define EXTSEP_C '.'
986 #define DIRSEP_S "\\\\"
987 #define EXTSEP_S "."
988 #else
989 #define DIRSEP_C '/'
990 #define EXTSEP_C '.'
991 #define DIRSEP_S "/"
992 #define EXTSEP_S "."
993 #endif
994 G10EOF
995 cat mpi/mpi-asm-defs.h >>g10defs.tmp 
996 if cmp -s g10defs.h g10defs.tmp 2>/dev/null; then
997     echo "g10defs.h is unchanged"
998     rm -f g10defs.tmp
999 else
1000     rm -f g10defs.h
1001     mv g10defs.tmp g10defs.h
1002     echo "g10defs.h created"
1003 fi
1004 ]],[[
1005 prefix=$prefix
1006 exec_prefix=$exec_prefix
1007 libdir=$libdir
1008 libexecdir=$libexecdir
1009 datadir=$datadir
1010 DATADIRNAME=$DATADIRNAME
1011 ]])
1012
1013
1014 AC_CONFIG_FILES([
1015 Makefile
1016 intl/Makefile
1017 po/Makefile.in
1018 util/Makefile
1019 mpi/Makefile
1020 cipher/Makefile
1021 g10/Makefile
1022 keyserver/Makefile
1023 keyserver/gpgkeys_mailto
1024 keyserver/gpgkeys_test
1025 doc/Makefile
1026 tools/Makefile
1027 zlib/Makefile
1028 checks/Makefile
1029 ])
1030 AC_OUTPUT
1031
1032 # Give some feedback
1033 echo
1034 echo   "                Configured for: $PRINTABLE_OS_NAME ($target)"
1035 if test -n "$show_dynlink"; then
1036   echo "    Dynamically linked modules:$show_dynlink"
1037 fi
1038 if test -n "$show_statlink"; then
1039   echo "     Statically linked modules:$show_statlink"
1040 fi
1041 if test -n "$show_extraasm"; then
1042   echo "  Extra cpu specific functions:$show_extraasm"
1043 fi
1044 echo
1045