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