2003-08-19 Marcus Brinkmann <marcus@g10code.de>
[gnupg.git] / configure.ac
1 # configure.ac - for GnuPG 1.9
2 # Copyright (C) 1998, 1999, 2000, 2001, 2002,
3 #               2003 Free Software Foundation, Inc.
4
5 # This file is part of GnuPG.
6
7 # GnuPG is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
11
12 # GnuPG is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU General Public License for more details.
16
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
20
21 # Process this file with autoconf to produce a configure script.
22 AC_PREREQ(2.52)
23 # Version number: Remember to change it immediately *after* a release.
24 #                 Add a "-cvs" prefix for non-released code.
25 AC_INIT(gnupg, 1.9.1-cvs, gnupg-devel@gnupg.org)
26 # Set development_version to yes if the minor number is odd or you
27 # feel that the default check for a development version is not
28 # sufficient.
29 development_version=yes
30 NEED_GPG_ERROR_VERSION=0.2
31 NEED_LIBGCRYPT_VERSION=1.1.42
32 NEED_LIBASSUAN_VERSION=0.6.0
33 NEED_KSBA_VERSION=0.4.6
34 NEED_OPENSC_VERSION=0.7.0
35
36
37 PACKAGE=$PACKAGE_NAME
38 VERSION=$PACKAGE_VERSION
39
40 AM_GNU_GETTEXT_VERSION(0.11.5)
41
42 AC_CONFIG_AUX_DIR(scripts)
43 AC_CONFIG_SRCDIR(sm/gpgsm.c)
44 AM_CONFIG_HEADER(config.h)
45 AC_CANONICAL_TARGET()
46 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
47
48 AC_GNU_SOURCE
49
50 # Some status variables to give feedback at the end of a configure run
51 have_gpg_error=no
52 have_libgcrypt=no 
53 have_libassuan=no
54 have_ksba=no
55 have_opensc=no
56 have_pth=no
57
58 GNUPG_BUILD_PROGRAM(gpg, yes)
59 GNUPG_BUILD_PROGRAM(gpgsm, yes)
60 GNUPG_BUILD_PROGRAM(agent, yes)
61 GNUPG_BUILD_PROGRAM(scdaemon, yes)
62
63
64 AC_SUBST(PACKAGE)
65 AC_SUBST(VERSION)
66 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
67 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
68 AC_DEFINE_UNQUOTED(PACKAGE_BUGREPORT, "$PACKAGE_BUGREPORT",
69                                         [Bug report address])
70 AC_DEFINE_UNQUOTED(NEED_LIBGCRYPT_VERSION, "$NEED_LIBGCRYPT_VERSION",
71                                        [Required version of Libgcrypt])
72 AC_DEFINE_UNQUOTED(NEED_KSBA_VERSION, "$NEED_KSBA_VERSION",
73                                        [Required version of Libksba])
74
75
76
77
78 # I know that it is in general not a good idea to evaluate bindir in
79 # the configuration but we want to hard code the defaults into some of
80 # the programs and doing this during a make install is not a good
81 # idea.  We also have the problem that 2 of the programs are included
82 # in the package but the others are distributed in other packages.
83 eval my_default_bindir=${exec_prefix}
84 test "x${my_default_bindir}" = xNONE && my_default_bindir=${ac_default_prefix}
85 my_default_bindir=${my_default_bindir}/bin
86
87 # Same goes for the pkglibdir which is used to call the gpg-protect-tool.
88 eval my_default_pkglibdir=${exec_prefix}
89 test "x${my_default_pkglibdir}" = xNONE && my_default_pkglibdir=${ac_default_prefix}
90 my_default_pkglibdir=${my_default_pkglibdir}/lib/${PACKAGE_NAME}
91
92 AC_ARG_WITH(agent-pgm,
93     [  --with-agent-pgm=PATH  Use PATH as the default for the gpg-agent)],
94           gnupg_agent_pgm="$withval",
95           gnupg_agent_pgm="${my_default_bindir}/gpg-agent" )
96 AC_DEFINE_UNQUOTED(GNUPG_DEFAULT_AGENT, "$gnupg_agent_pgm",
97                    [Default location of the gpg-agent program])
98 AC_ARG_WITH(pinentry-pgm,
99     [  --with-pinentry-pgm=PATH  Use PATH as the default for the pinentry)],
100           gnupg_pinentry_pgm="$withval", gnupg_pinentry_pgm="" )
101 if test -z "$gnupg_pinentry_pgm"; then
102   gnupg_pinentry_pgm=${my_default_bindir}/pinentry
103 fi
104 AC_DEFINE_UNQUOTED(GNUPG_DEFAULT_PINENTRY, "$gnupg_pinentry_pgm",
105                    [Default location of the pinentry program])
106 AC_ARG_WITH(scdaemon-pgm,
107     [  --with-scdaemon-pgm=PATH  Use PATH as the default for the scdaemon)],
108           gnupg_scdaemon_pgm="$withval", gnupg_scdaemon_pgm="" )
109 if test -z "$gnupg_scdaemon_pgm"; then
110   gnupg_scdaemon_pgm=${my_default_bindir}/scdaemon
111 fi
112 AC_DEFINE_UNQUOTED(GNUPG_DEFAULT_SCDAEMON, "$gnupg_scdaemon_pgm",
113                    [Default location of the scdaemon program])
114 AC_ARG_WITH(dirmngr-pgm,
115     [  --with-dirmngr-pgm=PATH  Use PATH as the default for the dirmngr)],
116           gnupg_dirmngr_pgm="$withval", gnupg_dirmngr_pgm="" )
117 if test -z "$gnupg_dirmngr_pgm"; then
118   gnupg_dirmngr_pgm=${my_default_bindir}/dirmngr
119 fi
120 AC_DEFINE_UNQUOTED(GNUPG_DEFAULT_DIRMNGR, "$gnupg_dirmngr_pgm",
121                    [Default location of the dirmngr program])
122
123 AC_ARG_WITH(protect-tool,
124     [  --with-protect-tool=PATH  Use PATH as the protect-tool)],
125           gnupg_protect_tool="$withval", gnupg_protect_tool="" )
126 if test -z "$gnupg_protect_tool"; then
127   gnupg_protect_tool=${my_default_pkglibdir}/gpg-protect-tool
128 fi
129 AC_DEFINE_UNQUOTED(GNUPG_PROTECT_TOOL, "$gnupg_protect_tool",
130                    [Name of the protect tool program])
131
132
133
134 AC_MSG_CHECKING([whether to enable external program execution])
135 AC_ARG_ENABLE(exec,
136     AC_HELP_STRING([--disable-exec],[disable all external program execution]),
137     use_exec=$enableval)
138 AC_MSG_RESULT($use_exec)
139 if test "$use_exec" = no ; then
140     AC_DEFINE(NO_EXEC,1,[Define to disable all external program execution])
141 fi
142
143 if test "$use_exec" = yes ; then
144   AC_MSG_CHECKING([whether to enable photo ID viewing])
145   AC_ARG_ENABLE(photo-viewers,
146       [  --disable-photo-viewers disable photo ID viewers],
147       [if test "$enableval" = no ; then
148          AC_DEFINE(DISABLE_PHOTO_VIEWER,1,[define to disable photo viewing])
149       fi],enableval=yes)
150   gnupg_cv_enable_photo_viewers=$enableval
151   AC_MSG_RESULT($enableval)
152
153   if test "$gnupg_cv_enable_photo_viewers" = yes ; then
154     AC_MSG_CHECKING([whether to use a fixed photo ID viewer])
155     AC_ARG_WITH(photo-viewer,
156         [  --with-photo-viewer=FIXED_VIEWER  set a fixed photo ID viewer],
157         [if test "$withval" = yes ; then
158            withval=no
159         elif test "$withval" != no ; then
160            AC_DEFINE_UNQUOTED(FIXED_PHOTO_VIEWER,"$withval",
161                             [if set, restrict photo-viewer to this])
162         fi],withval=no)
163     AC_MSG_RESULT($withval)
164   fi
165
166   AC_MSG_CHECKING([whether to enable external keyserver helpers])
167   AC_ARG_ENABLE(keyserver-helpers,
168       [  --disable-keyserver-helpers  disable all external keyserver support],
169       [if test "$enableval" = no ; then
170          AC_DEFINE(DISABLE_KEYSERVER_HELPERS,1,
171                   [define to disable keyserver helpers])
172       fi],enableval=yes)
173   gnupg_cv_enable_keyserver_helpers=$enableval
174   AC_MSG_RESULT($enableval)
175
176   if test "$gnupg_cv_enable_keyserver_helpers" = yes ; then
177     AC_MSG_CHECKING([whether LDAP keyserver support is requested])
178     AC_ARG_ENABLE(ldap,
179     [  --disable-ldap          disable LDAP keyserver interface],
180         try_ldap=$enableval, try_ldap=yes)
181     AC_MSG_RESULT($try_ldap)
182
183     AC_MSG_CHECKING([whether HKP keyserver support is requested])
184     AC_ARG_ENABLE(hkp,
185     [  --disable-hkp           disable HKP keyserver interface],
186         try_hkp=$enableval, try_hkp=yes)
187     AC_MSG_RESULT($try_hkp)
188
189     if test "$try_hkp" = yes ; then
190       AC_SUBST(GPGKEYS_HKP,"gpgkeys_hkp$EXEEXT")
191     fi
192
193     AC_MSG_CHECKING([whether email keyserver support is requested])
194     AC_ARG_ENABLE(mailto,
195     [  --disable-mailto        disable email keyserver interface],
196         try_mailto=$enableval, try_mailto=yes)
197     AC_MSG_RESULT($try_mailto)
198     fi
199
200     AC_MSG_CHECKING([whether keyserver exec-path is enabled])
201     AC_ARG_ENABLE(keyserver-path,
202         [  --disable-keyserver-path disable the exec-path option for keyserver helpers],
203         [if test "$enableval" = no ; then
204          AC_DEFINE(DISABLE_KEYSERVER_PATH,1,[define to disable exec-path for keyserver helpers])
205         fi],enableval=yes)
206     AC_MSG_RESULT($enableval)
207   fi
208
209 AC_MSG_CHECKING([whether the included zlib is requested])
210 AC_ARG_WITH(included-zlib,
211     [  --with-included-zlib    use the zlib code included here],
212 [g10_force_zlib=yes], [g10_force_zlib=no] )
213 AC_MSG_RESULT($g10_force_zlib)
214
215 dnl
216 dnl Check whether we want to use Linux capabilities
217 dnl
218 AC_MSG_CHECKING([whether use of capabilities is requested])
219 AC_ARG_WITH(capabilities,
220     [  --with-capabilities     use linux capabilities [default=no]],
221 [use_capabilities="$withval"],[use_capabilities=no])
222 AC_MSG_RESULT($use_capabilities)
223
224
225 AH_BOTTOM([
226 /* Some global constants. */
227 #ifdef HAVE_DRIVE_LETTERS
228 #define GNUPG_DEFAULT_HOMEDIR "c:/gnupg"
229 #else
230 #define GNUPG_DEFAULT_HOMEDIR "~/.gnupg"
231 #endif 
232 #define GNUPG_PRIVATE_KEYS_DIR "private-keys-v1.d"
233
234 #if !(defined(HAVE_FORK) && defined(HAVE_PIPE) && defined(HAVE_WAITPID))
235 #define EXEC_TEMPFILE_ONLY
236 #endif
237
238 /* Tell libgcrypt not to use its own libgpg-error implementation. */
239 #define USE_LIBGPG_ERROR 1
240
241 #include "g10defs.h"
242
243 ])
244
245 AM_MAINTAINER_MODE
246
247 # Checks for programs.
248 AC_PROG_MAKE_SET
249 AM_SANITY_CHECK
250 missing_dir=`cd $ac_aux_dir && pwd`
251 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
252 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
253 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
254 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
255 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
256 AC_PROG_AWK
257 AC_PROG_CC
258 AC_PROG_CPP
259 AC_PROG_INSTALL
260 AC_PROG_LN_S
261 AC_PROG_MAKE_SET
262 AC_PROG_RANLIB
263 AC_CHECK_TOOL(AR, ar, :)
264 AC_PATH_PROG(PERL,"perl")
265 AC_ISC_POSIX
266 AC_SYS_LARGEFILE
267 AC_CHECK_PROG(DOCBOOK_TO_MAN, docbook-to-man, yes, no)
268 AM_CONDITIONAL(HAVE_DOCBOOK_TO_MAN, test "$ac_cv_prog_DOCBOOK_TO_MAN" = yes)
269 GNUPG_CHECK_FAQPROG
270 GNUPG_CHECK_DOCBOOK_TO_TEXI
271
272
273 try_gettext=yes
274 have_dosish_system=no
275 case "${target}" in
276     *-*-mingw32*)
277         # special stuff for Windoze NT
278         ac_cv_have_dev_random=no
279         AC_DEFINE(USE_ONLY_8DOT3,1,
280                   [set this to limit filenames to the 8.3 format])
281         AC_DEFINE(HAVE_DRIVE_LETTERS,1,
282                   [defined if we must run on a stupid file system])
283         AC_DEFINE(USE_SIMPLE_GETTEXT,1,
284                   [because the Unix gettext has too much overhead on
285                    MingW32 systems and these systems lack Posix functions,
286                    we use a simplified version of gettext])
287         have_dosish_system=yes
288         try_gettext="no"
289         ;;
290     i?86-emx-os2 | i?86-*-os2*emx )
291         # OS/2 with the EMX environment
292         ac_cv_have_dev_random=no
293         AC_DEFINE(HAVE_DRIVE_LETTERS)
294         have_dosish_system=yes
295         try_gettext="no"
296         ;;
297
298     i?86-*-msdosdjgpp*)
299         # DOS with the DJGPP environment
300         ac_cv_have_dev_random=no
301         AC_DEFINE(HAVE_DRIVE_LETTERS)
302         have_dosish_system=yes
303         try_gettext="no"
304         ;;
305
306     *-*-freebsd*)
307        # FreeBSD
308        CPPFLAGS="$CPPFLAGS -I/usr/local/include"
309        LDFLAGS="$LDFLAGS -L/usr/local/lib"
310        ;;
311
312     *-*-hpux*)
313         if test -z "$GCC" ; then
314             CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
315         fi
316         ;;
317     *-dec-osf4*)
318         if test -z "$GCC" ; then
319             # Suppress all warnings
320             # to get rid of the unsigned/signed char mismatch warnings.
321             CFLAGS="$CFLAGS -w"
322         fi
323         ;;
324     *-dec-osf5*)
325         if test -z "$GCC" ; then
326             # Use the newer compiler `-msg_disable ptrmismatch' to
327             # get rid of the unsigned/signed char mismatch warnings.
328             # Using this may hide other pointer mismatch warnings, but
329             # it at least lets other warning classes through
330             CFLAGS="$CFLAGS -msg_disable ptrmismatch"
331         fi
332         ;;
333     m68k-atari-mint)
334         ;;
335     *)
336        ;;
337 esac
338
339 if test "$have_dosish_system" = yes; then
340    AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
341              [defined if we run on some of the PCDOS like systems 
342               (DOS, Windoze. OS/2) with special properties like
343               no file modes])
344 fi
345 AM_CONDITIONAL(HAVE_DOSISH_SYSTEM, test "$have_dosish_system" = yes)
346
347
348 #
349 # Checks for libraries.
350 #
351
352 #
353 # libgpg-error is a library with error codes shared between GnuPG
354 # related projects.
355 #
356 AM_PATH_GPG_ERROR("$NEED_GPG_ERROR_VERSION",
357                   have_gpg_error=yes,have_gpg_error=no)
358
359
360 #
361 # Libgcrypt is our generic crypto library
362 #
363 AM_PATH_LIBGCRYPT("$NEED_LIBGCRYPT_VERSION",
364         have_libgcrypt=yes,have_libgcrypt=no)
365
366
367 #
368 # libassuan is used for IPC
369 #
370 AM_PATH_LIBASSUAN("$NEED_LIBASSUAN_VERSION",
371                   have_libassuan=yes,have_libassuan=no)
372
373
374 #
375 # libksba is our X.509 support library
376 #
377 AM_PATH_KSBA("$NEED_KSBA_VERSION",have_ksba=yes,have_ksba=no)
378
379
380 #
381 # OpenSC is needed by the SCdaemon - if it is not availbale we can only
382 # build a limited SCdaemon
383 #
384 AM_PATH_OPENSC("$NEED_OPENSC_VERSION",have_opensc=yes,have_opensc=no)
385 if test $have_opensc = yes; then
386   AC_DEFINE(HAVE_OPENSC,1,
387             [defined if the OpenSC library is available])
388 fi
389
390
391 #
392 # Check whether the (highly desirable) GNU Pth library is available
393 #
394 AC_ARG_WITH(pth-prefix,
395             AC_HELP_STRING([--with-pth-prefix=PFX],
396                            [prefix where GNU Pth is installed (optional)]),
397      pth_config_prefix="$withval", pth_config_prefix="")
398 if test x$pth_config_prefix != x ; then
399    PTH_CONFIG="$pth_config_prefix/bin/pth-config"
400 fi
401 AC_PATH_PROG(PTH_CONFIG, pth-config, no)
402 if test "$PTH_CONFIG" = "no"; then
403     AC_MSG_WARN([[
404 ***
405 *** To support concurrent access to the gpg-agent and the SCdaemon
406 *** we need the support of the GNU Portable Threads Library.
407 *** Download it from ftp://ftp.gnu.org/gnu/pth/
408 *** On a Debian GNU/Linux system you might want to try 
409 ***   apt-get install libpth-dev
410 ***]])
411 else
412   GNUPG_PTH_VERSION_CHECK(1.3.7)
413   if test $have_pth = yes; then      
414      PTH_CFLAGS=`$PTH_CONFIG --cflags`
415      PTH_LIBS=`$PTH_CONFIG --ldflags`
416      PTH_LIBS="$PTH_LIBS `$PTH_CONFIG --libs`"
417      AC_DEFINE(USE_GNU_PTH, 1,
418               [Defined if the GNU Portable Thread Library should be used])
419   fi
420 fi
421 AC_SUBST(PTH_CFLAGS)
422 AC_SUBST(PTH_LIBS)
423
424
425 dnl Must check for network library requirements before doing link tests
426 dnl for ldap, for example. If ldap libs are static (or dynamic and without
427 dnl ELF runtime link paths), then link will fail and LDAP support won't
428 dnl be detected.
429
430 AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname,
431         [NETLIBS="-lnsl $NETLIBS"]))
432 AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt,
433         [NETLIBS="-lsocket $NETLIBS"]))
434
435 dnl Now try for the resolver functions so we can use DNS SRV
436
437 AC_ARG_ENABLE(dns-srv,
438    AC_HELP_STRING([--disable-dns-srv],[disable the use of DNS SRV in HKP]),
439    use_dns_srv=$enableval,use_dns_srv=yes)
440
441 if test x"$try_hkp" = xyes && test x"$use_dns_srv" = xyes ; then
442   _srv_save_libs=$LIBS
443   LIBS=""
444   # the double underscore thing is a glibc-ism?
445   AC_SEARCH_LIBS(res_query,resolv bind,,
446                  AC_SEARCH_LIBS(__res_query,resolv bind,,use_dns_srv=no))
447   AC_SEARCH_LIBS(dn_expand,resolv bind,,
448                  AC_SEARCH_LIBS(__dn_expand,resolv bind,,use_dns_srv=no))
449   AC_SEARCH_LIBS(dn_skipname,resolv bind,,
450                  AC_SEARCH_LIBS(__dn_skipname,resolv bind,,use_dns_srv=no))
451
452   if test x"$use_dns_srv" = xyes ; then
453      AC_DEFINE(USE_DNS_SRV,1,[define to use DNS SRV])
454      SRVLIBS=$LIBS
455   else
456      AC_MSG_WARN([Resolver functions not found.  Disabling DNS SRV.])
457   fi
458   LIBS=$_srv_save_libs
459 fi
460
461 AC_SUBST(SRVLIBS)
462
463 # Try and link a LDAP test program to weed out unusable LDAP
464 # libraries.  -lldap [-llber [-lresolv]] is for OpenLDAP.  OpenLDAP in
465 # general is terrible with creating weird dependencies.  If all else
466 # fails, the user can play guess-the-dependency by using something
467 # like ./configure LDAPLIBS="-Lfoo -lbar"
468
469 if test "$try_ldap" = yes ; then
470   for MY_LDAPLIBS in ${LDAPLIBS+"$LDAPLIBS"} "-lldap" "-lldap -llber" "-lldap -llber -lresolv"; do
471     _ldap_save_libs=$LIBS
472     LIBS="$MY_LDAPLIBS $NETLIBS $LIBS"
473
474     AC_MSG_CHECKING([whether LDAP via \"$MY_LDAPLIBS\" is present and sane])
475     AC_TRY_LINK([#include <ldap.h>],[ldap_open("foobar",1234);],
476                 [gnupg_cv_func_ldap_init=yes],[gnupg_cv_func_ldap_init=no])
477     AC_MSG_RESULT([$gnupg_cv_func_ldap_init])
478
479     if test $gnupg_cv_func_ldap_init = no; then
480       AC_MSG_CHECKING([whether I can make LDAP be sane with lber.h])
481       AC_TRY_LINK([#include <lber.h>
482 #include <ldap.h>],[ldap_open("foobar",1234);],
483          [gnupg_cv_func_ldaplber_init=yes],[gnupg_cv_func_ldaplber_init=no])
484       AC_MSG_RESULT([$gnupg_cv_func_ldaplber_init])
485     fi
486
487     if test "$gnupg_cv_func_ldaplber_init" = yes ; then
488        AC_DEFINE(NEED_LBER_H,1,[Define if the LDAP library requires including lber.h before ldap.h])
489     fi
490
491     if test "$gnupg_cv_func_ldap_init" = yes || \
492         test "$gnupg_cv_func_ldaplber_init" = yes ; then
493        LDAPLIBS=$MY_LDAPLIBS
494        GPGKEYS_LDAP="gpgkeys_ldap$EXEEXT"
495
496        AC_MSG_CHECKING([whether LDAP supports ldap_get_option])
497
498        if test "$gnupg_cv_func_ldap_init" = yes ; then
499           AC_TRY_LINK([#include <ldap.h>],
500              [ldap_get_option((void *)0,0,(void *)0);],
501              [gnupg_cv_func_ldap_get_option=yes],
502              [gnupg_cv_func_ldap_get_option=no])
503         else
504           AC_TRY_LINK([#include <lber.h>
505 #include <ldap.h>],[ldap_get_option((void *)0,0,(void *)0);],
506              [gnupg_cv_func_ldap_get_option=yes],
507              [gnupg_cv_func_ldap_get_option=no])
508        fi
509
510        AC_MSG_RESULT([$gnupg_cv_func_ldap_get_option])
511
512        if test "$gnupg_cv_func_ldap_get_option" = yes ; then
513           AC_DEFINE(HAVE_LDAP_GET_OPTION,1,[Define if the LDAP library has ldap_get_option])
514        else
515           AC_MSG_CHECKING([whether LDAP supports ld_errno])
516
517           if test "$gnupg_cv_func_ldap_init" = yes ; then
518             AC_TRY_COMPILE([#include <ldap.h>],
519                [LDAP *ldap; ldap->ld_errno;],
520                [gnupg_cv_func_ldap_ld_errno=yes],
521                [gnupg_cv_func_ldap_ld_errno=no])
522            else
523             AC_TRY_LINK([#include <lber.h>
524 #include <ldap.h>],[LDAP *ldap; ldap->ld_errno;],
525                [gnupg_cv_func_ldap_ld_errno=yes],
526                [gnupg_cv_func_ldap_ld_errno=no])
527           fi
528
529           AC_MSG_RESULT([$gnupg_cv_func_ldap_ld_errno])
530
531           if test "$gnupg_cv_func_ldap_ld_errno" = yes ; then
532              AC_DEFINE(HAVE_LDAP_LD_ERRNO,1,[Define if the LDAP library supports ld_errno])
533           fi
534        fi
535     fi
536
537     LIBS=$_ldap_save_libs
538
539     if test "$GPGKEYS_LDAP" != "" ; then break; fi
540   done
541 fi
542
543 AC_SUBST(GPGKEYS_LDAP)
544 AC_SUBST(LDAPLIBS)
545
546 dnl This isn't necessarily sendmail itself, but anything that gives a
547 dnl sendmail-ish interface to the outside world.  That includes qmail,
548 dnl postfix, etc.  Basically, anything that can handle "sendmail -t".
549
550 if test "$try_mailto" = yes ; then
551   AC_ARG_WITH(mailprog,[  --with-mailprog=NAME    use "NAME -t" for mail transport],,with_mailprog=yes)
552
553   if test "$with_mailprog" = yes ; then
554     AC_PATH_PROG(SENDMAIL,sendmail,,$PATH:/usr/sbin:/usr/libexec:/usr/lib)
555     if test "$ac_cv_path_SENDMAIL" ; then
556       GPGKEYS_MAILTO="gpgkeys_mailto"
557     fi
558   elif test "$with_mailprog" != no ; then
559     AC_MSG_CHECKING([for a mail transport program])
560     AC_SUBST(SENDMAIL,$with_mailprog)
561     AC_MSG_RESULT($with_mailprog)
562     GPGKEYS_MAILTO="gpgkeys_mailto"
563   fi
564 fi
565
566 AC_SUBST(GPGKEYS_MAILTO)
567
568 case "${target}" in
569     *-*-mingw32*)
570         PRINTABLE_OS_NAME="MingW32"
571         ;;
572     *-*-cygwin*)
573         PRINTABLE_OS_NAME="Cygwin"
574         ;;
575     i?86-emx-os2 | i?86-*-os2*emx )
576         PRINTABLE_OS_NAME="OS/2"
577         ;;
578     i?86-*-msdosdjgpp*)
579         PRINTABLE_OS_NAME="MSDOS/DJGPP"
580         try_dynload=no
581         ;;
582     *-linux*)
583         PRINTABLE_OS_NAME="GNU/Linux"
584         ;;
585 dnl let that after linux to avoid gnu-linux problems
586     *-gnu*)
587         PRINTABLE_OS_NAME="GNU/Hurd"
588         ;;
589     *)
590         PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
591         ;;
592 esac
593 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
594                    [A human readable text with the name of the OS])
595
596
597 if test "$try_gettext" = yes; then
598   AM_GNU_GETTEXT(,[need-ngettext])
599
600   # gettext requires some extra checks.  These really should be part of
601   # the basic AM_GNU_GETTEXT macro.  TODO: move other gettext-specific
602   # function checks to here.
603
604   AC_CHECK_FUNCS(strchr)
605 else
606   USE_NLS=no
607   USE_INCLUDED_LIBINTL=no
608   BUILD_INCLUDED_LIBINTL=no
609   AC_SUBST(USE_NLS)
610   AC_SUBST(USE_INCLUDED_LIBINTL)
611   AC_SUBST(BUILD_INCLUDED_LIBINTL)
612 fi
613
614 # Checks for header files.
615 AC_HEADER_STDC
616 AC_CHECK_HEADERS(string.h unistd.h langinfo.h termio.h locale.h)
617
618 # Checks for typedefs, structures, and compiler characteristics.
619 AC_C_CONST
620 AC_C_INLINE
621 AC_TYPE_SIZE_T
622 AC_TYPE_SIGNAL
623 AC_DECL_SYS_SIGLIST
624
625 GNUPG_CHECK_ENDIAN
626
627 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
628 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
629 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
630 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
631 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
632
633 AC_CHECK_SIZEOF(unsigned short)
634 AC_CHECK_SIZEOF(unsigned int)
635 AC_CHECK_SIZEOF(unsigned long)
636 AC_CHECK_SIZEOF(unsigned long long)
637 AC_CHECK_SIZEOF(uint64_t)
638
639 if test "$ac_cv_sizeof_unsigned_short" = "0" \
640    || test "$ac_cv_sizeof_unsigned_int" = "0" \
641    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
642     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
643 fi
644
645 dnl Do we have any 64-bit data types?
646 if test "$ac_cv_sizeof_unsigned_int" != "8" \
647    && test "$ac_cv_sizeof_unsigned_long" != "8" \
648    && test "$ac_cv_sizeof_unsigned_long_long" != "8" \
649    && test "$ac_cv_sizeof_uint64_t" != "8"; then
650     AC_MSG_WARN([No 64-bit types.  Disabling TIGER/192, SHA-384, and SHA-512])
651 else
652   if test x"$use_tiger192" = xyes ; then
653      AC_SUBST(TIGER_O,tiger.o)
654      AC_DEFINE(USE_TIGER192,1,[Define to include the TIGER/192 digest])
655   fi
656
657   if test "$use_old_tiger192" = yes ; then
658      AC_SUBST(TIGER_O,tiger.o)
659      AC_DEFINE(USE_TIGER192,1,[Define to include the TIGER/192 digest])
660      AC_DEFINE(USE_OLD_TIGER,1,[Define to use the old fake OID for TIGER/192 digest support])
661   fi
662
663   if test x"$use_sha512" = xyes ; then
664      AC_SUBST(SHA512_O,sha512.o)
665      AC_DEFINE(USE_SHA512,1,[Define to include the SHA-384 and SHA-512 digests])
666   fi
667 fi
668
669 GNUPG_SYS_SO_PEERCRED
670
671 # Checks for library functions.
672 AC_FUNC_FSEEKO
673 AC_FUNC_VPRINTF
674 AC_FUNC_FORK
675 AC_CHECK_FUNCS(strerror stpcpy strsep strlwr tcgetattr strtoul mmap)
676 AC_CHECK_FUNCS(strcasecmp strncasecmp ctermid times)
677 AC_CHECK_FUNCS(memmove gettimeofday getrusage setrlimit clock_gettime)
678 AC_CHECK_FUNCS(atexit raise getpagesize strftime nl_langinfo setlocale)
679 AC_CHECK_FUNCS(waitpid wait4 sigaction sigprocmask rand pipe stat)
680
681 # These are needed by libjnlib - fixme: we should have a macros for them
682 AC_CHECK_FUNCS(memicmp stpcpy strlwr strtoul memmove stricmp strtol)
683 AC_CHECK_FUNCS(getrusage setrlimit stat setlocale)
684 AC_CHECK_FUNCS(flockfile funlockfile)
685
686 AC_REPLACE_FUNCS(vasprintf)
687 AC_REPLACE_FUNCS(fopencookie)
688 AC_REPLACE_FUNCS(mkdtemp)
689 AC_REPLACE_FUNCS(fseeko ftello)
690 AC_REPLACE_FUNCS(isascii)
691 AC_REPLACE_FUNCS(putc_unlocked)
692
693 #
694 # check for gethrtime and run a testprogram to see whether
695 # it is broken.  It has been reported that some Solaris and HP UX systems 
696 # raise an SIGILL
697 #
698 AC_CACHE_CHECK([for gethrtime], 
699                [gnupg_cv_func_gethrtime],
700                [AC_TRY_LINK([#include <sys/times.h>],[
701                    hrtime_t tv;
702                    tv = gethrtime();
703                  ],
704                  [gnupg_cv_func_gethrtime=yes],
705                  [gnupg_cv_func_gethrtime=no])
706                ])
707 if test $gnupg_cv_func_gethrtime = yes; then
708      AC_DEFINE([HAVE_GETHRTIME], 1,
709                [Define if you have the `gethrtime(2)' function.])
710      AC_CACHE_CHECK([whether gethrtime is broken], 
711                [gnupg_cv_func_broken_gethrtime],
712                [AC_TRY_RUN([
713                    #include <sys/times.h>
714                    int main () {
715                    hrtime_t tv;
716                    tv = gethrtime(); 
717                  }
718                  ],
719                  [gnupg_cv_func_broken_gethrtime=no],
720                  [gnupg_cv_func_broken_gethrtime=yes],
721                  [gnupg_cv_func_broken_gethrtime=assume-no])
722                 ])
723     if test $gnupg_cv_func_broken_gethrtime = yes; then
724       AC_DEFINE([HAVE_BROKEN_GETHRTIME], 1,
725       [Define if `gethrtime(2)' does not work correctly i.e. issues a SIGILL.])
726     fi
727 fi
728      
729
730 GNUPG_CHECK_MLOCK
731 GNUPG_FUNC_MKDIR_TAKES_ONE_ARG
732
733 dnl
734 dnl Check whether we can use Linux capabilities as requested
735 dnl
736 if test "$use_capabilities" = "yes" ; then
737 use_capabilities=no
738 AC_CHECK_HEADERS(sys/capability.h)
739 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
740   AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
741   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
742      AC_DEFINE(USE_CAPABILITIES,1,
743                [define if capabilities should be used])
744      AC_SUBST(CAPLIBS,"-lcap")
745      use_capabilities=yes
746   fi
747 fi
748 if test "$use_capabilities" = "no" ; then
749     AC_MSG_WARN([[
750 ***
751 *** The use of capabilities on this system is not possible.
752 *** You need a recent Linux kernel and some patches:
753 ***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
754 ***   fcap-module-990613.tar.gz     (kernel module)
755 ***   libcap-1.92.tar.gz            (user mode library and utilities)
756 *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
757 *** set (filesystems menu). Be warned: This code is *really* ALPHA.
758 ***]])
759 fi
760 fi
761
762
763 # Sanity check regex.  Tests adapted from mutt.
764
765 AC_MSG_CHECKING([whether regular expression support is requested])
766 AC_ARG_ENABLE(regex,
767 [  --disable-regex         do not handle regular expressions in trust sigs],
768      use_regex=$enableval, use_regex=yes)
769 AC_MSG_RESULT($use_regex)
770
771 if test "$use_regex" = yes ; then
772   AC_MSG_CHECKING([whether the included regex lib is requested])
773   AC_ARG_WITH(included-regex,
774       [  --with-included-regex   use the included GNU regex library],
775       [gnupg_cv_included_regex=yes],[gnupg_cv_included_regex=no])
776   AC_MSG_RESULT($gnupg_cv_included_regex)
777
778   if test $gnupg_cv_included_regex = no ; then
779      # Does the system have regex functions at all?
780      AC_CHECK_FUNC(regcomp,gnupg_cv_included_regex=no,
781                            gnupg_cv_included_regex=yes)
782   fi
783
784   if test $gnupg_cv_included_regex = no ; then
785      AC_CACHE_CHECK([whether your system's regexp library is broken],
786        [gnupg_cv_regex_broken],
787        AC_TRY_RUN([
788 #include <unistd.h>
789 #include <regex.h>
790 main() { regex_t blah ; regmatch_t p; p.rm_eo = p.rm_eo; return regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0); }],
791        gnupg_cv_regex_broken=no, gnupg_cv_regex_broken=yes, gnupg_cv_regex_broken=yes))
792
793      if test $gnupg_cv_regex_broken = yes ; then
794       AC_MSG_WARN(your regex is broken - using the included GNU regex instead.)
795       gnupg_cv_included_regex=yes
796      fi
797   fi
798
799   if test $gnupg_cv_included_regex = yes; then
800      AC_DEFINE(USE_GNU_REGEX,1,[ Define if you want to use the included regex lib ])
801      AC_SUBST(REGEX_O,regex.o)
802   fi
803 else
804
805   AC_DEFINE(DISABLE_REGEX,1,[ Define to disable regular expression support ])
806 fi
807
808 dnl Do we have zlib? Must do it here because Solaris failed
809 dnl when compiling a conftest (due to the "-lz" from LIBS).
810 use_local_zlib=yes
811 if test "$g10_force_zlib" = "yes"; then
812   :
813 else
814   _cppflags="${CPPFLAGS}"
815   _ldflags="${LDFLAGS}"
816
817   AC_ARG_WITH(zlib,
818   [  --with-zlib=DIR         use libz in DIR],[
819     if test -d "$withval"; then
820       CPPFLAGS="${CPPFLAGS} -I$withval/include"
821       LDFLAGS="${LDFLAGS} -L$withval/lib"
822     fi
823   ])
824
825   AC_CHECK_HEADER(zlib.h,
826       AC_CHECK_LIB(z, deflateInit2_,
827        use_local_zlib=no
828        LIBS="$LIBS -lz",
829        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
830        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags})
831 fi
832  
833 if test "$use_local_zlib" = yes ; then
834     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
835     AC_CONFIG_LINKS(zlib.h:zlib/zlib.h zconf.h:zlib/zconf.h )
836     ZLIBS="../zlib/libzlib.a"
837 else
838     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, false)
839     ZLIBS=
840 fi
841 AC_SUBST(ZLIBS)
842
843 # Allow users to append something to the version string without
844 # flagging it as development version.  The user version parts is
845 # considered everything after a dash. 
846 if test "$development_version" != yes; then
847   changequote(,)dnl
848   tmp_pat='[a-zA-Z]'
849   changequote([,])dnl
850   if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
851     development_version=yes
852   fi
853 fi
854 if test "$development_version" = yes; then
855     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
856             [Defined if this is not a regular release])
857 fi
858
859 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
860
861 GNUPG_CHECK_GNUMAKE
862
863 # add some extra libs here so that previous tests don't fail for
864 # mysterious reasons - the final link step should bail out. 
865 case "${target}" in
866     *-*-mingw32*)
867         LIBS="$LIBS -lwsock32"
868         ;;
869     *)
870        ;;
871 esac
872
873
874 if test "$GCC" = yes; then
875     if test "$USE_MAINTAINER_MODE" = "yes"; then
876         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
877     else
878         CFLAGS="$CFLAGS -Wall"
879     fi
880 fi
881
882 AC_SUBST(NETLIBS)
883
884
885 # We use jnlib, so tell other modules about it
886 AC_DEFINE(HAVE_JNLIB_LOGGING, 1,
887         [Defined if jnlib style logging fucntions are available])
888
889
890
891
892 #
893 # Print errors here so that they are visible all
894 # together and the user can acquire them all together.
895 #
896 die=no
897 if test "$have_gpg_error" = "no"; then
898    die=yes
899    AC_MSG_NOTICE([[
900 ***  
901 *** You need libgpg-error to build this program.
902 **  This library is for example available at
903 ***   ftp://ftp.gnupg.org/pub/gcrypt/alpha/libgpg-error
904 *** (at least version $NEED_GPG_ERROR_VERSION is required.)
905 ***]])
906 fi
907 if test "$have_libgcrypt" = "no"; then
908    die=yes
909    AC_MSG_NOTICE([[
910 ***  
911 *** You need libgcrypt to build this program.
912 **  This library is for example available at
913 ***   ftp://ftp.gnupg.org/pub/gcrypt/alpha/libgcrypt/
914 *** (at least version $NEED_LIBGCRYPT_VERSION is required.)
915 ***]])
916 fi
917 if test "$have_libassuan" = "no"; then
918    die=yes
919    AC_MSG_NOTICE([[
920 ***
921 *** You need libassuan to build this program.
922 *** This library is for example available at
923 ***   ftp://ftp.gnupg.org/pub/gcrypt/alpha/libassuan/
924 *** (at least version $NEED_LIBASSUAN_VERSION is required).
925 ***]])
926 fi
927 if test "$have_ksba" = "no"; then
928    die=yes
929     AC_MSG_NOTICE([[
930 ***
931 *** You need libksba to build this program.
932 *** This library is for example available at
933 ***   ftp://ftp.gnupg.org/pub/gcrypt/alpha/aegypten/
934 *** (at least version $NEED_KSBA_VERSION is required).
935 ***]])
936 fi
937
938 if test "$die" = "yes"; then
939     AC_MSG_ERROR([[
940 ***
941 *** Required libraries not found. Please consult the above messages
942 *** and install them before running configure again.
943 ***]])
944 fi
945
946
947 #
948 # Decide what to build
949 #
950 if test $have_ksba = no; then
951   build_gpgsm=no
952   build_scdaemon=no
953 fi
954
955 build_agent_threaded=""
956 if test "$build_agent" = "yes"; then
957   if test $have_pth = no; then
958      build_agent_threaded="(not multi-threaded)"
959   fi
960 fi
961
962 build_scdaemon_extra=""
963 if test "$build_scdaemon" = "yes"; then
964   tmp=""
965   if test $have_pth = no; then
966      build_scdaemon_extra="not multi-threaded"
967      tmp=", "
968   fi
969   if test $have_opensc = no; then
970      build_scdaemon_extra="${build_scdaemon_extra}${tmp}no pkcs#15"
971      tmp=", "
972   fi      
973   if test -n "$build_scdaemon_extra"; then
974      build_scdaemon_extra="(${build_scdaemon_extra})"
975   fi
976 fi
977
978
979 AM_CONDITIONAL(BUILD_GPG,   test "$build_gpg" = "yes")
980 AM_CONDITIONAL(BUILD_GPGSM, test "$build_gpgsm" = "yes")
981 AM_CONDITIONAL(BUILD_AGENT, test "$build_agent" = "yes")
982 AM_CONDITIONAL(BUILD_SCDAEMON, test "$build_scdaemon" = "yes")
983
984
985 AC_CONFIG_COMMANDS(g10defs.h,[[
986 cat >g10defs.tmp <<G10EOF
987 /* Generated automatically by configure */
988 /* FIXME: Shouldn't we replace GNUPG_HOMEDIR by GNUPG_DEFAULT_HOMEDIR
989    and we propably can get rid of g10defs.h */
990 #ifdef HAVE_DRIVE_LETTERS
991 /*#define G10_LOCALEDIR     "c:\\\\lib\\\\gnupg\\\\locale"*/
992 #define GNUPG_LIBDIR      "c:\\\\lib\\\\gnupg"
993 #define GNUPG_LIBEXECDIR  "c:\\\\lib\\\\gnupg"
994 #define GNUPG_DATADIR     "c:\\\\lib\\\\gnupg"
995 #define GNUPG_HOMEDIR     "c:\\\\gnupg"
996 #else
997 /*#define G10_LOCALEDIR     "${datadir}/locale"*/
998 #define GNUPG_LIBDIR      "${libdir}/gnupg"
999 #define GNUPG_DATADIR     "${datadir}/gnupg"
1000 #ifdef __VMS
1001 #define GNUPG_HOMEDIR "/SYS\$LOGIN/gnupg" 
1002 #else
1003 #define GNUPG_HOMEDIR "~/.gnupg" 
1004 #endif
1005 #endif
1006 /* those are here to be redefined by handcrafted g10defs.h.
1007    Please note that the string version must not contain more
1008    than one character because the using code assumes strlen()==1 */
1009 #ifdef HAVE_DOSISH_SYSTEM
1010 #define DIRSEP_C '\\\\'
1011 #define EXTSEP_C '.'
1012 #define DIRSEP_S "\\\\"
1013 #define EXTSEP_S "."
1014 #else
1015 #define DIRSEP_C '/'
1016 #define EXTSEP_C '.'
1017 #define DIRSEP_S "/"
1018 #define EXTSEP_S "."
1019 #endif
1020 /* This is the same as VERSION, but should be overridden if the
1021    platform cannot handle things like dots '.' in filenames. */
1022 #define SAFE_VERSION VERSION
1023 G10EOF
1024 ## Do we really need the following?  It defines BYTES_PER-MPI_LIMB
1025 ## cat mpi/mpi-asm-defs.h >>g10defs.tmp 
1026 if cmp -s g10defs.h g10defs.tmp 2>/dev/null; then
1027     echo "g10defs.h is unchanged"
1028     rm -f g10defs.tmp
1029 else
1030     rm -f g10defs.h
1031     mv g10defs.tmp g10defs.h
1032     echo "g10defs.h created"
1033 fi
1034 ]],[[
1035 prefix=$prefix
1036 exec_prefix=$exec_prefix
1037 libdir=$libdir
1038 libexecdir=$libexecdir
1039 datadir=$datadir
1040 DATADIRNAME=$DATADIRNAME
1041 ]])
1042
1043 AC_CONFIG_FILES([ m4/Makefile 
1044 Makefile
1045 po/Makefile.in
1046 intl/Makefile
1047 jnlib/Makefile
1048 common/Makefile
1049 kbx/Makefile
1050 g10/Makefile
1051 sm/Makefile
1052 agent/Makefile
1053 scd/Makefile
1054 doc/Makefile
1055 ])
1056 AC_OUTPUT
1057 #tests/Makefile
1058
1059
1060 echo "
1061         GnuPG v${VERSION} has been configured as follows:
1062         
1063         Platform:  $PRINTABLE_OS_NAME ($target)
1064
1065         OpenPGP:   $build_gpg
1066         S/MIME:    $build_gpgsm
1067         Agent:     $build_agent $build_agent_threaded
1068         Smartcard: $build_scdaemon $build_scdaemon_extra
1069
1070         Protect tool:     $gnupg_protect_tool
1071         Default agent:    $gnupg_agent_pgm
1072         Default pinentry: $gnupg_pinentry_pgm
1073         Default scdaemon: $gnupg_scdaemon_pgm
1074         Default dirmngr:  $gnupg_dirmngr_pgm
1075 "
1076