* NEWS: Clarify that --libexecdir is a configure option.
[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_SIGNAL
508 AC_DECL_SYS_SIGLIST
509
510 GNUPG_CHECK_ENDIAN
511
512
513 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
514 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
515 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
516 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
517 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
518
519 AC_CHECK_SIZEOF(unsigned short, 2)
520 AC_CHECK_SIZEOF(unsigned int, 4)
521 AC_CHECK_SIZEOF(unsigned long, 4)
522 AC_CHECK_SIZEOF(unsigned long long, 0)
523
524 if test "$ac_cv_sizeof_unsigned_short" = "0" \
525    || test "$ac_cv_sizeof_unsigned_int" = "0" \
526    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
527     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
528 fi
529
530 dnl Checks for library functions.
531 AC_FUNC_FSEEKO
532 AC_FUNC_VPRINTF
533 AC_FUNC_FORK
534 AC_CHECK_FUNCS(strerror stpcpy strsep strlwr tcgetattr strtoul mmap)
535 AC_CHECK_FUNCS(strcasecmp strncasecmp hstrerror)
536 AC_CHECK_FUNCS(memmove gettimeofday getrusage setrlimit clock_gettime)
537 AC_CHECK_FUNCS(atexit raise getpagesize strftime nl_langinfo setlocale)
538 AC_CHECK_FUNCS(waitpid wait4 sigaction sigprocmask rand pipe stat)
539 AC_REPLACE_FUNCS(mkdtemp)
540
541 #
542 # check for gethrtime and run a testprogram to see whether
543 # it is broken.  It has been reported that some Solaris and HP UX systems 
544 # raise an SIGILL
545 #
546 AC_CACHE_CHECK([for gethrtime], 
547                [gnupg_cv_func_gethrtime],
548                [AC_TRY_LINK([#include <sys/times.h>],[
549                    hrtime_t tv;
550                    tv = gethrtime();
551                  ],
552                  [gnupg_cv_func_gethrtime=yes],
553                  [gnupg_cv_func_gethrtime=no])
554                ])
555 if test $gnupg_cv_func_gethrtime = yes; then
556      AC_DEFINE([HAVE_GETHRTIME], 1,
557                [Define if you have the `gethrtime(2)' function.])
558      AC_CACHE_CHECK([whether gethrtime is broken], 
559                [gnupg_cv_func_broken_gethrtime],
560                [AC_TRY_RUN([
561                    #include <sys/times.h>
562                    int main () {
563                    hrtime_t tv;
564                    tv = gethrtime(); 
565                  }
566                  ],
567                  [gnupg_cv_func_broken_gethrtime=no],
568                  [gnupg_cv_func_broken_gethrtime=yes],
569                  [gnupg_cv_func_broken_gethrtime=assume-no])
570                 ])
571     if test $gnupg_cv_func_broken_gethrtime = yes; then
572       AC_DEFINE([HAVE_BROKEN_GETHRTIME], 1,
573       [Define if `gethrtime(2)' does not work correctly i.e. issues a SIGILL.])
574     fi
575 fi
576      
577
578 GNUPG_CHECK_MLOCK
579 GNUPG_FUNC_MKDIR_TAKES_ONE_ARG
580
581 dnl
582 dnl Check whether we can use Linux capabilities as requested
583 dnl
584 if test "$use_capabilities" = "yes" ; then
585 use_capabilities=no
586 AC_CHECK_HEADERS(sys/capability.h)
587 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
588   AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
589   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
590      AC_DEFINE(USE_CAPABILITIES,1,
591                [define if capabilities should be used])
592      LIBS="$LIBS -lcap"
593      use_capabilities=yes
594   fi
595 fi
596 if test "$use_capabilities" = "no" ; then
597     AC_MSG_WARN([[
598 ***
599 *** The use of capabilities on this system is not possible.
600 *** You need a recent Linux kernel and some patches:
601 ***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
602 ***   fcap-module-990613.tar.gz     (kernel module)
603 ***   libcap-1.92.tar.gz            (user mode library and utilities)
604 *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
605 *** set (filesystems menu). Be warned: This code is *really* ALPHA.
606 ***]])
607 fi
608 fi
609
610
611 GNUPG_CHECK_IPC
612 if test "$ac_cv_header_sys_shm_h" = "yes"; then
613   AC_DEFINE(USE_SHM_COPROCESSING,1,
614             [define if the shared memory interface should be made available])
615 fi
616
617 dnl
618 dnl check whether we have a random device
619 dnl
620 if test "$try_dev_random" = yes ; then
621     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
622     [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
623       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
624     if test "$ac_cv_have_dev_random" = yes; then
625         AC_DEFINE(HAVE_DEV_RANDOM,1,
626                  [defined if the system supports a random device] )
627     fi
628 else
629     AC_MSG_CHECKING(for random device)
630     ac_cv_have_dev_random=no
631     AC_MSG_RESULT(has been disabled)
632 fi
633
634
635 dnl
636 dnl Figure out the default random module.
637 dnl
638 static_random_module=""
639 if test "$use_static_rnd" = default; then
640   if test "$ac_cv_have_dev_random" = yes; then
641       static_random_module="rndlinux"
642   else
643       case "${target}" in
644           *-*-mingw32*|*-*-cygwin*)
645               static_random_module="rndw32"
646               ;;
647           i?86-emx-os2|i?86-*-os2*emx)
648               static_random_module="rndos2"
649               ;;
650           m68k-atari-mint)
651               static_random_module="rndatari"
652               ;;
653           i?86-*-msdosdjgpp*)
654               :
655               ;;
656           *)
657               static_random_module="rndunix"
658              ;;
659       esac
660   fi
661 fi
662 case "$static_random_module" in
663   rndlinux)
664       AC_DEFINE(USE_RNDLINUX,1, 
665                   [Defined if the /dev/random based RNG shoudl be used.])
666         ;;
667   rndunix)
668        AC_DEFINE(USE_RNDUNIX,1, 
669                   [Defined if the default Unix RNG should be used.])
670        AC_MSG_WARN([[
671 ***
672 *** The performance of the UNIX random gatherer module is not very good
673 *** and it does not keep the entropy pool over multiple invocations of
674 *** GnuPG.  The suggested way to overcome this problem is to use the
675 ***
676 ***               Entropy Gathering Daemon (EGD)
677 ***
678 *** which provides a entropy source for the whole system.  It is written
679 *** in Perl and available at the GnuPG FTP servers.  For more information
680 *** consult the GnuPG webpages:
681 ***
682 ***           http://www.gnupg.org/download.html#egd
683 ***
684 *** You may want to run ./configure with --enable-static-rnd=egd to use it.
685 ***]])
686         ;;
687   rndegd)
688        AC_DEFINE(USE_RNDEGD,1, 
689                   [Defined if the EGD based RNG shoudl be used.])
690         ;;
691   rndw32)
692        AC_DEFINE(USE_RNDW32,1, 
693                   [Defined if the Windows specific RNG should be used.])
694         ;;
695    *)
696        AC_MSG_ERROR(no random module available)
697         ;;
698 esac
699
700 dnl setup assembler stuff
701 AC_MSG_CHECKING(for mpi assembler functions)
702 if test -f $srcdir/mpi/config.links ; then
703     . $srcdir/mpi/config.links
704     AC_CONFIG_LINKS("$mpi_ln_list")
705     ac_cv_mpi_extra_asm_modules="$mpi_extra_modules"
706     ac_cv_mpi_sflags="$mpi_sflags"
707     ac_cv_mpi_config_done="yes"
708     AC_MSG_RESULT(done)
709 else
710     AC_MSG_RESULT(failed)
711     AC_MSG_ERROR([mpi/config.links missing!])
712 fi
713 MPI_EXTRA_ASM_OBJS=""
714 show_extraasm=""
715 if test "$ac_cv_mpi_extra_asm_modules" != ""; then
716 for i in $ac_cv_mpi_extra_asm_modules; do
717     show_extraasm="$show_extraasm $i"
718     MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o"
719 done
720 fi
721 AC_SUBST(MPI_EXTRA_ASM_OBJS)
722 MPI_SFLAGS="$ac_cv_mpi_sflags"
723 AC_SUBST(MPI_SFLAGS)
724
725 dnl Do we have zlib? Must do it here because Solaris failed
726 dnl when compiling a conftest (due to the "-lz" from LIBS).
727 use_local_zlib=yes
728 if test "$g10_force_zlib" = "yes"; then
729   :
730 else
731   _cppflags="${CPPFLAGS}"
732   _ldflags="${LDFLAGS}"
733
734   AC_ARG_WITH(zlib,
735   [  --with-zlib=DIR         use libz in DIR],[
736     if test -d "$withval"; then
737       CPPFLAGS="${CPPFLAGS} -I$withval/include"
738       LDFLAGS="${LDFLAGS} -L$withval/lib"
739     fi
740   ])
741
742   AC_CHECK_HEADER(zlib.h,
743       AC_CHECK_LIB(z, deflateInit2_,
744        use_local_zlib=no
745        LIBS="$LIBS -lz",
746        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
747        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags})
748 fi
749  
750 if test "$use_local_zlib" = yes ; then
751     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
752     AC_CONFIG_LINKS(zlib.h:zlib/zlib.h zconf.h:zlib/zconf.h )
753     ZLIBS="../zlib/libzlib.a"
754 else
755     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, false)
756     ZLIBS=
757 fi
758 AC_SUBST(ZLIBS)
759
760
761 # Allow users to append something to the version string without
762 # flagging it as development version.  The user version parts is
763 # considered everything after a dash. 
764 if test "$development_version" != yes; then
765   changequote(,)dnl
766   tmp_pat='[a-zA-Z]'
767   changequote([,])dnl
768   if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
769     development_version=yes
770   fi
771 fi
772 if test "$development_version" = yes; then
773     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
774             [Defined if this is not a regular release])
775 fi
776
777 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
778
779 GNUPG_CHECK_GNUMAKE
780
781 # add some extra libs here so that previous tests don't fail for
782 # mysterious reasons - the final link step should bail out. 
783 case "${target}" in
784     *-*-mingw32*)
785         LIBS="$LIBS -lwsock32"
786         ;;
787     *)
788        ;;
789 esac
790
791
792 if test "$GCC" = yes; then
793     if test "$USE_MAINTAINER_MODE" = "yes"; then
794         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
795     else
796         CFLAGS="$CFLAGS -Wall"
797     fi
798 fi
799
800 AC_SUBST(NETLIBS)
801
802 # Note the \\\\ for backslashes.  Autoconf eats one layer, leaving \\
803
804 AC_SUBST(GNUPG_LIBEXECDIR,"${libexecdir}/gnupg")
805
806 AC_CONFIG_COMMANDS(g10defs.h,[[
807 cat >g10defs.tmp <<G10EOF
808 /* Generated automatically by configure */
809 #ifdef HAVE_DRIVE_LETTERS
810   #define G10_LOCALEDIR     "c:\\\\lib\\\\gnupg\\\\locale"
811   #define GNUPG_LIBDIR      "c:\\\\lib\\\\gnupg"
812   #define GNUPG_LIBEXECDIR  "c:\\\\lib\\\\gnupg"
813   #define GNUPG_DATADIR     "c:\\\\lib\\\\gnupg"
814   #define GNUPG_HOMEDIR     "c:\\\\gnupg"
815 #else
816   #define G10_LOCALEDIR     "${datadir}/locale"
817   #define GNUPG_LIBDIR      "${libdir}/gnupg"
818   #define GNUPG_LIBEXECDIR  "${libexecdir}/gnupg"
819   #define GNUPG_DATADIR     "${datadir}/gnupg"
820   #ifdef __VMS
821     #define GNUPG_HOMEDIR "/SYS\$LOGIN/gnupg" 
822   #else
823     #define GNUPG_HOMEDIR "~/.gnupg" 
824   #endif
825 #endif
826 /* those are here to be redefined by handcrafted g10defs.h.
827    Please note that the string version must not contain more
828    than one character because the using code assumes strlen()==1 */
829 #ifdef HAVE_DOSISH_SYSTEM
830 #define DIRSEP_C '\\\\'
831 #define EXTSEP_C '.'
832 #define DIRSEP_S "\\\\"
833 #define EXTSEP_S "."
834 #else
835 #define DIRSEP_C '/'
836 #define EXTSEP_C '.'
837 #define DIRSEP_S "/"
838 #define EXTSEP_S "."
839 #endif
840 G10EOF
841 cat mpi/mpi-asm-defs.h >>g10defs.tmp 
842 if cmp -s g10defs.h g10defs.tmp 2>/dev/null; then
843     echo "g10defs.h is unchanged"
844     rm -f g10defs.tmp
845 else
846     rm -f g10defs.h
847     mv g10defs.tmp g10defs.h
848     echo "g10defs.h created"
849 fi
850 ]],[[
851 prefix=$prefix
852 exec_prefix=$exec_prefix
853 libdir=$libdir
854 libexecdir=$libexecdir
855 datadir=$datadir
856 DATADIRNAME=$DATADIRNAME
857 ]])
858
859
860 AC_CONFIG_FILES([
861 Makefile
862 intl/Makefile
863 po/Makefile.in
864 util/Makefile
865 mpi/Makefile
866 cipher/Makefile
867 g10/Makefile
868 keyserver/Makefile
869 keyserver/gpgkeys_mailto
870 keyserver/gpgkeys_test
871 doc/Makefile
872 tools/Makefile
873 zlib/Makefile
874 checks/Makefile
875 ])
876 AC_OUTPUT
877
878 # Give some feedback
879 echo
880 echo   "                Configured for: $PRINTABLE_OS_NAME ($target)"
881 if test -n "$show_extraasm"; then
882   echo "  Extra cpu specific functions:$show_extraasm"
883 fi
884 echo