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