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