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