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