Fixed a C-89 incompatibility.
[gnupg.git] / configure.ac
1 # configure.ac - for GnuPG 2.0
2 # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
3 #               2006, 2007, 2008 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 3 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, see <http://www.gnu.org/licenses/>.
19
20 # Process this file with autoconf to produce a configure script.
21 AC_PREREQ(2.61)
22 min_automake_version="1.10"
23
24 # Remember to change the version number immediately *after* a release.
25 # Set my_issvn to "yes" for non-released code.  Remember to run an
26 # "svn up" and "autogen.sh" right before creating a distribution.
27 m4_define([my_version], [2.0.10])
28 m4_define([my_issvn], [yes])
29
30
31 m4_define([svn_revision], m4_esyscmd([echo -n $( (svn info 2>/dev/null \
32             || echo 'Revision: 0')|sed -n '/^Revision:/ {s/[^0-9]//gp;q;}')]))
33 AC_INIT([gnupg], 
34         [my_version[]m4_if(my_issvn,[yes],[-svn[]svn_revision])],
35         [bug-gnupg@gnupg.org])
36 # Set development_version to yes if the minor number is odd or you
37 # feel that the default check for a development version is not
38 # sufficient.
39 development_version=no
40
41 NEED_GPG_ERROR_VERSION=1.4
42
43 NEED_LIBGCRYPT_API=1
44 NEED_LIBGCRYPT_VERSION=1.2.2
45
46 NEED_LIBASSUAN_API=1
47 NEED_LIBASSUAN_VERSION=1.0.4
48
49 NEED_KSBA_API=1
50 NEED_KSBA_VERSION=1.0.2
51
52
53 PACKAGE=$PACKAGE_NAME
54 PACKAGE_GT=${PACKAGE_NAME}2
55 VERSION=$PACKAGE_VERSION
56
57 AC_CONFIG_AUX_DIR(scripts)
58 AC_CONFIG_SRCDIR(sm/gpgsm.c)
59 AM_CONFIG_HEADER(config.h)
60 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
61 AC_CANONICAL_HOST
62 AB_INIT
63
64 AC_GNU_SOURCE
65
66 # Some status variables.
67 have_gpg_error=no
68 have_libgcrypt=no 
69 have_libassuan=no
70 have_ksba=no
71 have_pth=no
72 have_libusb=no
73 have_adns=no
74
75 use_bzip2=yes
76 use_exec=yes
77 disable_keyserver_path=no
78 use_camellia=no
79
80
81 GNUPG_BUILD_PROGRAM(gpg, yes)
82 GNUPG_BUILD_PROGRAM(gpgsm, yes)
83 GNUPG_BUILD_PROGRAM(agent, yes)
84 GNUPG_BUILD_PROGRAM(scdaemon, yes)
85 GNUPG_BUILD_PROGRAM(tools, yes)
86 GNUPG_BUILD_PROGRAM(doc, yes)
87 GNUPG_BUILD_PROGRAM(symcryptrun, no)
88
89 AC_SUBST(PACKAGE)
90 AC_SUBST(PACKAGE_GT)
91 AC_SUBST(VERSION)
92 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
93 AC_DEFINE_UNQUOTED(PACKAGE_GT, "$PACKAGE_GT",
94                                 [Name of this package for gettext])
95 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
96 AC_DEFINE_UNQUOTED(PACKAGE_BUGREPORT, "$PACKAGE_BUGREPORT",
97                                         [Bug report address])
98 AC_DEFINE_UNQUOTED(NEED_LIBGCRYPT_VERSION, "$NEED_LIBGCRYPT_VERSION",
99                                        [Required version of Libgcrypt])
100 AC_DEFINE_UNQUOTED(NEED_KSBA_VERSION, "$NEED_KSBA_VERSION",
101                                        [Required version of Libksba])
102
103
104
105 # The default is to use the modules from this package and the few
106 # other packages in a standard place; i.e where this package gets
107 # installed.  With these options it is possible to override these
108 # ${prefix} depended values with fixed paths, which can't be replaced
109 # at make time.  See also am/cmacros.am and the defaults in AH_BOTTOM.
110 AC_ARG_WITH(agent-pgm,
111     [  --with-agent-pgm=PATH  Use PATH as the default for the agent)],
112           GNUPG_AGENT_PGM="$withval", GNUPG_AGENT_PGM="" )
113 AC_SUBST(GNUPG_AGENT_PGM)
114 AM_CONDITIONAL(GNUPG_AGENT_PGM, test -n "$GNUPG_AGENT_PGM")
115 show_gnupg_agent_pgm="(default)"
116 test -n "$GNUPG_AGENT_PGM" && show_gnupg_agent_pgm="$GNUPG_AGENT_PGM"
117
118 AC_ARG_WITH(pinentry-pgm,
119     [  --with-pinentry-pgm=PATH  Use PATH as the default for the pinentry)],
120           GNUPG_PINENTRY_PGM="$withval", GNUPG_PINENTRY_PGM="" )
121 AC_SUBST(GNUPG_PINENTRY_PGM)
122 AM_CONDITIONAL(GNUPG_PINENTRY_PGM, test -n "$GNUPG_PINENTRY_PGM")
123 show_gnupg_pinentry_pgm="(default)"
124 test -n "$GNUPG_PINENTRY_PGM" && show_gnupg_pinentry_pgm="$GNUPG_PINENTRY_PGM"
125
126
127 AC_ARG_WITH(scdaemon-pgm,
128     [  --with-scdaemon-pgm=PATH  Use PATH as the default for the scdaemon)],
129           GNUPG_SCDAEMON_PGM="$withval", GNUPG_SCDAEMON_PGM="" )
130 AC_SUBST(GNUPG_SCDAEMON_PGM)
131 AM_CONDITIONAL(GNUPG_SCDAEMON_PGM, test -n "$GNUPG_SCDAEMON_PGM")
132 show_gnupg_scdaemon_pgm="(default)"
133 test -n "$GNUPG_SCDAEMON_PGM" && show_gnupg_scdaemon_pgm="$GNUPG_SCDAEMON_PGM"
134
135
136 AC_ARG_WITH(dirmngr-pgm,
137     [  --with-dirmngr-pgm=PATH  Use PATH as the default for the dirmngr)],
138           GNUPG_DIRMNGR_PGM="$withval", GNUPG_DIRMNGR_PGM="" )
139 AC_SUBST(GNUPG_DIRMNGR_PGM)
140 AM_CONDITIONAL(GNUPG_DIRMNGR_PGM, test -n "$GNUPG_DIRMNGR_PGM")
141 show_gnupg_dirmngr_pgm="(default)"
142 test -n "$GNUPG_DIRMNGR_PGM" && show_gnupg_dirmngr_pgm="$GNUPG_DIRMNGR_PGM"
143
144 AC_ARG_WITH(protect-tool-pgm,
145     [  --with-protect-tool-pgm=PATH  Use PATH as the default for the protect-tool)],
146           GNUPG_PROTECT_TOOL_PGM="$withval", GNUPG_PROTECT_TOOL_PGM="" )
147 AC_SUBST(GNUPG_PROTECT_TOOL_PGM)
148 AM_CONDITIONAL(GNUPG_PROTECT_TOOL_PGM, test -n "$GNUPG_PROTECT_TOOL_PGM")
149 show_gnupg_protect_tool_pgm="(default)"
150 test -n "$GNUPG_PROTECT_TOOL_PGM" \
151       && show_gnupg_protect_tool_pgm="$GNUPG_PROTECT_TOOL_PGM"
152
153
154 # Some folks want to use only the agent from this packet.  Make it
155 # easier for them by providing the configure option
156 # --enable-only-agent.
157 AC_ARG_ENABLE(agent-only,
158     AC_HELP_STRING([--enable-agent-only],[build only the gpg-agent]),
159     build_agent_only=$enableval)
160
161 # SELinux support includes tracking of sensitive files to avoid
162 # leaking their contents through processing these files by gpg itself
163 AC_MSG_CHECKING([whether SELinux support is requested])
164 AC_ARG_ENABLE(selinux-support,
165               AC_HELP_STRING([--enable-selinux-support],
166                              [enable SELinux support]),
167               selinux_support=$enableval, selinux_support=no)
168 AC_MSG_RESULT($selinux_support)
169
170 # Allow disabling of bzib2 support.
171 # It is defined only after we confirm the library is available later
172 AC_MSG_CHECKING([whether to enable the BZIP2 compression algorithm])
173 AC_ARG_ENABLE(bzip2,
174    AC_HELP_STRING([--disable-bzip2],[disable the BZIP2 compression algorithm]),
175    use_bzip2=$enableval)
176 AC_MSG_RESULT($use_bzip2)
177
178 # Check whether testing support for Camellia has been requested
179 AC_MSG_CHECKING([whether to enable the CAMELLIA cipher for gpg])
180 AC_ARG_ENABLE(camellia,
181    AC_HELP_STRING([--enable-camellia],[enable the CAMELLIA cipher for gpg]),
182    use_camellia=$enableval)
183 AC_MSG_RESULT($use_camellia)
184 if test x"$use_camellia" = xyes ; then
185    AC_DEFINE(USE_CAMELLIA,1,[Define to include the CAMELLIA cipher into gpg])
186    AC_MSG_WARN([[
187 ***
188 *** The Camellia cipher for gpg is for testing only and 
189 *** is NOT for production use!
190 ***]])
191 fi
192
193
194 # Configure option to allow or disallow execution of external
195 # programs, like a photo viewer.
196 AC_MSG_CHECKING([whether to enable external program execution])
197 AC_ARG_ENABLE(exec,
198     AC_HELP_STRING([--disable-exec],[disable all external program execution]),
199     use_exec=$enableval)
200 AC_MSG_RESULT($use_exec)
201 if test "$use_exec" = no ; then
202     AC_DEFINE(NO_EXEC,1,[Define to disable all external program execution])
203 fi
204
205 if test "$use_exec" = yes ; then
206   AC_MSG_CHECKING([whether to enable photo ID viewing])
207   AC_ARG_ENABLE(photo-viewers,
208       [  --disable-photo-viewers disable photo ID viewers],
209       [if test "$enableval" = no ; then
210          AC_DEFINE(DISABLE_PHOTO_VIEWER,1,[define to disable photo viewing])
211       fi],enableval=yes)
212   gnupg_cv_enable_photo_viewers=$enableval
213   AC_MSG_RESULT($enableval)
214
215   if test "$gnupg_cv_enable_photo_viewers" = yes ; then
216     AC_MSG_CHECKING([whether to use a fixed photo ID viewer])
217     AC_ARG_WITH(photo-viewer,
218         [  --with-photo-viewer=FIXED_VIEWER  set a fixed photo ID viewer],
219         [if test "$withval" = yes ; then
220            withval=no
221         elif test "$withval" != no ; then
222            AC_DEFINE_UNQUOTED(FIXED_PHOTO_VIEWER,"$withval",
223                             [if set, restrict photo-viewer to this])
224         fi],withval=no)
225     AC_MSG_RESULT($withval)
226   fi
227
228   AC_MSG_CHECKING([whether to enable external keyserver helpers])
229   AC_ARG_ENABLE(keyserver-helpers,
230       [  --disable-keyserver-helpers  disable all external keyserver support],
231       [if test "$enableval" = no ; then
232          AC_DEFINE(DISABLE_KEYSERVER_HELPERS,1,
233                   [define to disable keyserver helpers])
234       fi],enableval=yes)
235   gnupg_cv_enable_keyserver_helpers=$enableval
236   AC_MSG_RESULT($enableval)
237
238   if test "$gnupg_cv_enable_keyserver_helpers" = yes ; then
239     # LDAP is defined only after we confirm the library is available later
240     AC_MSG_CHECKING([whether LDAP keyserver support is requested])
241     AC_ARG_ENABLE(ldap,
242       AC_HELP_STRING([--disable-ldap],[disable LDAP keyserver interface only]),
243       try_ldap=$enableval, try_ldap=yes)
244     AC_MSG_RESULT($try_ldap)
245
246     AC_MSG_CHECKING([whether HKP keyserver support is requested])
247     AC_ARG_ENABLE(hkp,
248       AC_HELP_STRING([--disable-hkp],[disable HKP keyserver interface only]),
249       try_hkp=$enableval, try_hkp=yes)
250     AC_MSG_RESULT($try_hkp)
251
252     AC_MSG_CHECKING([whether finger key fetching support is requested])
253     AC_ARG_ENABLE(finger,
254       AC_HELP_STRING([--disable-finger],
255         [disable finger key fetching interface only]),
256       try_finger=$enableval, try_finger=yes)
257     AC_MSG_RESULT($try_finger)
258
259     AC_MSG_CHECKING([whether generic object key fetching support is requested])
260     AC_ARG_ENABLE(generic,
261       AC_HELP_STRING([--disable-generic],
262         [disable generic object key fetching interface only]),
263       try_generic=$enableval, try_generic=yes)
264     AC_MSG_RESULT($try_generic)
265
266     AC_MSG_CHECKING([whether email keyserver support is requested])
267     AC_ARG_ENABLE(mailto,
268       AC_HELP_STRING([--enable-mailto],
269         [enable email keyserver interface only]),
270       try_mailto=$enableval, try_mailto=no)
271     AC_MSG_RESULT($try_mailto)
272     fi
273
274     AC_MSG_CHECKING([whether keyserver exec-path is enabled])
275     AC_ARG_ENABLE(keyserver-path,
276       AC_HELP_STRING([--disable-keyserver-path],
277         [disable the exec-path option for keyserver helpers]),
278       [if test "$enableval" = no ; then
279          disable_keyserver_path=yes
280       fi],enableval=yes)
281     AC_MSG_RESULT($enableval)
282   fi
283
284
285 #
286 # Check for the key/uid cache size.  This can't be zero, but can be
287 # pretty small on embedded systems.  This is used for the gpg part.
288 #
289 AC_MSG_CHECKING([for the size of the key and uid cache])
290 AC_ARG_ENABLE(key-cache,
291         AC_HELP_STRING([--enable-key-cache=SIZE],
292                        [Set key cache to SIZE (default 4096)]),,enableval=4096)
293 if test "$enableval" = "no"; then
294    enableval=5
295 elif test "$enableval" = "yes" || test "$enableval" = ""; then
296    enableval=4096
297 fi
298 changequote(,)dnl
299 key_cache_size=`echo "$enableval" | sed 's/[A-Za-z]//g'`
300 changequote([,])dnl
301 if test "$enableval" != "$key_cache_size" || test "$key_cache_size" -lt 5; then
302    AC_MSG_ERROR([invalid key-cache size])
303 fi
304 AC_MSG_RESULT($key_cache_size)
305 AC_DEFINE_UNQUOTED(PK_UID_CACHE_SIZE,$key_cache_size,
306                   [Size of the key and UID caches])
307
308
309
310 #
311 # Check whether we want to use Linux capabilities
312 #
313 AC_MSG_CHECKING([whether use of capabilities is requested])
314 AC_ARG_WITH(capabilities,
315     [  --with-capabilities     use linux capabilities [default=no]],
316 [use_capabilities="$withval"],[use_capabilities=no])
317 AC_MSG_RESULT($use_capabilities)
318
319 #
320 # To avoid double inclusion of config.h which might happen at some
321 # places, we add the usual double inclusion protection at the top of
322 # config.h.
323 #
324 AH_TOP([
325 #ifndef GNUPG_CONFIG_H_INCLUDED
326 #define GNUPG_CONFIG_H_INCLUDED
327 ])
328
329 #
330 # Stuff which goes at the bottom of config.h.
331 #
332 AH_BOTTOM([
333 /* This is the major version number of GnuPG so that
334    source included files can test for this.  Note, that
335    we use 2 here even for GnuPG 1.9.x. */
336 #define GNUPG_MAJOR_VERSION 2
337
338 /* Now to separate file name parts.
339    Please note that the string version must not contain more
340    than one character because the code assumes strlen()==1 */
341 #ifdef HAVE_DOSISH_SYSTEM
342 #define DIRSEP_C '\\'
343 #define DIRSEP_S "\\"
344 #define EXTSEP_C '.'
345 #define EXTSEP_S "."
346 #define PATHSEP_C ';'
347 #define PATHSEP_S ";"
348 #define EXEEXT_S ".exe"
349 #else
350 #define DIRSEP_C '/'
351 #define DIRSEP_S "/"
352 #define EXTSEP_C '.'
353 #define EXTSEP_S "."
354 #define PATHSEP_C ':'
355 #define PATHSEP_S ":"
356 #define EXEEXT_S ""
357 #endif
358
359 /* This is the same as VERSION, but should be overridden if the
360    platform cannot handle things like dots '.' in filenames. Set
361    SAFE_VERSION_DOT and SAFE_VERSION_DASH to whatever SAFE_VERSION
362    uses for dots and dashes. */
363 #define SAFE_VERSION VERSION
364 #define SAFE_VERSION_DOT  '.'
365 #define SAFE_VERSION_DASH '-'
366
367 /* Some global constants. */
368 #ifdef HAVE_DRIVE_LETTERS
369 #define GNUPG_DEFAULT_HOMEDIR "c:/gnupg"
370 #elif defined(__VMS)
371 #define GNUPG_DEFAULT_HOMEDIR "/SYS\$LOGIN/gnupg" 
372 #else
373 #define GNUPG_DEFAULT_HOMEDIR "~/.gnupg"
374 #endif 
375 #define GNUPG_PRIVATE_KEYS_DIR "private-keys-v1.d"
376
377 /* For some systems (DOS currently), we hardcode the path here.  For
378    POSIX systems the values are constructed by the Makefiles, so that
379    the values may be overridden by the make invocations; this is to
380    comply with the GNU coding standards. */
381 #ifdef HAVE_DRIVE_LETTERS
382  /* FIXME: We need to use a function to determine these values depending 
383     on the actual installation directory. */
384 #define GNUPG_BINDIR      "c:\\gnupg"
385 #define GNUPG_LIBEXECDIR  "c:\\gnupg"
386 #define GNUPG_LIBDIR      "c:\\gnupg"
387 #define GNUPG_DATADIR     "c:\\gnupg"
388 #define GNUPG_SYSCONFDIR  "c:\\gnupg"
389 #endif
390
391 /* Derive some other constants. */
392 #if !(defined(HAVE_FORK) && defined(HAVE_PIPE) && defined(HAVE_WAITPID))
393 #define EXEC_TEMPFILE_ONLY
394 #endif
395
396
397 /* We didn't define endianness above, so get it from OS macros.  This
398    is intended for making fat binary builds on OS X. */
399 #if !defined(BIG_ENDIAN_HOST) && !defined(LITTLE_ENDIAN_HOST)
400 #if defined(__BIG_ENDIAN__)
401 #define BIG_ENDIAN_HOST 1
402 #elif defined(__LITTLE_ENDIAN__)
403 #define LITTLE_ENDIAN_HOST 1
404 #else
405 #error "No endianness found"
406 #endif
407 #endif
408
409
410 /* Hack used for W32: ldap.m4 also tests for the ASCII version of
411    ldap_start_tls_s because that is the actual symbol used in the
412    library.  winldap.h redefines it to our commonly used value,
413    thus we define our usual macro here.  */
414 #ifdef HAVE_LDAP_START_TLS_SA
415 # ifndef HAVE_LDAP_START_TLS_S
416 #  define HAVE_LDAP_START_TLS_S 1
417 # endif
418 #endif
419
420
421 /* Tell libgcrypt not to use its own libgpg-error implementation. */
422 #define USE_LIBGPG_ERROR 1
423
424 /* We use jnlib, so tell other modules about it.  */
425 #define HAVE_JNLIB_LOGGING 1
426
427 /* Our HTTP code is used in estream mode.  */
428 #define HTTP_USE_ESTREAM 1
429
430 /* Under W32 we do an explicit socket initialization, thus we need to
431    avoid the on-demand initialization which would also install an atexit
432    handler.  */
433 #define HTTP_NO_WSASTARTUP
434
435 /* We always include support for the OpenPGP card.  */
436 #define ENABLE_CARD_SUPPORT 1
437
438 /* We don't want the old assuan codes anymore. */
439 #define _ASSUAN_ONLY_GPG_ERRORS 1
440
441 /* We explicitly need to disable PTH's soft mapping as Debian
442    currently enables it by default for no reason. */
443 #define PTH_SYSCALL_SOFT 0
444
445 /* We want to use the libgcrypt provided memory allocation for
446    asprintf.  */
447 #define _ESTREAM_PRINTF_MALLOC        gcry_malloc
448 #define _ESTREAM_PRINTF_FREE          gcry_free
449 #define _ESTREAM_PRINTF_EXTRA_INCLUDE "util.h"
450
451 #endif /*GNUPG_CONFIG_H_INCLUDED*/
452 ])
453
454
455 AM_MAINTAINER_MODE
456
457 # Checks for programs.
458 AC_MSG_NOTICE([checking for programs])
459 AC_PROG_MAKE_SET
460 AM_SANITY_CHECK
461 missing_dir=`cd $ac_aux_dir && pwd`
462 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
463 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
464 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
465 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
466 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
467 AC_PROG_AWK
468 AC_PROG_CC
469 AC_PROG_CPP
470 AM_PROG_CC_C_O
471 if test "x$ac_cv_prog_cc_c89" = "xno" ; then
472   AC_MSG_ERROR([[No C-89 compiler found]])
473 fi
474 AC_PROG_INSTALL
475 AC_PROG_LN_S
476 AC_PROG_RANLIB
477 AC_CHECK_TOOL(AR, ar, :)
478 AC_PATH_PROG(PERL,"perl")
479 AC_CHECK_TOOL(WINDRES, windres, :)
480 AC_ISC_POSIX
481 gl_EARLY
482 AC_SYS_LARGEFILE
483 GNUPG_CHECK_FAQPROG
484 GNUPG_CHECK_USTAR
485
486 # We need to compile and run a program on the build machine.  A
487 # comment in libgpg-error says that the AC_PROG_CC_FOR_BUILD macro in
488 # the AC archive is broken for autoconf 2.57.  Given that tehre is no
489 # newer version of that macro, we assume that it is also broken for
490 # autoconf 2.61 and thus we use a simple but usually sufficient
491 # approach.
492 AC_MSG_CHECKING(for cc for build)
493 if test "$cross_compiling" = "yes"; then
494   CC_FOR_BUILD="${CC_FOR_BUILD-cc}"
495 else
496   CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
497 fi
498 AC_MSG_RESULT($CC_FOR_BUILD)
499 AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler])
500
501
502
503 try_gettext=yes
504 have_dosish_system=no
505 have_w32_system=no
506 use_simple_gettext=no
507 case "${host}" in
508     *-mingw32*)
509         # special stuff for Windoze NT
510         ac_cv_have_dev_random=no
511         AC_DEFINE(USE_ONLY_8DOT3,1,
512                   [set this to limit filenames to the 8.3 format])
513         AC_DEFINE(HAVE_DRIVE_LETTERS,1,
514                   [defined if we must run on a stupid file system])
515         AC_DEFINE(USE_SIMPLE_GETTEXT,1,
516                   [because the Unix gettext has too much overhead on
517                    MingW32 systems and these systems lack Posix functions,
518                    we use a simplified version of gettext])
519         disable_keyserver_path=yes
520         have_dosish_system=yes
521         have_w32_system=yes
522         try_gettext="no"
523         use_simple_gettext=yes
524         ;;
525     i?86-emx-os2 | i?86-*-os2*emx )
526         # OS/2 with the EMX environment
527         ac_cv_have_dev_random=no
528         AC_DEFINE(HAVE_DRIVE_LETTERS)
529         have_dosish_system=yes
530         try_gettext="no"
531         ;;
532
533     i?86-*-msdosdjgpp*)
534         # DOS with the DJGPP environment
535         ac_cv_have_dev_random=no
536         AC_DEFINE(HAVE_DRIVE_LETTERS)
537         have_dosish_system=yes
538         try_gettext="no"
539         ;;
540
541     *-*-freebsd*)
542        # FreeBSD
543        CPPFLAGS="$CPPFLAGS -I/usr/local/include"
544        LDFLAGS="$LDFLAGS -L/usr/local/lib"
545        ;;
546
547     *-*-hpux*)
548         if test -z "$GCC" ; then
549             CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
550         fi
551         ;;
552     *-dec-osf4*)
553         if test -z "$GCC" ; then
554             # Suppress all warnings
555             # to get rid of the unsigned/signed char mismatch warnings.
556             CFLAGS="$CFLAGS -w"
557         fi
558         ;;
559     *-dec-osf5*)
560         if test -z "$GCC" ; then
561             # Use the newer compiler `-msg_disable ptrmismatch1' to
562             # get rid of the unsigned/signed char mismatch warnings.
563             # Using this may hide other pointer mismatch warnings, but
564             # it at least lets other warning classes through
565             CFLAGS="$CFLAGS -msg_disable ptrmismatch1"
566         fi
567         ;;
568     m68k-atari-mint)
569         ;;
570     *)
571        ;;
572 esac
573
574 if test "$have_dosish_system" = yes; then
575    AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
576              [Defined if we run on some of the PCDOS like systems 
577               (DOS, Windoze. OS/2) with special properties like
578               no file modes])
579 fi
580 AM_CONDITIONAL(HAVE_DOSISH_SYSTEM, test "$have_dosish_system" = yes)
581
582 AM_CONDITIONAL(USE_SIMPLE_GETTEXT, test x"$use_simple_gettext" = xyes)
583
584 if test "$have_w32_system" = yes; then
585    AC_DEFINE(HAVE_W32_SYSTEM,1, [Defined if we run on a W32 API based system])
586 fi
587 AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
588
589 if test "$disable_keyserver_path" = yes; then
590     AC_DEFINE(DISABLE_KEYSERVER_PATH,1,
591               [Defined to disable exec-path for keyserver helpers])
592 fi
593
594 # (These need to go after AC_PROG_CC so that $EXEEXT is defined)
595 AC_DEFINE_UNQUOTED(EXEEXT,"$EXEEXT",[The executable file extension, if any])
596
597 if test x"$try_hkp" = xyes ; then
598   AC_SUBST(GPGKEYS_HKP,"gpg2keys_hkp$EXEEXT")
599 fi
600
601 if test x"$try_finger" = xyes ; then
602   AC_SUBST(GPGKEYS_FINGER,"gpg2keys_finger$EXEEXT")
603 fi
604
605
606
607 #
608 # Checks for libraries.
609 #
610 AC_MSG_NOTICE([checking for libraries])
611
612
613 #
614 # libgpg-error is a library with error codes shared between GnuPG
615 # related projects.
616 #
617 AM_PATH_GPG_ERROR("$NEED_GPG_ERROR_VERSION",
618                   have_gpg_error=yes,have_gpg_error=no)
619
620
621 #
622 # Libgcrypt is our generic crypto library
623 #
624 AM_PATH_LIBGCRYPT("$NEED_LIBGCRYPT_API:$NEED_LIBGCRYPT_VERSION",
625         have_libgcrypt=yes,have_libgcrypt=no)
626
627
628 #
629 # libassuan is used for IPC
630 #
631 AM_PATH_LIBASSUAN("$NEED_LIBASSUAN_API:$NEED_LIBASSUAN_VERSION",
632                   have_libassuan=yes,have_libassuan=no)
633 if test "$have_libassuan" = "yes"; then
634   have_libassuan=no
635   AM_PATH_LIBASSUAN_PTH("$NEED_LIBASSUAN_API:$NEED_LIBASSUAN_VERSION",
636                         have_libassuan=yes,have_libassuan=no)
637   AM_CHECK_LIBASSUAN("$NEED_LIBASSUAN_API:1.0.1",
638        [AC_DEFINE(HAVE_ASSUAN_SET_IO_MONITOR, 1,
639          [Define to 1 if you have the `assuan_set_io_monitor' function.])],)  
640   AC_DEFINE_UNQUOTED(GNUPG_LIBASSUAN_VERSION, "$libassuan_version",
641             [version of the libbassuan library])
642 fi
643
644
645
646 #
647 # libksba is our X.509 support library
648 #
649 AM_PATH_KSBA("$NEED_KSBA_API:$NEED_KSBA_VERSION",have_ksba=yes,have_ksba=no)
650
651
652 #
653 # libusb allows us to use the integrated CCID smartcard reader driver.
654 #
655 # FiXME: Use GNUPG_CHECK_LIBUSB and modify to use separate AC_SUBSTs.
656 AC_CHECK_LIB(usb, usb_bulk_write,
657               [ LIBUSB_LIBS="$LIBUSB_LIBS -lusb"
658                 AC_DEFINE(HAVE_LIBUSB,1,
659                          [defined if libusb is available])
660                 have_libusb=yes
661              ])
662 AC_SUBST(LIBUSB_LIBS)
663 AC_CHECK_FUNCS(usb_create_match)
664
665 #
666 # Check wether it is necessary to link against libdl.
667 #
668 gnupg_dlopen_save_libs="$LIBS"
669 LIBS=""
670 AC_SEARCH_LIBS(dlopen, c dl,,,)
671 DL_LIBS=$LIBS
672 AC_SUBST(DL_LIBS)
673 LIBS="$gnupg_dlopen_save_libs"
674
675 #
676 # Checks for symcryptrun:
677 #
678
679 # libutil has openpty() and login_tty().
680 AC_CHECK_LIB(util, openpty,
681               [ LIBUTIL_LIBS="$LIBUTIL_LIBS -lutil"
682                 AC_DEFINE(HAVE_LIBUTIL,1,
683                          [defined if libutil is available])
684              ])
685 AC_SUBST(LIBUTIL_LIBS)
686
687 # shred is used to clean temporary plain text files.
688 AC_PATH_PROG(SHRED, shred, /usr/bin/shred)
689 AC_DEFINE_UNQUOTED(SHRED,
690         "${SHRED}", [defines the filename of the shred program])
691
692
693
694 #
695 # Check whether the GNU Pth library is available
696 # Note, that we include a Pth emulation for W32.
697 #
698 GNUPG_PATH_PTH
699 if test "$have_pth" = "yes"; then
700   AC_DEFINE(USE_GNU_PTH, 1,
701               [Defined if the GNU Portable Thread Library should be used])
702 else
703   AC_MSG_WARN([[
704 ***
705 *** To support concurrent access to the gpg-agent and the SCdaemon
706 *** we need the support of the GNU Portable Threads Library.
707 *** Download it from ftp://ftp.gnu.org/gnu/pth/
708 *** On a Debian GNU/Linux system you might want to try 
709 ***   apt-get install libpth-dev
710 ***]])
711 fi
712
713
714 AC_MSG_NOTICE([checking for networking options])
715
716 #
717 # Must check for network library requirements before doing link tests
718 # for ldap, for example. If ldap libs are static (or dynamic and without
719 # ELF runtime link paths), then link will fail and LDAP support won't
720 # be detected.
721 #
722 AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname,
723         [NETLIBS="-lnsl $NETLIBS"]))
724 AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt,
725         [NETLIBS="-lsocket $NETLIBS"]))
726
727 #
728 # Now try for the resolver functions so we can use DNS for SRV, PA and CERT.
729 #
730 if test x"$try_hkp" = xyes || test x"$try_http" = xyes ; then
731   AC_ARG_ENABLE(dns-srv,
732      AC_HELP_STRING([--disable-dns-srv],
733                     [disable the use of DNS SRV in HKP and HTTP]),
734                 use_dns_srv=$enableval,use_dns_srv=yes)
735 fi
736
737 AC_ARG_ENABLE(dns-pka,
738    AC_HELP_STRING([--disable-dns-pka],
739         [disable the use of PKA records in DNS]),
740    use_dns_pka=$enableval,use_dns_pka=yes)
741
742 AC_ARG_ENABLE(dns-cert,
743    AC_HELP_STRING([--disable-dns-cert],
744         [disable the use of CERT records in DNS]),
745    use_dns_cert=$enableval,use_dns_cert=yes)
746
747 if test x"$use_dns_pka" = xyes || test x"$use_dns_srv" = xyes \
748    || test x"$use_dns_cert" = xyes; then
749   _dns_save_libs=$LIBS
750   LIBS=""
751   # the double underscore thing is a glibc-ism?
752   AC_SEARCH_LIBS(res_query,resolv bind,,
753                  AC_SEARCH_LIBS(__res_query,resolv bind,,have_resolver=no))
754   AC_SEARCH_LIBS(dn_expand,resolv bind,,
755                  AC_SEARCH_LIBS(__dn_expand,resolv bind,,have_resolver=no))
756   AC_SEARCH_LIBS(dn_skipname,resolv bind,,
757                  AC_SEARCH_LIBS(__dn_skipname,resolv bind,,have_resolver=no))
758
759   if test x"$have_resolver" != xno ; then
760
761     # Make sure that the BIND 4 resolver interface is workable before
762     # enabling any code that calls it.  At some point I'll rewrite the
763     # code to use the BIND 8 resolver API.
764     # We might also want to use adns instead.
765
766     AC_MSG_CHECKING([whether the resolver is usable])
767     AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>
768 #include <netinet/in.h>
769 #include <arpa/nameser.h>
770 #include <resolv.h>],
771 [[unsigned char answer[PACKETSZ];
772   res_query("foo.bar",C_IN,T_A,answer,PACKETSZ);
773   dn_skipname(0,0); 
774   dn_expand(0,0,0,0,0);
775 ]])],have_resolver=yes,have_resolver=no)
776     AC_MSG_RESULT($have_resolver)
777
778     # This is Apple-specific and somewhat bizarre as they changed the
779     # define in bind 8 for some reason.
780
781     if test x"$have_resolver" != xyes ; then
782        AC_MSG_CHECKING(
783              [whether I can make the resolver usable with BIND_8_COMPAT])
784        AC_LINK_IFELSE([AC_LANG_PROGRAM([#define BIND_8_COMPAT
785 #include <sys/types.h>
786 #include <netinet/in.h>
787 #include <arpa/nameser.h>
788 #include <resolv.h>],
789 [[unsigned char answer[PACKETSZ];
790   res_query("foo.bar",C_IN,T_A,answer,PACKETSZ);
791   dn_skipname(0,0); dn_expand(0,0,0,0,0);
792 ]])],[have_resolver=yes ; need_compat=yes])
793        AC_MSG_RESULT($have_resolver)
794     fi
795   fi
796
797   if test x"$have_resolver" = xyes ; then
798      DNSLIBS=$LIBS
799
800      if test x"$use_dns_srv" = xyes ; then
801         AC_DEFINE(USE_DNS_SRV,1,[define to use DNS SRV])
802      fi
803
804      if test x"$use_dns_pka" = xyes ; then
805         AC_DEFINE(USE_DNS_PKA,1,[define to use our experimental DNS PKA])
806      fi
807
808      if test x"$use_dns_cert" = xyes ; then
809         AC_DEFINE(USE_DNS_CERT,1,[define to use DNS CERT])
810      fi
811
812      if test x"$need_compat" = xyes ; then
813         AC_DEFINE(BIND_8_COMPAT,1,[an Apple OSXism])
814      fi
815   else
816      use_dns_srv=no
817      use_dns_pka=no
818      use_dns_cert=no
819   fi
820
821   LIBS=$_dns_save_libs
822 fi
823
824 AC_SUBST(DNSLIBS)
825
826 AM_CONDITIONAL(USE_DNS_SRV, test x"$use_dns_srv" = xyes)
827
828
829 #
830 # Check for ADNS.
831 #
832 _cppflags="${CPPFLAGS}"
833 _ldflags="${LDFLAGS}"
834 AC_ARG_WITH(adns,
835             AC_HELP_STRING([--with-adns=DIR],
836                            [look for the adns library in DIR]),
837             [if test -d "$withval"; then
838                CPPFLAGS="${CPPFLAGS} -I$withval/include"
839                LDFLAGS="${LDFLAGS} -L$withval/lib"
840              fi])
841 AC_CHECK_HEADERS(adns.h,
842                 AC_CHECK_LIB(adns, adns_init,
843                              [have_adns=yes],
844                              [CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}]),
845                 [CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}])
846 if test "$have_adns" = "yes"; then
847   ADNSLIBS="-ladns" 
848 fi
849 AC_SUBST(ADNSLIBS)
850
851
852 #
853 # Check for LDAP
854 #
855 if test "$try_ldap" = yes ; then
856    GNUPG_CHECK_LDAP($NETLIBS)
857 fi
858
859 #
860 # Check for curl.  We fake the curl API if libcurl isn't installed.
861 # We require 7.10 or later as we use curl_version_info().
862 #
863 LIBCURL_CHECK_CONFIG([yes],[7.10],,[fake_curl=yes])
864 AM_CONDITIONAL(FAKE_CURL,test x"$fake_curl" = xyes)
865
866 # Generic, for us, means curl
867
868 if test x"$try_generic" = xyes ; then
869    AC_SUBST(GPGKEYS_CURL,"gpg2keys_curl$EXEEXT")
870 fi
871
872 #
873 # Check for sendmail
874 #
875 # This isn't necessarily sendmail itself, but anything that gives a
876 # sendmail-ish interface to the outside world.  That includes Exim,
877 # Postfix, etc.  Basically, anything that can handle "sendmail -t".
878 if test "$try_mailto" = yes ; then
879   AC_ARG_WITH(mailprog,
880       AC_HELP_STRING([--with-mailprog=NAME],
881                      [use "NAME -t" for mail transport]),
882              ,with_mailprog=yes)
883
884   if test x"$with_mailprog" = xyes ; then
885     AC_PATH_PROG(SENDMAIL,sendmail,,$PATH:/usr/sbin:/usr/libexec:/usr/lib)
886     if test "$ac_cv_path_SENDMAIL" ; then
887       GPGKEYS_MAILTO="gpg2keys_mailto"
888     fi
889   elif test x"$with_mailprog" != xno ; then
890     AC_MSG_CHECKING([for a mail transport program])
891     AC_SUBST(SENDMAIL,$with_mailprog)
892     AC_MSG_RESULT($with_mailprog)
893     GPGKEYS_MAILTO="gpg2keys_mailto"
894   fi
895 fi
896
897 AC_SUBST(GPGKEYS_MAILTO)
898
899 #
900 # Construct a printable name of the OS
901 #
902 case "${host}" in
903     *-mingw32*)
904         PRINTABLE_OS_NAME="MingW32"
905         ;;
906     *-*-cygwin*)
907         PRINTABLE_OS_NAME="Cygwin"
908         ;;
909     i?86-emx-os2 | i?86-*-os2*emx )
910         PRINTABLE_OS_NAME="OS/2"
911         ;;
912     i?86-*-msdosdjgpp*)
913         PRINTABLE_OS_NAME="MSDOS/DJGPP"
914         try_dynload=no
915         ;;
916     *-linux*)
917         PRINTABLE_OS_NAME="GNU/Linux"
918         ;;
919     *)
920         PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
921         ;;
922 esac
923 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
924                    [A human readable text with the name of the OS])
925
926
927 #
928 # Checking for iconv
929 #
930 AM_ICONV
931
932
933 #
934 # Check for gettext
935 #
936 AC_MSG_NOTICE([checking for gettext])
937 AM_PO_SUBDIRS
938 AM_GNU_GETTEXT_VERSION([0.17])
939 if test "$try_gettext" = yes; then
940   AM_GNU_GETTEXT([external],[need-ngettext])
941
942   # gettext requires some extra checks.  These really should be part of
943   # the basic AM_GNU_GETTEXT macro.  TODO: move other gettext-specific
944   # function checks to here.
945
946   AC_CHECK_FUNCS(strchr)
947 else
948   USE_NLS=no
949   USE_INCLUDED_LIBINTL=no
950   BUILD_INCLUDED_LIBINTL=no
951   POSUB=po
952   AC_SUBST(USE_NLS)
953   AC_SUBST(USE_INCLUDED_LIBINTL)
954   AC_SUBST(BUILD_INCLUDED_LIBINTL)
955   AC_SUBST(POSUB)
956 fi
957
958 # We use HAVE_LANGINFO_CODESET in a couple of places.
959 AM_LANGINFO_CODESET
960
961 # Checks required for our use locales
962 gt_LC_MESSAGES
963
964
965 #
966 # SELinux support
967 #
968 if test "$selinux_support" = yes ; then
969   AC_DEFINE(ENABLE_SELINUX_HACKS,1,[Define to enable SELinux support])
970 fi
971
972
973 #
974 # Checks for header files.
975 #
976 AC_MSG_NOTICE([checking for header files])
977 AC_HEADER_STDC
978 AC_CHECK_HEADERS([string.h unistd.h langinfo.h termio.h locale.h getopt.h])
979 AC_CHECK_HEADERS([pty.h pwd.h inttypes.h])
980 AC_HEADER_TIME
981
982
983 #
984 # Checks for typedefs, structures, and compiler characteristics.
985 #
986 AC_MSG_NOTICE([checking for system characteristics])
987 AC_C_CONST
988 AC_C_INLINE
989 AC_C_VOLATILE
990 AC_TYPE_SIZE_T
991 AC_TYPE_MODE_T
992 AC_TYPE_SIGNAL
993 AC_DECL_SYS_SIGLIST
994
995 gl_HEADER_SYS_SOCKET
996 gl_TYPE_SOCKLEN_T
997
998 AC_ARG_ENABLE(endian-check,
999               AC_HELP_STRING([--disable-endian-check],
1000               [disable the endian check and trust the OS provided macros]),
1001               endiancheck=$enableval,endiancheck=yes)
1002
1003 if test x"$endiancheck" = xyes ; then
1004   GNUPG_CHECK_ENDIAN
1005 fi
1006
1007 # fixme: we should get rid of the byte type
1008 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
1009 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
1010 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
1011 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
1012 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
1013
1014 AC_CHECK_SIZEOF(unsigned short)
1015 AC_CHECK_SIZEOF(unsigned int)
1016 AC_CHECK_SIZEOF(unsigned long)
1017 AC_CHECK_SIZEOF(unsigned long long)
1018 AC_CHECK_SIZEOF(time_t,,[[
1019 #include <stdio.h>
1020 #if TIME_WITH_SYS_TIME
1021 # include <sys/time.h>
1022 # include <time.h>
1023 #else
1024 # if HAVE_SYS_TIME_H
1025 #  include <sys/time.h>
1026 # else
1027 #  include <time.h>
1028 # endif
1029 #endif
1030 ]])
1031
1032
1033 # Ensure that we have UINT64_C before we bother to check for uint64_t
1034 # Fixme: really needed in gnupg?  I think it is only useful in libcgrypt.
1035 AC_CACHE_CHECK([for UINT64_C],[gnupg_cv_uint64_c_works],
1036    AC_COMPILE_IFELSE(AC_LANG_PROGRAM([#include <inttypes.h>
1037        uint64_t foo=UINT64_C(42);]),
1038      gnupg_cv_uint64_c_works=yes,gnupg_cv_uint64_c_works=no))
1039 if test "$gnupg_cv_uint64_c_works" = "yes" ; then
1040    AC_CHECK_SIZEOF(uint64_t)
1041 fi
1042
1043 if test "$ac_cv_sizeof_unsigned_short" = "0" \
1044    || test "$ac_cv_sizeof_unsigned_int" = "0" \
1045    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
1046     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
1047 fi
1048
1049
1050 #
1051 # Checks for library functions.
1052 #
1053 AC_MSG_NOTICE([checking for library functions])
1054 AC_CHECK_DECLS(getpagesize)
1055 AC_FUNC_FSEEKO
1056 AC_FUNC_VPRINTF
1057 AC_FUNC_FORK
1058 AC_CHECK_FUNCS([strerror strlwr tcgetattr mmap])
1059 AC_CHECK_FUNCS([strcasecmp strncasecmp ctermid times gmtime_r])
1060 AC_CHECK_FUNCS([unsetenv getpwnam getpwuid fcntl ftruncate])
1061 AC_CHECK_FUNCS([gettimeofday getrusage setrlimit clock_gettime])
1062 AC_CHECK_FUNCS([atexit raise getpagesize strftime nl_langinfo setlocale])
1063 AC_CHECK_FUNCS([waitpid wait4 sigaction sigprocmask pipe stat getaddrinfo])
1064 AC_CHECK_FUNCS([ttyname rand ftello])
1065
1066 AC_CHECK_TYPES([struct sigaction, sigset_t],,,[#include <signal.h>])
1067
1068 #
1069 # These are needed by libjnlib - fixme: we should use a jnlib.m4
1070 #
1071 AC_CHECK_FUNCS([memicmp stpcpy strsep strlwr strtoul memmove stricmp strtol])
1072 AC_CHECK_FUNCS([memrchr isascii timegm getrusage setrlimit stat setlocale])
1073 AC_CHECK_FUNCS([flockfile funlockfile fopencookie funopen])
1074
1075 #
1076 # gnulib checks
1077 #
1078 gl_SOURCE_BASE([gl])
1079 gl_M4_BASE([gl/m4])
1080 gl_MODULES([setenv mkdtemp xsize strpbrk])
1081 gl_INIT
1082
1083
1084 #
1085 # W32 specific test
1086 #
1087 GNUPG_FUNC_MKDIR_TAKES_ONE_ARG
1088
1089 #
1090 # Sanity check regex.  Tests adapted from mutt.
1091 #
1092 AC_MSG_CHECKING([whether regular expression support is requested])
1093 AC_ARG_ENABLE(regex,
1094   AC_HELP_STRING([--disable-regex],
1095     [do not handle regular expressions in trust signatures]),
1096   use_regex=$enableval, use_regex=yes)
1097 AC_MSG_RESULT($use_regex)
1098
1099 if test "$use_regex" = yes ; then
1100   _cppflags="${CPPFLAGS}"
1101   _ldflags="${LDFLAGS}"
1102   AC_ARG_WITH(regex,
1103      AC_HELP_STRING([--with-regex=DIR],[look for regex in DIR]),
1104       [
1105       if test -d "$withval" ; then
1106         CPPFLAGS="${CPPFLAGS} -I$withval/include"
1107         LDFLAGS="${LDFLAGS} -L$withval/lib"
1108       fi
1109       ],withval="")     
1110
1111   # Does the system have regex functions at all?
1112   AC_SEARCH_LIBS([regcomp], [regex])
1113   AC_CHECK_FUNC(regcomp, gnupg_cv_have_regex=yes, gnupg_cv_have_regex=no)
1114
1115   if test $gnupg_cv_have_regex = no; then
1116     use_regex=no
1117   else
1118     if test x"$cross_compiling" = xyes; then
1119       AC_MSG_WARN([cross compiling; assuming regexp libray is not broken])
1120     else
1121       AC_CACHE_CHECK([whether your system's regexp library is broken],
1122        [gnupg_cv_regex_broken],
1123        AC_TRY_RUN([
1124 #include <unistd.h>
1125 #include <regex.h>
1126 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); }],
1127        gnupg_cv_regex_broken=no, gnupg_cv_regex_broken=yes, gnupg_cv_regex_broken=yes))
1128
1129       if test $gnupg_cv_regex_broken = yes; then
1130         AC_MSG_WARN([your regex is broken - disabling regex use])
1131         use_regex=no
1132       fi
1133     fi
1134   fi
1135   CPPFLAGS="${_cppflags}"
1136   LDFLAGS="${_ldflags}"
1137 fi
1138
1139 if test "$use_regex" != yes ; then
1140   AC_DEFINE(DISABLE_REGEX,1, [Define to disable regular expression support])
1141 fi
1142 AM_CONDITIONAL(DISABLE_REGEX, test x"$use_regex" != xyes)
1143
1144
1145
1146 #
1147 # Do we have zlib? Must do it here because Solaris failed
1148 # when compiling a conftest (due to the "-lz" from LIBS).
1149 # Note that we combine zlib and bzlib2 in ZLIBS.
1150 #
1151 _cppflags="${CPPFLAGS}"
1152 _ldflags="${LDFLAGS}"
1153 AC_ARG_WITH(zlib,
1154   [  --with-zlib=DIR         use libz in DIR],[
1155     if test -d "$withval"; then
1156       CPPFLAGS="${CPPFLAGS} -I$withval/include"
1157       LDFLAGS="${LDFLAGS} -L$withval/lib"
1158     fi
1159   ])
1160
1161 AC_CHECK_HEADER(zlib.h,
1162       AC_CHECK_LIB(z, deflateInit2_,
1163        ZLIBS="-lz",
1164        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
1165        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags})
1166
1167 #
1168 # Check whether we can support bzip2
1169
1170 if test "$use_bzip2" = yes ; then
1171   _cppflags="${CPPFLAGS}"
1172   _ldflags="${LDFLAGS}"
1173   AC_ARG_WITH(bzip2,
1174      AC_HELP_STRING([--with-bzip2=DIR],[look for bzip2 in DIR]),
1175       [
1176       if test -d "$withval" ; then
1177         CPPFLAGS="${CPPFLAGS} -I$withval/include"
1178         LDFLAGS="${LDFLAGS} -L$withval/lib"
1179       fi
1180       ],withval="")
1181
1182   # Checking alongside stdio.h as an early version of bzip2 (1.0)
1183   # required stdio.h to be included before bzlib.h, and Solaris 9 is 
1184   # woefully out of date.
1185   if test "$withval" != no ; then
1186      AC_CHECK_HEADER(bzlib.h,
1187         AC_CHECK_LIB(bz2,BZ2_bzCompressInit,
1188           [
1189           have_bz2=yes
1190           ZLIBS="$ZLIBS -lbz2"
1191           AC_DEFINE(HAVE_BZIP2,1,
1192                   [Defined if the bz2 compression library is available])
1193           ],
1194           CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
1195           CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags},[#include <stdio.h>])
1196   fi
1197 fi
1198 AM_CONDITIONAL(ENABLE_BZIP2_SUPPORT,test x"$have_bz2" = "xyes")
1199 AC_SUBST(ZLIBS)
1200
1201
1202 # Check for readline support
1203 GNUPG_CHECK_READLINE
1204
1205 #
1206 # Allow users to append something to the version string without
1207 # flagging it as development version.  The user version parts is
1208 # considered everything after a dash. 
1209 #
1210 if test "$development_version" != yes; then
1211   changequote(,)dnl
1212   tmp_pat='[a-zA-Z]'
1213   changequote([,])dnl
1214   if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
1215     development_version=yes
1216   fi
1217 fi
1218 if test "$development_version" = yes; then
1219     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
1220             [Defined if this is not a regular release])
1221 fi
1222
1223 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
1224
1225 GNUPG_CHECK_GNUMAKE
1226
1227 # Add some extra libs here so that previous tests don't fail for
1228 # mysterious reasons - the final link step should bail out.
1229 # W32SOCKLIBS is also defined so that if can be used for tools not
1230 # requiring any network stuff but linking to code in libcommon which
1231 # tracks in winsock stuff (e.g. init_common_subsystems.
1232 if test "$have_w32_system" = yes; then
1233    W32SOCKLIBS="-lws2_32"
1234    NETLIBS="${NETLIBS} ${W32SOCKLIBS}"
1235 fi
1236
1237 AC_SUBST(NETLIBS)
1238 AC_SUBST(W32SOCKLIBS)
1239
1240 #
1241 # Setup gcc specific options
1242 #
1243 AC_MSG_NOTICE([checking for cc features])
1244 if test "$GCC" = yes; then
1245     # Note that it is okay to use CFLAGS here because this are just
1246     # warning options and the user should have a chance of overriding
1247     # them.
1248     if test "$USE_MAINTAINER_MODE" = "yes"; then
1249         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
1250         CFLAGS="$CFLAGS -Wformat -Wno-format-y2k -Wformat-security"
1251     else
1252         CFLAGS="$CFLAGS -Wall"
1253     fi
1254
1255     AC_MSG_CHECKING([if gcc supports -Wno-pointer-sign])
1256     _gcc_cflags_save=$CFLAGS
1257     CFLAGS="-Wno-pointer-sign"
1258     AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),_gcc_psign=yes,_gcc_psign=no)
1259     AC_MSG_RESULT($_gcc_psign)
1260     CFLAGS=$_gcc_cflags_save;
1261     if test x"$_gcc_psign" = xyes ; then
1262        CFLAGS="$CFLAGS -Wno-pointer-sign"
1263     fi
1264
1265     AC_MSG_CHECKING([if gcc supports -Wpointer-arith])
1266     _gcc_cflags_save=$CFLAGS
1267     CFLAGS="-Wpointer-arith"
1268     AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),_gcc_psign=yes,_gcc_psign=no)
1269     AC_MSG_RESULT($_gcc_psign)
1270     CFLAGS=$_gcc_cflags_save;
1271     if test x"$_gcc_psign" = xyes ; then
1272        CFLAGS="$CFLAGS -Wpointer-arith"
1273     fi
1274 fi
1275
1276
1277 #
1278 # This is handy for debugging so the compiler doesn't rearrange
1279 # things and eliminate variables.
1280 #
1281 AC_ARG_ENABLE(optimization,
1282    AC_HELP_STRING([--disable-optimization],
1283                   [disable compiler optimization]),
1284                   [if test $enableval = no ; then
1285                       CFLAGS=`echo $CFLAGS | sed 's/-O[[0-9]]//'`
1286                    fi])
1287
1288 #
1289 # Prepare building of estream
1290 #
1291 estream_INIT
1292
1293
1294 #
1295 # Decide what to build
1296 #
1297 if test "$have_adns" = "yes"; then
1298   AC_SUBST(GPGKEYS_KDNS, "gpg2keys_kdns$EXEEXT")
1299 fi
1300
1301
1302 missing_pth=no
1303 if test $have_ksba = no; then
1304   build_gpgsm=no
1305   build_scdaemon=no
1306 fi
1307
1308 build_agent_threaded=""
1309 if test "$build_agent" = "yes"; then
1310   if test $have_pth = no; then
1311      build_agent_threaded="(not multi-threaded)"
1312      missing_pth=yes
1313   fi
1314 fi
1315
1316 build_scdaemon_extra=""
1317 if test "$build_scdaemon" = "yes"; then
1318   tmp=""
1319   if test $have_pth = no; then
1320      build_scdaemon_extra="not multi-threaded"
1321      tmp=", "
1322      missing_pth=yes
1323   fi
1324   if test $have_libusb = no; then
1325      build_scdaemon_extra="${tmp}without internal CCID driver"
1326      tmp=", "
1327   fi
1328   if test -n "$build_scdaemon_extra"; then
1329      build_scdaemon_extra="(${build_scdaemon_extra})"
1330   fi
1331 fi
1332
1333
1334 if test "$build_agent_only" = "yes" ; then
1335   build_gpg=no
1336   build_gpgsm=no
1337   build_scdaemon=no
1338   build_tools=no
1339   build_doc=no
1340 fi
1341
1342
1343 AM_CONDITIONAL(BUILD_GPG,   test "$build_gpg" = "yes")
1344 AM_CONDITIONAL(BUILD_GPGSM, test "$build_gpgsm" = "yes")
1345 AM_CONDITIONAL(BUILD_AGENT, test "$build_agent" = "yes")
1346 AM_CONDITIONAL(BUILD_SCDAEMON, test "$build_scdaemon" = "yes")
1347 AM_CONDITIONAL(BUILD_TOOLS, test "$build_tools" = "yes")
1348 AM_CONDITIONAL(BUILD_DOC,   test "$build_doc" = "yes")
1349 AM_CONDITIONAL(BUILD_SYMCRYPTRUN, test "$build_symcryptrun" = "yes")
1350
1351 AM_CONDITIONAL(RUN_GPG_TESTS,
1352         test x$cross_compiling = xno -a "$build_gpg" = yes )
1353
1354
1355 #
1356 # Print errors here so that they are visible all
1357 # together and the user can acquire them all together.
1358 #
1359 die=no
1360 if test "$have_gpg_error" = "no"; then
1361    die=yes
1362    AC_MSG_NOTICE([[
1363 ***  
1364 *** You need libgpg-error to build this program.
1365 **  This library is for example available at
1366 ***   ftp://ftp.gnupg.org/gcrypt/libgpg-error
1367 *** (at least version $NEED_GPG_ERROR_VERSION is required.)
1368 ***]])
1369 fi
1370 if test "$have_libgcrypt" = "no"; then
1371    die=yes
1372    AC_MSG_NOTICE([[
1373 ***  
1374 *** You need libgcrypt to build this program.
1375 **  This library is for example available at
1376 ***   ftp://ftp.gnupg.org/gcrypt/libgcrypt/
1377 *** (at least version $NEED_LIBGCRYPT_VERSION using API $NEED_LIBGCRYPT_API is required.)
1378 ***]])
1379 fi
1380 if test "$have_libassuan" = "no"; then
1381    die=yes
1382    AC_MSG_NOTICE([[
1383 ***
1384 *** You need libassuan with Pth support to build this program.
1385 *** This library is for example available at
1386 ***   ftp://ftp.gnupg.org/gcrypt/libassuan/
1387 *** (at least version $NEED_LIBASSUAN_VERSION (API $NEED_LIBASSUAN_API) is required).
1388 ***]])
1389 fi
1390 if test "$have_ksba" = "no"; then
1391     AC_MSG_NOTICE([[
1392 ***
1393 *** You need libksba to build this program.
1394 *** This library is for example available at
1395 ***   ftp://ftp.gnupg.org/gcrypt/libksba/
1396 *** (at least version $NEED_KSBA_VERSION using API $NEED_KSBA_API is required).
1397 ***]])
1398 fi
1399 if test "$missing_pth" = "yes"; then
1400     AC_MSG_NOTICE([[
1401 ***
1402 *** It is now required to build with support for the
1403 *** GNU Portable Threads Library (Pth). Please install this
1404 *** library first.  The library is for example available at
1405 ***   ftp://ftp.gnu.org/gnu/pth/
1406 *** On a Debian GNU/Linux system you can install it using 
1407 ***   apt-get install libpth-dev
1408 *** To build GnuPG for Windows you need to use the W32PTH
1409 *** package; available at:
1410 ***   ftp://ftp.g10code.com/g10code/w32pth/
1411 ***]])
1412    die=yes
1413 fi
1414
1415 if test "$die" = "yes"; then
1416     AC_MSG_ERROR([[
1417 ***
1418 *** Required libraries not found. Please consult the above messages
1419 *** and install them before running configure again.
1420 ***]])
1421 fi
1422
1423
1424
1425 AC_CONFIG_FILES([ m4/Makefile 
1426 Makefile
1427 po/Makefile.in
1428 gl/Makefile
1429 include/Makefile
1430 jnlib/Makefile
1431 common/Makefile
1432 kbx/Makefile
1433 g10/Makefile
1434 sm/Makefile
1435 agent/Makefile
1436 scd/Makefile
1437 keyserver/Makefile
1438 keyserver/gpg2keys_mailto
1439 keyserver/gpg2keys_test
1440 tools/gpg-zip
1441 tools/Makefile
1442 doc/Makefile
1443 tests/Makefile
1444 tests/openpgp/Makefile
1445 tests/pkits/Makefile
1446 ])
1447 AC_OUTPUT
1448
1449
1450 echo "
1451         GnuPG v${VERSION} has been configured as follows:
1452         
1453         Platform:  $PRINTABLE_OS_NAME ($host)
1454
1455         OpenPGP:   $build_gpg
1456         S/MIME:    $build_gpgsm
1457         Agent:     $build_agent $build_agent_threaded
1458         Smartcard: $build_scdaemon $build_scdaemon_extra
1459
1460         Protect tool:      $show_gnupg_protect_tool_pgm
1461         Default agent:     $show_gnupg_agent_pgm
1462         Default pinentry:  $show_gnupg_pinentry_pgm
1463         Default scdaemon:  $show_gnupg_scdaemon_pgm
1464         Default dirmngr:   $show_gnupg_dirmngr_pgm
1465 "
1466 if test x"$use_regex" != xyes ; then
1467 echo "
1468         Warning: No regular expression support available.
1469                  OpenPGP trust signatures won't work.
1470                  gpg-check-pattern will not be build.
1471 "
1472 fi
1473 if test  x"$use_camellia" = xyes ; then
1474   echo
1475   echo "WARNING: The Camellia cipher for gpg is for testing only"
1476   echo "         and is NOT for production use!"
1477   echo
1478 fi
1479