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