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