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