libdns: Let kernel to decide the local port.
[gnupg.git] / configure.ac
1 # configure.ac - for GnuPG 2.1
2 # Copyright (C) 1998-2017 Free Software Foundation, Inc.
3 # Copyright (C) 1998-2017 Werner Koch
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 <https://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.14"
23
24 # To build a release you need to create a tag with the version number
25 # (git tag -s gnupg-2.n.m) and run "./autogen.sh --force".  Please
26 # bump the version number immediately *after* the release and do
27 # another commit and push so that the git magic is able to work.
28 m4_define([mym4_package],[gnupg])
29 m4_define([mym4_major], [2])
30 m4_define([mym4_minor], [3])
31 m4_define([mym4_micro], [0])
32
33 # To start a new development series, i.e a new major or minor number
34 # you need to mark an arbitrary commit before the first beta release
35 # with an annotated tag.  For example the 2.1 branch starts off with
36 # the tag "gnupg-2.1-base".  This is used as the base for counting
37 # beta numbers before the first release of a series.
38
39 # Below is m4 magic to extract and compute the git revision number,
40 # the decimalized short revision number, a beta version string and a
41 # flag indicating a development version (mym4_isbeta).  Note that the
42 # m4 processing is done by autoconf and not during the configure run.
43 m4_define([mym4_verslist], m4_split(m4_esyscmd([./autogen.sh --find-version] \
44                            mym4_package mym4_major mym4_minor mym4_micro),[:]))
45 m4_define([mym4_isbeta],       m4_argn(2, mym4_verslist))
46 m4_define([mym4_version],      m4_argn(4, mym4_verslist))
47 m4_define([mym4_revision],     m4_argn(7, mym4_verslist))
48 m4_define([mym4_revision_dec], m4_argn(8, mym4_verslist))
49 m4_esyscmd([echo ]mym4_version[>VERSION])
50 AC_INIT([mym4_package],[mym4_version], [https://bugs.gnupg.org])
51
52 # When changing the SWDB tag please also adjust the hard coded tags in
53 # build-aux/speedo.mk and Makefile.am
54 AC_DEFINE_UNQUOTED(GNUPG_SWDB_TAG, "gnupg22", [swdb tag for this branch])
55
56 NEED_GPG_ERROR_VERSION=1.24
57
58 NEED_LIBGCRYPT_API=1
59 NEED_LIBGCRYPT_VERSION=1.7.0
60
61 NEED_LIBASSUAN_API=2
62 NEED_LIBASSUAN_VERSION=2.4.3
63
64 NEED_KSBA_API=1
65 NEED_KSBA_VERSION=1.3.4
66
67 NEED_NTBTLS_API=1
68 NEED_NTBTLS_VERSION=0.1.0
69
70 NEED_NPTH_API=1
71 NEED_NPTH_VERSION=1.2
72
73
74 NEED_GNUTLS_VERSION=3.0
75
76 NEED_SQLITE_VERSION=3.7
77
78 development_version=mym4_isbeta
79 PACKAGE=$PACKAGE_NAME
80 PACKAGE_GT=${PACKAGE_NAME}2
81 VERSION=$PACKAGE_VERSION
82
83 AC_CONFIG_AUX_DIR([build-aux])
84 AC_CONFIG_SRCDIR([sm/gpgsm.c])
85 AC_CONFIG_HEADER([config.h])
86 AM_INIT_AUTOMAKE([serial-tests dist-bzip2 no-dist-gzip])
87 AC_CANONICAL_HOST
88 AB_INIT
89
90 AC_GNU_SOURCE
91
92
93 # Some status variables.
94 have_gpg_error=no
95 have_libgcrypt=no
96 have_libassuan=no
97 have_ksba=no
98 have_ntbtls=no
99 have_gnutls=no
100 have_sqlite=no
101 have_npth=no
102 have_libusb=no
103 have_system_resolver=no
104 gnupg_have_ldap="n/a"
105
106 use_zip=yes
107 use_bzip2=yes
108 use_exec=yes
109 use_trust_models=yes
110 use_tofu=yes
111 use_libdns=yes
112 card_support=yes
113 use_ccid_driver=auto
114 dirmngr_auto_start=yes
115 use_tls_library=no
116 large_secmem=no
117 show_tor_support=no
118
119 # gpg is a required part and can't be disabled anymore.
120 build_gpg=yes
121 GNUPG_BUILD_PROGRAM(gpgsm, yes)
122 # The agent is a required part and can't be disabled anymore.
123 build_agent=yes
124 GNUPG_BUILD_PROGRAM(scdaemon, yes)
125 GNUPG_BUILD_PROGRAM(g13, no)
126 GNUPG_BUILD_PROGRAM(dirmngr, yes)
127 GNUPG_BUILD_PROGRAM(doc, yes)
128 GNUPG_BUILD_PROGRAM(symcryptrun, no)
129 # We use gpgtar to unpack test data, hence we always build it.  If the
130 # user opts out, we simply don't install it.
131 GNUPG_BUILD_PROGRAM(gpgtar, yes)
132 GNUPG_BUILD_PROGRAM(wks-tools, no)
133
134 AC_SUBST(PACKAGE)
135 AC_SUBST(PACKAGE_GT)
136 AC_SUBST(VERSION)
137 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
138 AC_DEFINE_UNQUOTED(PACKAGE_GT, "$PACKAGE_GT",
139                                 [Name of this package for gettext])
140 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
141 AC_DEFINE_UNQUOTED(PACKAGE_BUGREPORT, "$PACKAGE_BUGREPORT",
142                                         [Bug report address])
143 AC_DEFINE_UNQUOTED(NEED_LIBGCRYPT_VERSION, "$NEED_LIBGCRYPT_VERSION",
144                                        [Required version of Libgcrypt])
145 AC_DEFINE_UNQUOTED(NEED_KSBA_VERSION, "$NEED_KSBA_VERSION",
146                                        [Required version of Libksba])
147 AC_DEFINE_UNQUOTED(NEED_NTBTLS_VERSION, "$NEED_NTBTLS_VERSION",
148                                        [Required version of NTBTLS])
149
150
151
152 # The default is to use the modules from this package and the few
153 # other packages in a standard place; i.e where this package gets
154 # installed.  With these options it is possible to override these
155 # ${prefix} depended values with fixed paths, which can't be replaced
156 # at make time.  See also am/cmacros.am and the defaults in AH_BOTTOM.
157 AC_ARG_WITH(agent-pgm,
158     [  --with-agent-pgm=PATH  Use PATH as the default for the agent)],
159           GNUPG_AGENT_PGM="$withval", GNUPG_AGENT_PGM="" )
160 AC_SUBST(GNUPG_AGENT_PGM)
161 AM_CONDITIONAL(GNUPG_AGENT_PGM, test -n "$GNUPG_AGENT_PGM")
162 show_gnupg_agent_pgm="(default)"
163 test -n "$GNUPG_AGENT_PGM" && show_gnupg_agent_pgm="$GNUPG_AGENT_PGM"
164
165 AC_ARG_WITH(pinentry-pgm,
166     [  --with-pinentry-pgm=PATH  Use PATH as the default for the pinentry)],
167           GNUPG_PINENTRY_PGM="$withval", GNUPG_PINENTRY_PGM="" )
168 AC_SUBST(GNUPG_PINENTRY_PGM)
169 AM_CONDITIONAL(GNUPG_PINENTRY_PGM, test -n "$GNUPG_PINENTRY_PGM")
170 show_gnupg_pinentry_pgm="(default)"
171 test -n "$GNUPG_PINENTRY_PGM" && show_gnupg_pinentry_pgm="$GNUPG_PINENTRY_PGM"
172
173
174 AC_ARG_WITH(scdaemon-pgm,
175     [  --with-scdaemon-pgm=PATH  Use PATH as the default for the scdaemon)],
176           GNUPG_SCDAEMON_PGM="$withval", GNUPG_SCDAEMON_PGM="" )
177 AC_SUBST(GNUPG_SCDAEMON_PGM)
178 AM_CONDITIONAL(GNUPG_SCDAEMON_PGM, test -n "$GNUPG_SCDAEMON_PGM")
179 show_gnupg_scdaemon_pgm="(default)"
180 test -n "$GNUPG_SCDAEMON_PGM" && show_gnupg_scdaemon_pgm="$GNUPG_SCDAEMON_PGM"
181
182
183 AC_ARG_WITH(dirmngr-pgm,
184     [  --with-dirmngr-pgm=PATH  Use PATH as the default for the dirmngr)],
185           GNUPG_DIRMNGR_PGM="$withval", GNUPG_DIRMNGR_PGM="" )
186 AC_SUBST(GNUPG_DIRMNGR_PGM)
187 AM_CONDITIONAL(GNUPG_DIRMNGR_PGM, test -n "$GNUPG_DIRMNGR_PGM")
188 show_gnupg_dirmngr_pgm="(default)"
189 test -n "$GNUPG_DIRMNGR_PGM" && show_gnupg_dirmngr_pgm="$GNUPG_DIRMNGR_PGM"
190
191 AC_ARG_WITH(protect-tool-pgm,
192     [  --with-protect-tool-pgm=PATH  Use PATH as the default for the protect-tool)],
193           GNUPG_PROTECT_TOOL_PGM="$withval", GNUPG_PROTECT_TOOL_PGM="" )
194 AC_SUBST(GNUPG_PROTECT_TOOL_PGM)
195 AM_CONDITIONAL(GNUPG_PROTECT_TOOL_PGM, test -n "$GNUPG_PROTECT_TOOL_PGM")
196 show_gnupg_protect_tool_pgm="(default)"
197 test -n "$GNUPG_PROTECT_TOOL_PGM" \
198       && show_gnupg_protect_tool_pgm="$GNUPG_PROTECT_TOOL_PGM"
199
200 AC_ARG_WITH(dirmngr-ldap-pgm,
201     [  --with-dirmngr-ldap-pgm=PATH  Use PATH as the default for the dirmngr ldap wrapper)],
202           GNUPG_DIRMNGR_LDAP_PGM="$withval", GNUPG_DIRMNGR_LDAP_PGM="" )
203 AC_SUBST(GNUPG_DIRMNGR_LDAP_PGM)
204 AM_CONDITIONAL(GNUPG_DIRMNGR_LDAP_PGM, test -n "$GNUPG_DIRMNGR_LDAP_PGM")
205 show_gnupg_dirmngr_ldap_pgm="(default)"
206 test -n "$GNUPG_DIRMNGR_LDAP_PGM" \
207       && show_gnupg_dirmngr_ldap_pgm="$GNUPG_DIRMNGR_LDAP_PGM"
208
209
210 #
211 # For a long time gpg 2.x was installed as gpg2.  This changed with
212 # 2.2.  This option can be used to install gpg under the name gpg2.
213 #
214 AC_ARG_ENABLE(gpg-is-gpg2,
215     AC_HELP_STRING([--enable-gpg-is-gpg2],[Set installed name of gpg to gpg2]),
216     gpg_is_gpg2=$enableval)
217 if test "$gpg_is_gpg2" = "yes"; then
218    AC_DEFINE(USE_GPG2_HACK, 1, [Define to install gpg as gpg2])
219 fi
220 AM_CONDITIONAL(USE_GPG2_HACK, test "$gpg_is_gpg2" = "yes")
221
222
223 # SELinux support includes tracking of sensitive files to avoid
224 # leaking their contents through processing these files by gpg itself
225 AC_MSG_CHECKING([whether SELinux support is requested])
226 AC_ARG_ENABLE(selinux-support,
227               AC_HELP_STRING([--enable-selinux-support],
228                              [enable SELinux support]),
229               selinux_support=$enableval, selinux_support=no)
230 AC_MSG_RESULT($selinux_support)
231
232
233 AC_MSG_CHECKING([whether to allocate extra secure memory])
234 AC_ARG_ENABLE(large-secmem,
235               AC_HELP_STRING([--enable-large-secmem],
236                              [allocate extra secure memory]),
237               large_secmem=$enableval, large_secmem=no)
238 AC_MSG_RESULT($large_secmem)
239 if test "$large_secmem" = yes ; then
240    SECMEM_BUFFER_SIZE=65536
241 else
242    SECMEM_BUFFER_SIZE=32768
243 fi
244 AC_DEFINE_UNQUOTED(SECMEM_BUFFER_SIZE,$SECMEM_BUFFER_SIZE,
245                    [Size of secure memory buffer])
246
247 AC_MSG_CHECKING([calibrated passphrase-stretching (s2k) duration])
248 AC_ARG_WITH(agent-s2k-calibration,
249               AC_HELP_STRING([--with-agent-s2k-calibration=MSEC],
250                              [calibrate passphrase stretching (s2k) to MSEC milliseconds]),
251               agent_s2k_calibration=$withval, agent_s2k_calibration=100)
252 AC_MSG_RESULT($agent_s2k_calibration milliseconds)
253 AC_DEFINE_UNQUOTED(AGENT_S2K_CALIBRATION, $agent_s2k_calibration,
254                    [Agent s2k calibration time (ms)])
255
256 AC_MSG_CHECKING([whether to enable trust models])
257 AC_ARG_ENABLE(trust-models,
258               AC_HELP_STRING([--disable-trust-models],
259                              [disable all trust models except "always"]),
260               use_trust_models=$enableval)
261 AC_MSG_RESULT($use_trust_models)
262 if test "$use_trust_models" = no ; then
263     AC_DEFINE(NO_TRUST_MODELS, 1,
264              [Define to include only trust-model always])
265 fi
266
267 AC_MSG_CHECKING([whether to enable TOFU])
268 AC_ARG_ENABLE(tofu,
269                 AC_HELP_STRING([--disable-tofu],
270                                [disable the TOFU trust model]),
271               use_tofu=$enableval, use_tofu=$use_trust_models)
272 AC_MSG_RESULT($use_tofu)
273 if test "$use_trust_models" = no && test "$use_tofu" = yes; then
274     AC_MSG_ERROR([both --disable-trust-models and --enable-tofu given])
275 fi
276
277 AC_MSG_CHECKING([whether to enable libdns])
278 AC_ARG_ENABLE(libdns,
279                 AC_HELP_STRING([--disable-libdns],
280                                [do not build with libdns support]),
281               use_libdns=$enableval, use_libdns=yes)
282 AC_MSG_RESULT($use_libdns)
283 if test x"$use_libdns" = xyes ; then
284     AC_DEFINE(USE_LIBDNS, 1, [Build with integrated libdns support])
285 fi
286 AM_CONDITIONAL(USE_LIBDNS, test "$use_libdns" = yes)
287
288
289 #
290 # Options to disable algorithm
291 #
292
293 GNUPG_GPG_DISABLE_ALGO([rsa],[RSA public key])
294 # Elgamal is a MUST algorithm
295 # DSA is a MUST algorithm
296 GNUPG_GPG_DISABLE_ALGO([ecdh],[ECDH public key])
297 GNUPG_GPG_DISABLE_ALGO([ecdsa],[ECDSA public key])
298 GNUPG_GPG_DISABLE_ALGO([eddsa],[EdDSA public key])
299
300 GNUPG_GPG_DISABLE_ALGO([idea],[IDEA cipher])
301 # 3DES is a MUST algorithm
302 GNUPG_GPG_DISABLE_ALGO([cast5],[CAST5 cipher])
303 GNUPG_GPG_DISABLE_ALGO([blowfish],[BLOWFISH cipher])
304 GNUPG_GPG_DISABLE_ALGO([aes128],[AES128 cipher])
305 GNUPG_GPG_DISABLE_ALGO([aes192],[AES192 cipher])
306 GNUPG_GPG_DISABLE_ALGO([aes256],[AES256 cipher])
307 GNUPG_GPG_DISABLE_ALGO([twofish],[TWOFISH cipher])
308 GNUPG_GPG_DISABLE_ALGO([camellia128],[CAMELLIA128 cipher])
309 GNUPG_GPG_DISABLE_ALGO([camellia192],[CAMELLIA192 cipher])
310 GNUPG_GPG_DISABLE_ALGO([camellia256],[CAMELLIA256 cipher])
311
312 GNUPG_GPG_DISABLE_ALGO([md5],[MD5 hash])
313 # SHA1 is a MUST algorithm
314 GNUPG_GPG_DISABLE_ALGO([rmd160],[RIPE-MD160 hash])
315 GNUPG_GPG_DISABLE_ALGO([sha224],[SHA-224 hash])
316 # SHA256 is a MUST algorithm for GnuPG.
317 GNUPG_GPG_DISABLE_ALGO([sha384],[SHA-384 hash])
318 GNUPG_GPG_DISABLE_ALGO([sha512],[SHA-512 hash])
319
320
321 # Allow disabling of zip support.
322 # This is in general not a good idea because according to rfc4880 OpenPGP
323 # implementations SHOULD support ZLIB.
324 AC_MSG_CHECKING([whether to enable the ZIP and ZLIB compression algorithm])
325 AC_ARG_ENABLE(zip,
326    AC_HELP_STRING([--disable-zip],
327                   [disable the ZIP and ZLIB compression algorithm]),
328    use_zip=$enableval)
329 AC_MSG_RESULT($use_zip)
330
331 # Allow disabling of bzib2 support.
332 # It is defined only after we confirm the library is available later
333 AC_MSG_CHECKING([whether to enable the BZIP2 compression algorithm])
334 AC_ARG_ENABLE(bzip2,
335    AC_HELP_STRING([--disable-bzip2],[disable the BZIP2 compression algorithm]),
336    use_bzip2=$enableval)
337 AC_MSG_RESULT($use_bzip2)
338
339 # Configure option to allow or disallow execution of external
340 # programs, like a photo viewer.
341 AC_MSG_CHECKING([whether to enable external program execution])
342 AC_ARG_ENABLE(exec,
343     AC_HELP_STRING([--disable-exec],[disable all external program execution]),
344     use_exec=$enableval)
345 AC_MSG_RESULT($use_exec)
346 if test "$use_exec" = no ; then
347     AC_DEFINE(NO_EXEC,1,[Define to disable all external program execution])
348 fi
349
350 if test "$use_exec" = yes ; then
351   AC_MSG_CHECKING([whether to enable photo ID viewing])
352   AC_ARG_ENABLE(photo-viewers,
353       [  --disable-photo-viewers disable photo ID viewers],
354       [if test "$enableval" = no ; then
355          AC_DEFINE(DISABLE_PHOTO_VIEWER,1,[define to disable photo viewing])
356       fi],enableval=yes)
357   gnupg_cv_enable_photo_viewers=$enableval
358   AC_MSG_RESULT($enableval)
359
360   if test "$gnupg_cv_enable_photo_viewers" = yes ; then
361     AC_MSG_CHECKING([whether to use a fixed photo ID viewer])
362     AC_ARG_WITH(photo-viewer,
363         [  --with-photo-viewer=FIXED_VIEWER  set a fixed photo ID viewer],
364         [if test "$withval" = yes ; then
365            withval=no
366         elif test "$withval" != no ; then
367            AC_DEFINE_UNQUOTED(FIXED_PHOTO_VIEWER,"$withval",
368                             [if set, restrict photo-viewer to this])
369         fi],withval=no)
370     AC_MSG_RESULT($withval)
371   fi
372 fi
373
374
375 #
376 # Check for the key/uid cache size.  This can't be zero, but can be
377 # pretty small on embedded systems.  This is used for the gpg part.
378 #
379 AC_MSG_CHECKING([for the size of the key and uid cache])
380 AC_ARG_ENABLE(key-cache,
381         AC_HELP_STRING([--enable-key-cache=SIZE],
382                        [Set key cache to SIZE (default 4096)]),,enableval=4096)
383 if test "$enableval" = "no"; then
384    enableval=5
385 elif test "$enableval" = "yes" || test "$enableval" = ""; then
386    enableval=4096
387 fi
388 changequote(,)dnl
389 key_cache_size=`echo "$enableval" | sed 's/[A-Za-z]//g'`
390 changequote([,])dnl
391 if test "$enableval" != "$key_cache_size" || test "$key_cache_size" -lt 5; then
392    AC_MSG_ERROR([invalid key-cache size])
393 fi
394 AC_MSG_RESULT($key_cache_size)
395 AC_DEFINE_UNQUOTED(PK_UID_CACHE_SIZE,$key_cache_size,
396                   [Size of the key and UID caches])
397
398
399
400 #
401 # Check whether we want to use Linux capabilities
402 #
403 AC_MSG_CHECKING([whether use of capabilities is requested])
404 AC_ARG_WITH(capabilities,
405     [  --with-capabilities     use linux capabilities [default=no]],
406 [use_capabilities="$withval"],[use_capabilities=no])
407 AC_MSG_RESULT($use_capabilities)
408
409 #
410 # Check whether to disable the card support
411 AC_MSG_CHECKING([whether smartcard support is requested])
412 AC_ARG_ENABLE(card-support,
413               AC_HELP_STRING([--disable-card-support],
414                              [disable smartcard support]),
415               card_support=$enableval)
416 AC_MSG_RESULT($card_support)
417 if test "$card_support" = yes ; then
418   AC_DEFINE(ENABLE_CARD_SUPPORT,1,[Define to include smartcard support])
419 else
420   build_scdaemon=no
421 fi
422
423 #
424 # Allow disabling of internal CCID support.
425 # It is defined only after we confirm the library is available later
426 #
427 AC_MSG_CHECKING([whether to enable the internal CCID driver])
428 AC_ARG_ENABLE(ccid-driver,
429               AC_HELP_STRING([--disable-ccid-driver],
430                              [disable the internal CCID driver]),
431               use_ccid_driver=$enableval)
432 AC_MSG_RESULT($use_ccid_driver)
433
434 AC_MSG_CHECKING([whether to auto start dirmngr])
435 AC_ARG_ENABLE(dirmngr-auto-start,
436               AC_HELP_STRING([--disable-dirmngr-auto-start],
437                              [disable auto starting of the dirmngr]),
438               dirmngr_auto_start=$enableval)
439 AC_MSG_RESULT($dirmngr_auto_start)
440 if test "$dirmngr_auto_start" = yes ; then
441     AC_DEFINE(USE_DIRMNGR_AUTO_START,1,
442               [Define to enable auto starting of the dirmngr])
443 fi
444
445
446 #
447 # To avoid double inclusion of config.h which might happen at some
448 # places, we add the usual double inclusion protection at the top of
449 # config.h.
450 #
451 AH_TOP([
452 #ifndef GNUPG_CONFIG_H_INCLUDED
453 #define GNUPG_CONFIG_H_INCLUDED
454 ])
455
456 #
457 # Stuff which goes at the bottom of config.h.
458 #
459 AH_BOTTOM([
460 /* This is the major version number of GnuPG so that
461    source included files can test for this.  Note, that
462    we use 2 here even for GnuPG 1.9.x. */
463 #define GNUPG_MAJOR_VERSION 2
464
465 /* Now to separate file name parts.
466    Please note that the string version must not contain more
467    than one character because the code assumes strlen()==1 */
468 #ifdef HAVE_DOSISH_SYSTEM
469 #define DIRSEP_C '\\'
470 #define DIRSEP_S "\\"
471 #define EXTSEP_C '.'
472 #define EXTSEP_S "."
473 #define PATHSEP_C ';'
474 #define PATHSEP_S ";"
475 #define EXEEXT_S ".exe"
476 #else
477 #define DIRSEP_C '/'
478 #define DIRSEP_S "/"
479 #define EXTSEP_C '.'
480 #define EXTSEP_S "."
481 #define PATHSEP_C ':'
482 #define PATHSEP_S ":"
483 #define EXEEXT_S ""
484 #endif
485
486 /* This is the same as VERSION, but should be overridden if the
487    platform cannot handle things like dots '.' in filenames. Set
488    SAFE_VERSION_DOT and SAFE_VERSION_DASH to whatever SAFE_VERSION
489    uses for dots and dashes. */
490 #define SAFE_VERSION VERSION
491 #define SAFE_VERSION_DOT  '.'
492 #define SAFE_VERSION_DASH '-'
493
494 /* Some global constants.
495  * Note that the homedir must not end in a slash.  */
496 #ifdef HAVE_DOSISH_SYSTEM
497 # ifdef HAVE_DRIVE_LETTERS
498 #  define GNUPG_DEFAULT_HOMEDIR "c:/gnupg"
499 # else
500 #  define GNUPG_DEFAULT_HOMEDIR "/gnupg"
501 # endif
502 #elif defined(__VMS)
503 #define GNUPG_DEFAULT_HOMEDIR "/SYS$LOGIN/gnupg"
504 #else
505 #define GNUPG_DEFAULT_HOMEDIR "~/.gnupg"
506 #endif
507 #define GNUPG_PRIVATE_KEYS_DIR  "private-keys-v1.d"
508 #define GNUPG_OPENPGP_REVOC_DIR "openpgp-revocs.d"
509
510 /* For some systems (DOS currently), we hardcode the path here.  For
511    POSIX systems the values are constructed by the Makefiles, so that
512    the values may be overridden by the make invocations; this is to
513    comply with the GNU coding standards.  Note that these values are
514    only defaults.  */
515 #ifdef HAVE_DOSISH_SYSTEM
516 # ifdef HAVE_DRIVE_LETTERS
517 #  define GNUPG_BINDIR      "c:\\gnupg"
518 #  define GNUPG_LIBEXECDIR  "c:\\gnupg"
519 #  define GNUPG_LIBDIR      "c:\\gnupg"
520 #  define GNUPG_DATADIR     "c:\\gnupg"
521 #  define GNUPG_SYSCONFDIR  "c:\\gnupg"
522 # else
523 #  define GNUPG_BINDIR      "\\gnupg"
524 #  define GNUPG_LIBEXECDIR  "\\gnupg"
525 #  define GNUPG_LIBDIR      "\\gnupg"
526 #  define GNUPG_DATADIR     "\\gnupg"
527 #  define GNUPG_SYSCONFDIR  "\\gnupg"
528 # endif
529 #endif
530
531 /* Derive some other constants. */
532 #if !(defined(HAVE_FORK) && defined(HAVE_PIPE) && defined(HAVE_WAITPID))
533 #define EXEC_TEMPFILE_ONLY
534 #endif
535
536
537 /* We didn't define endianness above, so get it from OS macros.  This
538    is intended for making fat binary builds on OS X. */
539 #if !defined(BIG_ENDIAN_HOST) && !defined(LITTLE_ENDIAN_HOST)
540 #if defined(__BIG_ENDIAN__)
541 #define BIG_ENDIAN_HOST 1
542 #elif defined(__LITTLE_ENDIAN__)
543 #define LITTLE_ENDIAN_HOST 1
544 #else
545 #error "No endianness found"
546 #endif
547 #endif
548
549
550 /* Hack used for W32: ldap.m4 also tests for the ASCII version of
551    ldap_start_tls_s because that is the actual symbol used in the
552    library.  winldap.h redefines it to our commonly used value,
553    thus we define our usual macro here.  */
554 #ifdef HAVE_LDAP_START_TLS_SA
555 # ifndef HAVE_LDAP_START_TLS_S
556 #  define HAVE_LDAP_START_TLS_S 1
557 # endif
558 #endif
559
560 /* Enable the es_ macros from gpgrt.  */
561 #define GPGRT_ENABLE_ES_MACROS 1
562
563 /* Enable the log_ macros from gpgrt.  */
564 #define GPGRT_ENABLE_LOG_MACROS 1
565
566 /* Tell libgcrypt not to use its own libgpg-error implementation. */
567 #define USE_LIBGPG_ERROR 1
568
569 /* Tell Libgcrypt not to include deprecated definitions.  */
570 #define GCRYPT_NO_DEPRECATED 1
571
572 /* Our HTTP code is used in estream mode.  */
573 #define HTTP_USE_ESTREAM 1
574
575 /* Under W32 we do an explicit socket initialization, thus we need to
576    avoid the on-demand initialization which would also install an atexit
577    handler.  */
578 #define HTTP_NO_WSASTARTUP
579
580 /* Under Windows we use the gettext code from libgpg-error.  */
581 #define GPG_ERR_ENABLE_GETTEXT_MACROS
582
583 /* Under WindowsCE we use the strerror replacement from libgpg-error.  */
584 #define GPG_ERR_ENABLE_ERRNO_MACROS
585
586 #endif /*GNUPG_CONFIG_H_INCLUDED*/
587 ])
588
589
590 AM_MAINTAINER_MODE
591 AC_ARG_VAR(SYSROOT,[locate config scripts also below that directory])
592
593 # Checks for programs.
594 AC_MSG_NOTICE([checking for programs])
595 AC_PROG_MAKE_SET
596 AM_SANITY_CHECK
597 missing_dir=`cd $ac_aux_dir && pwd`
598 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
599 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
600 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
601 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
602 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
603 AM_SILENT_RULES
604 AC_PROG_AWK
605 AC_PROG_CC
606 AC_PROG_CPP
607 AM_PROG_CC_C_O
608 if test "x$ac_cv_prog_cc_c89" = "xno" ; then
609   AC_MSG_ERROR([[No C-89 compiler found]])
610 fi
611 AC_PROG_INSTALL
612 AC_PROG_LN_S
613 AC_PROG_RANLIB
614 AC_CHECK_TOOL(AR, ar, :)
615 AC_PATH_PROG(PERL,"perl")
616 AC_CHECK_TOOL(WINDRES, windres, :)
617 AC_PATH_PROG(YAT2M, "yat2m", "./yat2m" )
618 AC_ARG_VAR(YAT2M, [tool to convert texi to man pages])
619 AC_ISC_POSIX
620 AC_SYS_LARGEFILE
621 GNUPG_CHECK_USTAR
622
623
624 # We need to compile and run a program on the build machine.  A
625 # comment in libgpg-error says that the AC_PROG_CC_FOR_BUILD macro in
626 # the AC archive is broken for autoconf 2.57.  Given that there is no
627 # newer version of that macro, we assume that it is also broken for
628 # autoconf 2.61 and thus we use a simple but usually sufficient
629 # approach.
630 AC_MSG_CHECKING(for cc for build)
631 if test "$cross_compiling" = "yes"; then
632   CC_FOR_BUILD="${CC_FOR_BUILD-cc}"
633 else
634   CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
635 fi
636 AC_MSG_RESULT($CC_FOR_BUILD)
637 AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler])
638
639 # We need to call this macro because other pkg-config macros are
640 # not always used.
641 PKG_PROG_PKG_CONFIG
642
643
644 try_gettext=yes
645 require_iconv=yes
646 have_dosish_system=no
647 have_w32_system=no
648 have_w32ce_system=no
649 have_android_system=no
650 use_simple_gettext=no
651 use_ldapwrapper=yes
652 mmap_needed=yes
653 case "${host}" in
654     *-mingw32*)
655         # special stuff for Windoze NT
656         ac_cv_have_dev_random=no
657         AC_DEFINE(USE_ONLY_8DOT3,1,
658                   [Set this to limit filenames to the 8.3 format])
659         AC_DEFINE(USE_SIMPLE_GETTEXT,1,
660                   [Because the Unix gettext has too much overhead on
661                    MingW32 systems and these systems lack Posix functions,
662                    we use a simplified version of gettext])
663         have_dosish_system=yes
664         have_w32_system=yes
665         require_iconv=no
666         use_ldapwrapper=no  # Fixme: Do this only for CE.
667         case "${host}" in
668           *-mingw32ce*)
669             have_w32ce_system=yes
670             ;;
671           *)
672             AC_DEFINE(HAVE_DRIVE_LETTERS,1,
673                       [Defined if the OS supports drive letters.])
674             ;;
675         esac
676         try_gettext="no"
677         use_simple_gettext=yes
678         mmap_needed=no
679         ;;
680     i?86-emx-os2 | i?86-*-os2*emx )
681         # OS/2 with the EMX environment
682         ac_cv_have_dev_random=no
683         AC_DEFINE(HAVE_DRIVE_LETTERS)
684         have_dosish_system=yes
685         try_gettext="no"
686         ;;
687
688     i?86-*-msdosdjgpp*)
689         # DOS with the DJGPP environment
690         ac_cv_have_dev_random=no
691         AC_DEFINE(HAVE_DRIVE_LETTERS)
692         have_dosish_system=yes
693         try_gettext="no"
694         ;;
695
696     *-*-hpux*)
697         if test -z "$GCC" ; then
698             CFLAGS="-Ae -D_HPUX_SOURCE $CFLAGS"
699         fi
700         ;;
701     *-dec-osf4*)
702         if test -z "$GCC" ; then
703             # Suppress all warnings
704             # to get rid of the unsigned/signed char mismatch warnings.
705             CFLAGS="-w $CFLAGS"
706         fi
707         ;;
708     *-dec-osf5*)
709         if test -z "$GCC" ; then
710             # Use the newer compiler `-msg_disable ptrmismatch1' to
711             # get rid of the unsigned/signed char mismatch warnings.
712             # Using this may hide other pointer mismatch warnings, but
713             # it at least lets other warning classes through
714             CFLAGS="-msg_disable ptrmismatch1 $CFLAGS"
715         fi
716         ;;
717     m68k-atari-mint)
718         ;;
719     *-linux-android*)
720         have_android_system=yes
721         # Android is fully utf-8 and we do not want to use iconv to
722         # keeps things simple
723         require_iconv=no
724         ;;
725     *-apple-darwin*)
726         AC_DEFINE(_DARWIN_C_SOURCE, 900000L,
727                   Expose all libc features (__DARWIN_C_FULL).)
728         ;;
729     *)
730        ;;
731 esac
732
733 if test "$have_dosish_system" = yes; then
734    AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
735              [Defined if we run on some of the PCDOS like systems
736               (DOS, Windoze. OS/2) with special properties like
737               no file modes, case insensitive file names and preferred
738               use of backslashes as directory name separators.])
739 fi
740 AM_CONDITIONAL(HAVE_DOSISH_SYSTEM, test "$have_dosish_system" = yes)
741
742 AM_CONDITIONAL(USE_SIMPLE_GETTEXT, test x"$use_simple_gettext" = xyes)
743
744 if test "$have_w32_system" = yes; then
745    AC_DEFINE(HAVE_W32_SYSTEM,1, [Defined if we run on a W32 API based system])
746    if test "$have_w32ce_system" = yes; then
747       AC_DEFINE(HAVE_W32CE_SYSTEM,1,[Defined if we run on WindowsCE])
748    fi
749 fi
750 AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
751 AM_CONDITIONAL(HAVE_W32CE_SYSTEM, test "$have_w32ce_system" = yes)
752
753 if test "$have_android_system" = yes; then
754    AC_DEFINE(HAVE_ANDROID_SYSTEM,1, [Defined if we build for an Android system])
755 fi
756 AM_CONDITIONAL(HAVE_ANDROID_SYSTEM, test "$have_android_system" = yes)
757
758
759 # (These need to go after AC_PROG_CC so that $EXEEXT is defined)
760 AC_DEFINE_UNQUOTED(EXEEXT,"$EXEEXT",[The executable file extension, if any])
761
762
763 #
764 # Checks for libraries.
765 #
766 AC_MSG_NOTICE([checking for libraries])
767
768
769 #
770 # libgpg-error is a library with error codes shared between GnuPG
771 # related projects.
772 #
773 AM_PATH_GPG_ERROR("$NEED_GPG_ERROR_VERSION",
774                   have_gpg_error=yes,have_gpg_error=no)
775
776
777 #
778 # Libgcrypt is our generic crypto library
779 #
780 AM_PATH_LIBGCRYPT("$NEED_LIBGCRYPT_API:$NEED_LIBGCRYPT_VERSION",
781         have_libgcrypt=yes,have_libgcrypt=no)
782
783
784 #
785 # libassuan is used for IPC
786 #
787 AM_PATH_LIBASSUAN("$NEED_LIBASSUAN_API:$NEED_LIBASSUAN_VERSION",
788                   have_libassuan=yes,have_libassuan=no)
789 if test "$have_libassuan" = "yes"; then
790   AC_DEFINE_UNQUOTED(GNUPG_LIBASSUAN_VERSION, "$libassuan_version",
791                      [version of the libassuan library])
792   show_tor_support="only .onion"
793 fi
794
795
796 #
797 # libksba is our X.509 support library
798 #
799 AM_PATH_KSBA("$NEED_KSBA_API:$NEED_KSBA_VERSION",have_ksba=yes,have_ksba=no)
800
801
802 #
803 # libusb allows us to use the integrated CCID smartcard reader driver.
804 #
805 # FiXME: Use GNUPG_CHECK_LIBUSB and modify to use separate AC_SUBSTs.
806 if test "$use_ccid_driver" = auto || test "$use_ccid_driver" = yes; then
807    case "${host}" in
808      *-mingw32*)
809        LIBUSB_NAME=
810        LIBUSB_LIBS=
811        LIBUSB_CPPFLAGS=
812        ;;
813      *-*-darwin*)
814        LIBUSB_NAME=usb-1.0
815        LIBUSB_LIBS="-Wl,-framework,CoreFoundation -Wl,-framework,IOKit"
816        ;;
817      *-*-freebsd*)
818        # FreeBSD has a native 1.0 compatible library by -lusb.
819        LIBUSB_NAME=usb
820        LIBUSB_LIBS=
821        ;;
822      *)
823        LIBUSB_NAME=usb-1.0
824        LIBUSB_LIBS=
825        ;;
826    esac
827 fi
828 if test x"$LIBUSB_NAME" != x ; then
829    AC_CHECK_LIB($LIBUSB_NAME, libusb_init,
830                 [ LIBUSB_LIBS="-l$LIBUSB_NAME $LIBUSB_LIBS"
831                   have_libusb=yes ])
832    AC_MSG_CHECKING([libusb include dir])
833    usb_incdir_found="no"
834    for _incdir in "" "/usr/include/libusb-1.0" "/usr/local/include/libusb-1.0"; do
835      _libusb_save_cppflags=$CPPFLAGS
836      if test -n "${_incdir}"; then
837        CPPFLAGS="-I${_incdir} ${CPPFLAGS}"
838      fi
839      AC_PREPROC_IFELSE([AC_LANG_SOURCE([[@%:@include <libusb.h>]])],
840      [usb_incdir=${_incdir}; usb_incdir_found="yes"], [])
841      CPPFLAGS=${_libusb_save_cppflags}
842      if test "$usb_incdir_found" = "yes"; then
843        break
844      fi
845    done
846    if test "$usb_incdir_found" = "yes"; then
847      AC_MSG_RESULT([${usb_incdir}])
848    else
849      AC_MSG_RESULT([not found])
850      usb_incdir=""
851      have_libusb=no
852      if test "$use_ccid_driver" != yes; then
853        use_ccid_driver=no
854      fi
855      LIBUSB_LIBS=""
856    fi
857
858    if test "$have_libusb" = yes; then
859      AC_DEFINE(HAVE_LIBUSB,1, [defined if libusb is available])
860    fi
861    if test x"$usb_incdir" = x; then
862      LIBUSB_CPPFLAGS=""
863    else
864      LIBUSB_CPPFLAGS="-I${usb_incdir}"
865    fi
866 fi
867 AC_SUBST(LIBUSB_LIBS)
868 AC_SUBST(LIBUSB_CPPFLAGS)
869
870 #
871 # Check whether it is necessary to link against libdl.
872 # (For example to load libpcsclite)
873 #
874 gnupg_dlopen_save_libs="$LIBS"
875 LIBS=""
876 AC_SEARCH_LIBS(dlopen, c dl,,,)
877 DL_LIBS=$LIBS
878 AC_SUBST(DL_LIBS)
879 LIBS="$gnupg_dlopen_save_libs"
880
881
882 # Checks for g10
883
884 AC_ARG_ENABLE(sqlite,
885                 AC_HELP_STRING([--disable-sqlite],
886                                [disable the use of SQLITE]),
887               try_sqlite=$enableval, try_sqlite=yes)
888
889 if test x"$use_tofu" = xyes ; then
890   if test x"$try_sqlite" = xyes ; then
891     PKG_CHECK_MODULES([SQLITE3], [sqlite3 >= $NEED_SQLITE_VERSION],
892                                  [have_sqlite=yes],
893                                  [have_sqlite=no])
894   fi
895   if test "$have_sqlite" = "yes"; then
896     :
897     AC_SUBST([SQLITE3_CFLAGS])
898     AC_SUBST([SQLITE3_LIBS])
899   else
900     use_tofu=no
901     tmp=$(echo "$SQLITE3_PKG_ERRORS" | tr '\n' '\v' | sed 's/\v/\n*** /g')
902     AC_MSG_WARN([[
903 ***
904 *** Building without SQLite support - TOFU disabled
905 ***
906 *** $tmp]])
907   fi
908 fi
909
910 AM_CONDITIONAL(SQLITE3, test "$have_sqlite" = "yes")
911
912 if test x"$use_tofu" = xyes ; then
913     AC_DEFINE(USE_TOFU, 1, [Enable to build the TOFU code])
914 fi
915
916
917 # Checks for g13
918
919 AC_PATH_PROG(ENCFS, encfs, /usr/bin/encfs)
920 AC_DEFINE_UNQUOTED(ENCFS,
921         "${ENCFS}", [defines the filename of the encfs program])
922
923 AC_PATH_PROG(FUSERMOUNT, fusermount, /usr/bin/fusermount)
924 AC_DEFINE_UNQUOTED(FUSERMOUNT,
925         "${FUSERMOUNT}", [defines the filename of the fusermount program])
926
927
928 # Checks for dirmngr
929
930
931 #
932 # Checks for symcryptrun:
933 #
934
935 # libutil has openpty() and login_tty().
936 AC_CHECK_LIB(util, openpty,
937               [ LIBUTIL_LIBS="$LIBUTIL_LIBS -lutil"
938                 AC_DEFINE(HAVE_LIBUTIL,1,
939                          [defined if libutil is available])
940              ])
941 AC_SUBST(LIBUTIL_LIBS)
942
943 # shred is used to clean temporary plain text files.
944 AC_PATH_PROG(SHRED, shred, /usr/bin/shred)
945 AC_DEFINE_UNQUOTED(SHRED,
946         "${SHRED}", [defines the filename of the shred program])
947
948
949 #
950 # Check whether the nPth library is available
951 #
952 AM_PATH_NPTH("$NEED_NPTH_API:$NEED_NPTH_VERSION",have_npth=yes,have_npth=no)
953 if test "$have_npth" = "yes"; then
954   AC_DEFINE(HAVE_NPTH, 1,
955               [Defined if the New Portable Thread Library is available])
956   AC_DEFINE(USE_NPTH, 1,
957               [Defined if support for nPth is requested and nPth is available])
958 else
959   AC_MSG_WARN([[
960 ***
961 *** To support concurrent access for example in gpg-agent and the SCdaemon
962 *** we need the support of the New Portable Threads Library.
963 ***]])
964 fi
965
966
967 #
968 # NTBTLS is our TLS library.  If it is not available fallback to
969 # GNUTLS.
970 #
971 AC_ARG_ENABLE(ntbtls,
972               AC_HELP_STRING([--disable-ntbtls],
973                              [disable the use of NTBTLS as TLS library]),
974               try_ntbtls=$enableval, try_ntbtls=yes)
975 if test x"$try_ntbtls" = xyes ; then
976   AM_PATH_NTBTLS("$NEED_NTBTLS_API:$NEED_NTBTLS_VERSION",
977                  [have_ntbtls=yes],[have_ntbtls=no])
978 fi
979 if test "$have_ntbtls" = yes ; then
980    use_tls_library=ntbtls
981    AC_DEFINE(HTTP_USE_NTBTLS, 1, [Enable NTBTLS support in http.c])
982 else
983   AC_ARG_ENABLE(gnutls,
984                 AC_HELP_STRING([--disable-gnutls],
985                                [disable GNUTLS as fallback TLS library]),
986                 try_gnutls=$enableval, try_gnutls=yes)
987   if test x"$try_gnutls" = xyes ; then
988     PKG_CHECK_MODULES([LIBGNUTLS], [gnutls >= $NEED_GNUTLS_VERSION],
989                                    [have_gnutls=yes],
990                                    [have_gnutls=no])
991   fi
992   if test "$have_gnutls" = "yes"; then
993     AC_SUBST([LIBGNUTLS_CFLAGS])
994     AC_SUBST([LIBGNUTLS_LIBS])
995     use_tls_library=gnutls
996     AC_DEFINE(HTTP_USE_GNUTLS, 1, [Enable GNUTLS support in http.c])
997   else
998     tmp=$(echo "$LIBGNUTLS_PKG_ERRORS" | tr '\n' '\v' | sed 's/\v/\n*** /g')
999     AC_MSG_WARN([[
1000 ***
1001 *** Building without NTBTLS and GNUTLS - no TLS access to keyservers.
1002 ***
1003 *** $tmp]])
1004   fi
1005 fi
1006
1007 #
1008 # Allow to set a fixed trust store file for system provided certificates.
1009 #
1010 AC_ARG_WITH([default-trust-store-file],
1011             [AC_HELP_STRING([--with-default-trust-store-file=FILE],
1012                             [Use FILE as system trust store])],
1013             default_trust_store_file="$withval",
1014             default_trust_store_file="")
1015 if test x"$default_trust_store_file" = xno;then
1016   default_trust_store_file=""
1017 fi
1018 if test x"$default_trust_store_file" != x ; then
1019   AC_DEFINE_UNQUOTED([DEFAULT_TRUST_STORE_FILE],
1020     ["$default_trust_store_file"], [Use as default system trust store file])
1021 fi
1022
1023
1024 AC_MSG_NOTICE([checking for networking options])
1025
1026 #
1027 # Must check for network library requirements before doing link tests
1028 # for ldap, for example. If ldap libs are static (or dynamic and without
1029 # ELF runtime link paths), then link will fail and LDAP support won't
1030 # be detected.
1031 #
1032 AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname,
1033         [NETLIBS="-lnsl $NETLIBS"]))
1034 AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt,
1035         [NETLIBS="-lsocket $NETLIBS"]))
1036
1037
1038 #
1039 # Check standard resolver functions.
1040 #
1041 if test "$build_dirmngr" = "yes"; then
1042   _dns_save_libs=$LIBS
1043   LIBS=""
1044
1045   # Find the system resolver which can always be enabled with
1046   # the dirmngr option --standard-resolver.
1047
1048   # the double underscore thing is a glibc-ism?
1049   AC_SEARCH_LIBS(res_query,resolv bind,,
1050                  AC_SEARCH_LIBS(__res_query,resolv bind,,have_resolver=no))
1051   AC_SEARCH_LIBS(dn_expand,resolv bind,,
1052                  AC_SEARCH_LIBS(__dn_expand,resolv bind,,have_resolver=no))
1053
1054   # macOS renames dn_skipname into res_9_dn_skipname in <resolv.h>,
1055   # and for some reason fools us into believing we don't need
1056   # -lresolv even if we do.  Since the test program checking for the
1057   # symbol does not include <resolv.h>, we need to check for the
1058   # renamed symbol explicitly.
1059   AC_SEARCH_LIBS(res_9_dn_skipname,resolv bind,,
1060       AC_SEARCH_LIBS(dn_skipname,resolv bind,,
1061           AC_SEARCH_LIBS(__dn_skipname,resolv bind,,have_resolver=no)))
1062
1063   if test x"$have_resolver" != xno ; then
1064
1065       # Make sure that the BIND 4 resolver interface is workable before
1066       # enabling any code that calls it.  At some point I'll rewrite the
1067       # code to use the BIND 8 resolver API.
1068       # We might also want to use libdns instead.
1069
1070     AC_MSG_CHECKING([whether the resolver is usable])
1071     AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1072 #include <netinet/in.h>
1073 #include <arpa/nameser.h>
1074 #include <resolv.h>]],
1075 [[unsigned char answer[PACKETSZ];
1076   res_query("foo.bar",C_IN,T_A,answer,PACKETSZ);
1077   dn_skipname(0,0);
1078   dn_expand(0,0,0,0,0);
1079 ]])],have_resolver=yes,have_resolver=no)
1080     AC_MSG_RESULT($have_resolver)
1081
1082     # This is Apple-specific and somewhat bizarre as they changed the
1083     # define in bind 8 for some reason.
1084
1085     if test x"$have_resolver" != xyes ; then
1086       AC_MSG_CHECKING(
1087            [whether I can make the resolver usable with BIND_8_COMPAT])
1088       AC_LINK_IFELSE([AC_LANG_PROGRAM([[#define BIND_8_COMPAT
1089 #include <sys/types.h>
1090 #include <netinet/in.h>
1091 #include <arpa/nameser.h>
1092 #include <resolv.h>]],
1093 [[unsigned char answer[PACKETSZ];
1094   res_query("foo.bar",C_IN,T_A,answer,PACKETSZ);
1095   dn_skipname(0,0); dn_expand(0,0,0,0,0);
1096 ]])],[have_resolver=yes ; need_compat=yes])
1097       AC_MSG_RESULT($have_resolver)
1098     fi
1099   fi
1100
1101   if test x"$have_resolver" = xyes ; then
1102     AC_DEFINE(HAVE_SYSTEM_RESOLVER,1,[The system's resolver is usable.])
1103     DNSLIBS="$DNSLIBS $LIBS"
1104     if test x"$need_compat" = xyes ; then
1105       AC_DEFINE(BIND_8_COMPAT,1,[an Apple OSXism])
1106     fi
1107     if test "$use_libdns" = yes; then
1108      show_tor_support=yes
1109     fi
1110   elif test "$use_libdns" = yes; then
1111     show_tor_support=yes
1112   else
1113     AC_MSG_WARN([[
1114 ***
1115 *** The system's DNS resolver is not usable.
1116 *** Dirmngr functionality is limited.
1117 ***]])
1118     show_tor_support="${show_tor_support} (no system resolver)"
1119   fi
1120
1121   if test "$have_w32_system" = yes; then
1122     if test "$use_libdns" = yes; then
1123       DNSLIBS="$DNSLIBS -liphlpapi"
1124     fi
1125   fi
1126
1127   LIBS=$_dns_save_libs
1128 fi
1129
1130 AC_SUBST(DNSLIBS)
1131
1132
1133 #
1134 # Check for LDAP
1135 #
1136 # Note that running the check changes the variable
1137 # gnupg_have_ldap from "n/a" to "no" or "yes".
1138
1139 AC_ARG_ENABLE(ldap,
1140     AC_HELP_STRING([--disable-ldap],[disable LDAP support]),
1141     [if test "$enableval" = "no"; then gnupg_have_ldap=no; fi])
1142
1143 if test "$gnupg_have_ldap" != "no" ; then
1144   if test "$build_dirmngr" = "yes" ; then
1145      GNUPG_CHECK_LDAP($NETLIBS)
1146      AC_CHECK_LIB(lber, ber_free,
1147                   [ LBER_LIBS="$LBER_LIBS -llber"
1148                     AC_DEFINE(HAVE_LBER,1,
1149                              [defined if liblber is available])
1150                     have_lber=yes
1151                  ])
1152   fi
1153 fi
1154 AC_SUBST(LBER_LIBS)
1155 if test "$gnupg_have_ldap" = "no"; then
1156     AC_MSG_WARN([[
1157 ***
1158 *** Building without LDAP support.
1159 *** No CRL access or X.509 certificate search available.
1160 ***]])
1161 fi
1162
1163 AM_CONDITIONAL(USE_LDAP, [test "$gnupg_have_ldap" = yes])
1164 if test "$gnupg_have_ldap" = yes ; then
1165   AC_DEFINE(USE_LDAP,1,[Defined if LDAP is support])
1166 else
1167  use_ldapwrapper=no
1168 fi
1169
1170 if test "$use_ldapwrapper" = yes; then
1171    AC_DEFINE(USE_LDAPWRAPPER,1, [Build dirmngr with LDAP wrapper process])
1172 fi
1173 AM_CONDITIONAL(USE_LDAPWRAPPER, test "$use_ldapwrapper" = yes)
1174
1175
1176
1177
1178 #
1179 # Check for sendmail
1180 #
1181 # This isn't necessarily sendmail itself, but anything that gives a
1182 # sendmail-ish interface to the outside world.  That includes Exim,
1183 # Postfix, etc.  Basically, anything that can handle "sendmail -t".
1184 AC_ARG_WITH(mailprog,
1185       AC_HELP_STRING([--with-mailprog=NAME],
1186                      [use "NAME -t" for mail transport]),
1187              ,with_mailprog=yes)
1188 if test x"$with_mailprog" = xyes ; then
1189     AC_PATH_PROG(SENDMAIL,sendmail,,$PATH:/usr/sbin:/usr/libexec:/usr/lib)
1190 elif test x"$with_mailprog" != xno ; then
1191     AC_MSG_CHECKING([for a mail transport program])
1192     AC_SUBST(SENDMAIL,$with_mailprog)
1193     AC_MSG_RESULT($with_mailprog)
1194 fi
1195
1196
1197 #
1198 # Construct a printable name of the OS
1199 #
1200 case "${host}" in
1201     *-mingw32ce*)
1202         PRINTABLE_OS_NAME="W32CE"
1203         ;;
1204     *-mingw32*)
1205         PRINTABLE_OS_NAME="MingW32"
1206         ;;
1207     *-*-cygwin*)
1208         PRINTABLE_OS_NAME="Cygwin"
1209         ;;
1210     i?86-emx-os2 | i?86-*-os2*emx )
1211         PRINTABLE_OS_NAME="OS/2"
1212         ;;
1213     i?86-*-msdosdjgpp*)
1214         PRINTABLE_OS_NAME="MSDOS/DJGPP"
1215         try_dynload=no
1216         ;;
1217     *-linux*)
1218         PRINTABLE_OS_NAME="GNU/Linux"
1219         ;;
1220     *)
1221         PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
1222         ;;
1223 esac
1224 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
1225                    [A human readable text with the name of the OS])
1226
1227
1228 #
1229 # Checking for iconv
1230 #
1231 if test "$require_iconv" = yes; then
1232   AM_ICONV
1233 else
1234   LIBICONV=
1235   LTLIBICONV=
1236   AC_SUBST(LIBICONV)
1237   AC_SUBST(LTLIBICONV)
1238 fi
1239
1240
1241 #
1242 # Check for gettext
1243 #
1244 # This is "GNU gnupg" - The project-id script from gettext
1245 #                       needs this string
1246 #
1247 AC_MSG_NOTICE([checking for gettext])
1248 AM_PO_SUBDIRS
1249 AM_GNU_GETTEXT_VERSION([0.17])
1250 if test "$try_gettext" = yes; then
1251   AM_GNU_GETTEXT([external],[need-ngettext])
1252
1253   # gettext requires some extra checks.  These really should be part of
1254   # the basic AM_GNU_GETTEXT macro.  TODO: move other gettext-specific
1255   # function checks to here.
1256
1257   AC_CHECK_FUNCS(strchr)
1258 else
1259   USE_NLS=no
1260   USE_INCLUDED_LIBINTL=no
1261   BUILD_INCLUDED_LIBINTL=no
1262   POSUB=po
1263   AC_SUBST(USE_NLS)
1264   AC_SUBST(USE_INCLUDED_LIBINTL)
1265   AC_SUBST(BUILD_INCLUDED_LIBINTL)
1266   AC_SUBST(POSUB)
1267 fi
1268
1269 # We use HAVE_LANGINFO_CODESET in a couple of places.
1270 AM_LANGINFO_CODESET
1271
1272 # Checks required for our use of locales
1273 gt_LC_MESSAGES
1274
1275
1276 #
1277 # SELinux support
1278 #
1279 if test "$selinux_support" = yes ; then
1280   AC_DEFINE(ENABLE_SELINUX_HACKS,1,[Define to enable SELinux support])
1281 fi
1282
1283
1284 #
1285 # Checks for header files.
1286 #
1287 AC_MSG_NOTICE([checking for header files])
1288 AC_HEADER_STDC
1289 AC_CHECK_HEADERS([string.h unistd.h langinfo.h termio.h locale.h getopt.h \
1290                   pty.h utmp.h pwd.h inttypes.h signal.h sys/select.h     \
1291                   stdint.h signal.h util.h libutil.h termios.h \
1292                   ucred.h sys/sysmacros.h sys/mkdev.h])
1293
1294 AC_HEADER_TIME
1295
1296
1297 #
1298 # Checks for typedefs, structures, and compiler characteristics.
1299 #
1300 AC_MSG_NOTICE([checking for system characteristics])
1301 AC_C_CONST
1302 AC_C_INLINE
1303 AC_C_VOLATILE
1304 AC_TYPE_SIZE_T
1305 AC_TYPE_MODE_T
1306 AC_TYPE_SIGNAL
1307 AC_DECL_SYS_SIGLIST
1308
1309 gl_HEADER_SYS_SOCKET
1310 gl_TYPE_SOCKLEN_T
1311
1312 AC_SEARCH_LIBS([inet_addr], [nsl])
1313
1314 AC_ARG_ENABLE(endian-check,
1315               AC_HELP_STRING([--disable-endian-check],
1316               [disable the endian check and trust the OS provided macros]),
1317               endiancheck=$enableval,endiancheck=yes)
1318
1319 if test x"$endiancheck" = xyes ; then
1320   GNUPG_CHECK_ENDIAN
1321 fi
1322
1323 # fixme: we should get rid of the byte type
1324 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
1325 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
1326 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
1327 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
1328 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
1329
1330 AC_CHECK_SIZEOF(unsigned short)
1331 AC_CHECK_SIZEOF(unsigned int)
1332 AC_CHECK_SIZEOF(unsigned long)
1333 AC_CHECK_SIZEOF(unsigned long long)
1334 AC_HEADER_TIME
1335 AC_CHECK_SIZEOF(time_t,,[[
1336 #include <stdio.h>
1337 #if TIME_WITH_SYS_TIME
1338 # include <sys/time.h>
1339 # include <time.h>
1340 #else
1341 # if HAVE_SYS_TIME_H
1342 #  include <sys/time.h>
1343 # else
1344 #  include <time.h>
1345 # endif
1346 #endif
1347 ]])
1348 GNUPG_TIME_T_UNSIGNED
1349
1350
1351 if test "$ac_cv_sizeof_unsigned_short" = "0" \
1352    || test "$ac_cv_sizeof_unsigned_int" = "0" \
1353    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
1354     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
1355 fi
1356
1357
1358 #
1359 # Checks for library functions.
1360 #
1361 AC_MSG_NOTICE([checking for library functions])
1362 AC_CHECK_DECLS(getpagesize)
1363 AC_FUNC_FSEEKO
1364 AC_FUNC_VPRINTF
1365 AC_FUNC_FORK
1366 AC_CHECK_FUNCS([strerror strlwr tcgetattr mmap canonicalize_file_name])
1367 AC_CHECK_FUNCS([strcasecmp strncasecmp ctermid times gmtime_r strtoull])
1368 AC_CHECK_FUNCS([setenv unsetenv fcntl ftruncate inet_ntop])
1369 AC_CHECK_FUNCS([canonicalize_file_name])
1370 AC_CHECK_FUNCS([gettimeofday getrusage getrlimit setrlimit clock_gettime])
1371 AC_CHECK_FUNCS([atexit raise getpagesize strftime nl_langinfo setlocale])
1372 AC_CHECK_FUNCS([waitpid wait4 sigaction sigprocmask pipe getaddrinfo])
1373 AC_CHECK_FUNCS([ttyname rand ftello fsync stat lstat])
1374 AC_CHECK_FUNCS([memicmp stpcpy strsep strlwr strtoul memmove stricmp strtol \
1375                 memrchr isascii timegm getrusage setrlimit stat setlocale   \
1376                 flockfile funlockfile getpwnam getpwuid \
1377                 getenv inet_pton strpbrk])
1378
1379 # On some systems (e.g. Solaris) nanosleep requires linking to librl.
1380 # Given that we use nanosleep only as an optimization over a select
1381 # based wait function we want it only if it is available in libc.
1382 _save_libs="$LIBS"
1383 AC_SEARCH_LIBS([nanosleep], [],
1384                [AC_DEFINE(HAVE_NANOSLEEP,1,
1385                 [Define to 1 if you have the `nanosleep' function in libc.])])
1386 LIBS="$_save_libs"
1387
1388
1389 # See whether libc supports the Linux inotify interface
1390 case "${host}" in
1391     *-*-linux*)
1392         AC_CHECK_FUNCS([inotify_init])
1393         ;;
1394 esac
1395
1396
1397 if test "$have_android_system" = yes; then
1398    # On Android ttyname is a stub but prints an error message.
1399    AC_DEFINE(HAVE_BROKEN_TTYNAME,1,
1400              [Defined if ttyname does not work properly])
1401 fi
1402
1403 AC_CHECK_TYPES([struct sigaction, sigset_t],,,[#include <signal.h>])
1404
1405 # Dirmngr requires mmap on Unix systems.
1406 if test $ac_cv_func_mmap != yes -a $mmap_needed = yes; then
1407   AC_MSG_ERROR([[Sorry, the current implementation requires mmap.]])
1408 fi
1409
1410
1411 #
1412 # Check for the getsockopt SO_PEERCRED, etc.
1413 #
1414 AC_CHECK_MEMBERS([struct ucred.pid, struct ucred.cr_pid, struct sockpeercred.pid], [], [], [#include <sys/types.h>
1415 #include <sys/socket.h> ])
1416
1417 # (Open)Solaris
1418 AC_CHECK_FUNCS([getpeerucred])
1419
1420
1421 #
1422 # W32 specific test
1423 #
1424 GNUPG_FUNC_MKDIR_TAKES_ONE_ARG
1425
1426 #
1427 # Sanity check regex.  Tests adapted from mutt.
1428 #
1429 AC_MSG_CHECKING([whether regular expression support is requested])
1430 AC_ARG_ENABLE(regex,
1431   AC_HELP_STRING([--disable-regex],
1432     [do not handle regular expressions in trust signatures]),
1433   use_regex=$enableval, use_regex=yes)
1434 AC_MSG_RESULT($use_regex)
1435
1436 if test "$use_regex" = yes ; then
1437   _cppflags="${CPPFLAGS}"
1438   _ldflags="${LDFLAGS}"
1439   AC_ARG_WITH(regex,
1440      AC_HELP_STRING([--with-regex=DIR],[look for regex in DIR]),
1441       [
1442       if test -d "$withval" ; then
1443         CPPFLAGS="${CPPFLAGS} -I$withval/include"
1444         LDFLAGS="${LDFLAGS} -L$withval/lib"
1445       fi
1446       ],withval="")
1447
1448   # Does the system have regex functions at all?
1449   AC_SEARCH_LIBS([regcomp], [regex])
1450   AC_CHECK_FUNC(regcomp, gnupg_cv_have_regex=yes, gnupg_cv_have_regex=no)
1451
1452   if test $gnupg_cv_have_regex = no; then
1453     use_regex=no
1454   else
1455     if test x"$cross_compiling" = xyes; then
1456       AC_MSG_WARN([cross compiling; assuming regexp libray is not broken])
1457     else
1458       AC_CACHE_CHECK([whether your system's regexp library is broken],
1459        [gnupg_cv_regex_broken],
1460        AC_TRY_RUN([
1461 #include <unistd.h>
1462 #include <regex.h>
1463 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); }],
1464        gnupg_cv_regex_broken=no, gnupg_cv_regex_broken=yes, gnupg_cv_regex_broken=yes))
1465
1466       if test $gnupg_cv_regex_broken = yes; then
1467         AC_MSG_WARN([your regex is broken - disabling regex use])
1468         use_regex=no
1469       fi
1470     fi
1471   fi
1472   CPPFLAGS="${_cppflags}"
1473   LDFLAGS="${_ldflags}"
1474 fi
1475
1476 if test "$use_regex" != yes ; then
1477   AC_DEFINE(DISABLE_REGEX,1, [Define to disable regular expression support])
1478 fi
1479 AM_CONDITIONAL(DISABLE_REGEX, test x"$use_regex" != xyes)
1480
1481
1482
1483 #
1484 # Do we have zlib? Must do it here because Solaris failed
1485 # when compiling a conftest (due to the "-lz" from LIBS).
1486 # Note that we combine zlib and bzlib2 in ZLIBS.
1487 #
1488 if test "$use_zip" = yes ; then
1489   _cppflags="${CPPFLAGS}"
1490   _ldflags="${LDFLAGS}"
1491   AC_ARG_WITH(zlib,
1492     [  --with-zlib=DIR         use libz in DIR],[
1493       if test -d "$withval"; then
1494         CPPFLAGS="${CPPFLAGS} -I$withval/include"
1495         LDFLAGS="${LDFLAGS} -L$withval/lib"
1496       fi
1497     ])
1498
1499   AC_CHECK_HEADER(zlib.h,
1500      AC_CHECK_LIB(z, deflateInit2_,
1501        [
1502        ZLIBS="-lz"
1503        AC_DEFINE(HAVE_ZIP,1, [Defined if ZIP and ZLIB are supported])
1504        ],
1505        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
1506        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags})
1507 fi
1508
1509
1510 #
1511 # Check whether we can support bzip2
1512 #
1513 if test "$use_bzip2" = yes ; then
1514   _cppflags="${CPPFLAGS}"
1515   _ldflags="${LDFLAGS}"
1516   AC_ARG_WITH(bzip2,
1517      AC_HELP_STRING([--with-bzip2=DIR],[look for bzip2 in DIR]),
1518       [
1519       if test -d "$withval" ; then
1520         CPPFLAGS="${CPPFLAGS} -I$withval/include"
1521         LDFLAGS="${LDFLAGS} -L$withval/lib"
1522       fi
1523       ],withval="")
1524
1525   # Checking alongside stdio.h as an early version of bzip2 (1.0)
1526   # required stdio.h to be included before bzlib.h, and Solaris 9 is
1527   # woefully out of date.
1528   if test "$withval" != no ; then
1529      AC_CHECK_HEADER(bzlib.h,
1530         AC_CHECK_LIB(bz2,BZ2_bzCompressInit,
1531           [
1532           have_bz2=yes
1533           ZLIBS="$ZLIBS -lbz2"
1534           AC_DEFINE(HAVE_BZIP2,1,
1535                   [Defined if the bz2 compression library is available])
1536           ],
1537           CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
1538           CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags},[#include <stdio.h>])
1539   fi
1540 fi
1541 AM_CONDITIONAL(ENABLE_BZIP2_SUPPORT,test x"$have_bz2" = "xyes")
1542 AC_SUBST(ZLIBS)
1543
1544
1545 # Check for readline support
1546 GNUPG_CHECK_READLINE
1547
1548
1549 if test "$development_version" = yes; then
1550     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
1551             [Defined if this is not a regular release])
1552 fi
1553
1554 if test "$USE_MAINTAINER_MODE" = "yes"; then
1555     AC_DEFINE(MAINTAINER_MODE,1,
1556             [Defined if this build is in maintainer mode])
1557 fi
1558
1559 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
1560
1561 GNUPG_CHECK_GNUMAKE
1562
1563 # Add some extra libs here so that previous tests don't fail for
1564 # mysterious reasons - the final link step should bail out.
1565 # W32SOCKLIBS is also defined so that if can be used for tools not
1566 # requiring any network stuff but linking to code in libcommon which
1567 # tracks in winsock stuff (e.g. init_common_subsystems).
1568 if test "$have_w32_system" = yes; then
1569    if test "$have_w32ce_system" = yes; then
1570      W32SOCKLIBS="-lws2"
1571    else
1572      W32SOCKLIBS="-lws2_32"
1573    fi
1574    NETLIBS="${NETLIBS} ${W32SOCKLIBS}"
1575 fi
1576
1577 AC_SUBST(NETLIBS)
1578 AC_SUBST(W32SOCKLIBS)
1579
1580 #
1581 # Setup gcc specific options
1582 #
1583 USE_C99_CFLAGS=
1584 AC_MSG_NOTICE([checking for cc features])
1585 if test "$GCC" = yes; then
1586     mycflags=
1587     mycflags_save=$CFLAGS
1588
1589     # Check whether gcc does not emit a diagnositc for unknown -Wno-*
1590     # options.  This is the case for gcc >= 4.6
1591     AC_MSG_CHECKING([if gcc ignores unknown -Wno-* options])
1592     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1593 #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6 )
1594 #kickerror
1595 #endif]],[])],[_gcc_silent_wno=yes],[_gcc_silent_wno=no])
1596     AC_MSG_RESULT($_gcc_silent_wno)
1597
1598     # Note that it is okay to use CFLAGS here because these are just
1599     # warning options and the user should have a chance of overriding
1600     # them.
1601     if test "$USE_MAINTAINER_MODE" = "yes"; then
1602         mycflags="$mycflags -O3 -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
1603         mycflags="$mycflags -Wformat -Wno-format-y2k -Wformat-security"
1604         if test x"$_gcc_silent_wno" = xyes ; then
1605           _gcc_wopt=yes
1606         else
1607           AC_MSG_CHECKING([if gcc supports -Wno-missing-field-initializers])
1608           CFLAGS="-Wno-missing-field-initializers"
1609           AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
1610                             [_gcc_wopt=yes],[_gcc_wopt=no])
1611           AC_MSG_RESULT($_gcc_wopt)
1612         fi
1613         if test x"$_gcc_wopt" = xyes ; then
1614           mycflags="$mycflags -W -Wno-sign-compare -Wno-format-zero-length"
1615           mycflags="$mycflags -Wno-missing-field-initializers"
1616         fi
1617
1618         AC_MSG_CHECKING([if gcc supports -Wdeclaration-after-statement])
1619         CFLAGS="-Wdeclaration-after-statement"
1620         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
1621         AC_MSG_RESULT($_gcc_wopt)
1622         if test x"$_gcc_wopt" = xyes ; then
1623           mycflags="$mycflags -Wdeclaration-after-statement"
1624         fi
1625
1626         AC_MSG_CHECKING([if gcc supports -Wlogical-op])
1627         CFLAGS="-Wlogical-op -Werror"
1628         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
1629         AC_MSG_RESULT($_gcc_wopt)
1630         if test x"$_gcc_wopt" = xyes ; then
1631           mycflags="$mycflags -Wlogical-op"
1632         fi
1633
1634         AC_MSG_CHECKING([if gcc supports -Wvla])
1635         CFLAGS="-Wvla"
1636         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
1637         AC_MSG_RESULT($_gcc_wopt)
1638         if test x"$_gcc_wopt" = xyes ; then
1639           mycflags="$mycflags -Wvla"
1640         fi
1641
1642     else
1643         mycflags="$mycflags -Wall"
1644     fi
1645
1646     if test x"$_gcc_silent_wno" = xyes ; then
1647       _gcc_psign=yes
1648     else
1649       AC_MSG_CHECKING([if gcc supports -Wno-pointer-sign])
1650       CFLAGS="-Wno-pointer-sign"
1651       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
1652                         [_gcc_psign=yes],[_gcc_psign=no])
1653       AC_MSG_RESULT($_gcc_psign)
1654     fi
1655     if test x"$_gcc_psign" = xyes ; then
1656        mycflags="$mycflags -Wno-pointer-sign"
1657     fi
1658
1659     AC_MSG_CHECKING([if gcc supports -Wpointer-arith])
1660     CFLAGS="-Wpointer-arith"
1661     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_psign=yes,_gcc_psign=no)
1662     AC_MSG_RESULT($_gcc_psign)
1663     if test x"$_gcc_psign" = xyes ; then
1664        mycflags="$mycflags -Wpointer-arith"
1665     fi
1666
1667     CFLAGS="$mycflags $mycflags_save"
1668     if test "$use_libdns" = yes; then
1669        # dirmngr/dns.{c,h} require C99 and GNU extensions.  */
1670        USE_C99_CFLAGS="-std=gnu99"
1671     fi
1672 fi
1673
1674 AC_SUBST(USE_C99_CFLAGS)
1675
1676
1677 #
1678 # This is handy for debugging so the compiler doesn't rearrange
1679 # things and eliminate variables.
1680 #
1681 AC_ARG_ENABLE(optimization,
1682    AC_HELP_STRING([--disable-optimization],
1683                   [disable compiler optimization]),
1684                   [if test $enableval = no ; then
1685                       CFLAGS=`echo $CFLAGS | sed s/-O[[1-9]]\ /-O0\ /g`
1686                    fi])
1687
1688 #
1689 # log_debug has certain requirements which might hamper portability.
1690 # Thus we use an option to enable it.
1691 #
1692 AC_MSG_CHECKING([whether to enable log_clock])
1693 AC_ARG_ENABLE(log_clock,
1694               AC_HELP_STRING([--enable-log-clock],
1695                              [enable log_clock timestamps]),
1696               enable_log_clock=$enableval, enable_log_clock=no)
1697 AC_MSG_RESULT($enable_log_clock)
1698 if test "$enable_log_clock" = yes ; then
1699   AC_DEFINE(ENABLE_LOG_CLOCK,1,[Defined to use log_clock timestamps])
1700 fi
1701
1702 # Add -Werror to CFLAGS.  This hack can be used to avoid problems with
1703 # misbehaving autoconf tests in case the user supplied -Werror.
1704 #
1705 AC_ARG_ENABLE(werror,
1706    AC_HELP_STRING([--enable-werror],
1707                   [append -Werror to CFLAGS]),
1708                   [if test $enableval = yes ; then
1709                       CFLAGS="$CFLAGS -Werror"
1710                    fi])
1711
1712 #
1713 # Configure option --enable-all-tests
1714 #
1715 AC_MSG_CHECKING([whether "make check" shall run all tests])
1716 AC_ARG_ENABLE(all-tests,
1717               AC_HELP_STRING([--enable-all-tests],
1718                              [let "make check" run all tests]),
1719               run_all_tests=$enableval, run_all_tests=no)
1720 AC_MSG_RESULT($run_all_tests)
1721 if test "$run_all_tests" = "yes"; then
1722     AC_DEFINE(RUN_ALL_TESTS,1,
1723             [Defined if "make check" shall run all tests])
1724 fi
1725
1726 #
1727 # We do not want support for the GNUPG_BUILDDIR environment variable
1728 # in a released version.  However, our regression tests suite requires
1729 # this and thus we build with support for it during "make distcheck".
1730 # This configure option implements this along with the top Makefile's
1731 # AM_DISTCHECK_CONFIGURE_FLAGS.
1732 #
1733 gnupg_builddir_envvar=no
1734 AC_ARG_ENABLE(gnupg-builddir-envvar,,
1735               gnupg_builddir_envvar=$enableval)
1736 if test x"$gnupg_builddir_envvar" = x"yes"; then
1737    AC_DEFINE(ENABLE_GNUPG_BUILDDIR_ENVVAR, 1,
1738       [This is only used with "make distcheck"])
1739 fi
1740
1741 #
1742 # Decide what to build
1743 #
1744
1745 build_scdaemon_extra=""
1746 if test "$build_scdaemon" = "yes"; then
1747   if test $have_libusb = no; then
1748      build_scdaemon_extra="without internal CCID driver"
1749   fi
1750   if test -n "$build_scdaemon_extra"; then
1751      build_scdaemon_extra="(${build_scdaemon_extra})"
1752   fi
1753 fi
1754
1755
1756 #
1757 # Set variables for use by automake makefiles.
1758 #
1759 AM_CONDITIONAL(BUILD_GPG,         test "$build_gpg" = "yes")
1760 AM_CONDITIONAL(BUILD_GPGSM,       test "$build_gpgsm" = "yes")
1761 AM_CONDITIONAL(BUILD_AGENT,       test "$build_agent" = "yes")
1762 AM_CONDITIONAL(BUILD_SCDAEMON,    test "$build_scdaemon" = "yes")
1763 AM_CONDITIONAL(BUILD_G13,         test "$build_g13" = "yes")
1764 AM_CONDITIONAL(BUILD_DIRMNGR,     test "$build_dirmngr" = "yes")
1765 AM_CONDITIONAL(BUILD_DOC,         test "$build_doc" = "yes")
1766 AM_CONDITIONAL(BUILD_SYMCRYPTRUN, test "$build_symcryptrun" = "yes")
1767 AM_CONDITIONAL(BUILD_GPGTAR,      test "$build_gpgtar" = "yes")
1768 AM_CONDITIONAL(BUILD_WKS_TOOLS,   test "$build_wks_tools" = "yes")
1769
1770 AM_CONDITIONAL(ENABLE_CARD_SUPPORT, test "$card_support" = yes)
1771 AM_CONDITIONAL(NO_TRUST_MODELS,     test "$use_trust_models" = no)
1772 AM_CONDITIONAL(USE_TOFU,            test "$use_tofu" = yes)
1773
1774 #
1775 # Set some defines for use gpgconf.
1776 #
1777 if test "$build_gpg" = yes ; then
1778     AC_DEFINE(BUILD_WITH_GPG,1,[Defined if GPG is to be build])
1779 fi
1780 if test "$build_gpgsm" = yes ; then
1781     AC_DEFINE(BUILD_WITH_GPGSM,1,[Defined if GPGSM is to be build])
1782 fi
1783 if test "$build_agent" = yes ; then
1784     AC_DEFINE(BUILD_WITH_AGENT,1,[Defined if GPG-AGENT is to be build])
1785 fi
1786 if test "$build_scdaemon" = yes ; then
1787     AC_DEFINE(BUILD_WITH_SCDAEMON,1,[Defined if SCDAEMON is to be build])
1788 fi
1789 if test "$build_dirmngr" = yes ; then
1790     AC_DEFINE(BUILD_WITH_DIRMNGR,1,[Defined if DIRMNGR is to be build])
1791 fi
1792 if test "$build_g13" = yes ; then
1793     AC_DEFINE(BUILD_WITH_G13,1,[Defined if G13 is to be build])
1794 fi
1795
1796
1797 #
1798 # Define Name strings
1799 #
1800 AC_DEFINE_UNQUOTED(GNUPG_NAME, "GnuPG", [The name of the project])
1801
1802 AC_DEFINE_UNQUOTED(GPG_NAME, "gpg", [The name of the OpenPGP tool])
1803 AC_DEFINE_UNQUOTED(GPG_DISP_NAME, "GnuPG", [The displayed name of gpg])
1804
1805 AC_DEFINE_UNQUOTED(GPGSM_NAME, "gpgsm", [The name of the S/MIME tool])
1806 AC_DEFINE_UNQUOTED(GPGSM_DISP_NAME, "GPGSM", [The displayed name of gpgsm])
1807
1808 AC_DEFINE_UNQUOTED(GPG_AGENT_NAME, "gpg-agent", [The name of the agent])
1809 AC_DEFINE_UNQUOTED(GPG_AGENT_DISP_NAME, "GPG Agent",
1810                                         [The displayed name of gpg-agent])
1811
1812 AC_DEFINE_UNQUOTED(SCDAEMON_NAME, "scdaemon", [The name of the scdaemon])
1813 AC_DEFINE_UNQUOTED(SCDAEMON_DISP_NAME, "SCDaemon",
1814                                        [The displayed name of scdaemon])
1815
1816 AC_DEFINE_UNQUOTED(DIRMNGR_NAME, "dirmngr", [The name of the dirmngr])
1817 AC_DEFINE_UNQUOTED(DIRMNGR_DISP_NAME, "DirMngr",
1818                                       [The displayed name of dirmngr])
1819
1820 AC_DEFINE_UNQUOTED(G13_NAME, "g13", [The name of the g13 tool])
1821 AC_DEFINE_UNQUOTED(G13_DISP_NAME, "G13", [The displayed name of g13])
1822
1823 AC_DEFINE_UNQUOTED(GPGCONF_NAME, "gpgconf", [The name of the gpgconf tool])
1824 AC_DEFINE_UNQUOTED(GPGCONF_DISP_NAME, "GPGConf",
1825                                       [The displayed name of gpgconf])
1826
1827 AC_DEFINE_UNQUOTED(GPGTAR_NAME, "gpgtar", [The name of the gpgtar tool])
1828
1829 AC_DEFINE_UNQUOTED(GPG_AGENT_SOCK_NAME, "S.gpg-agent",
1830                    [The name of the agent socket])
1831 AC_DEFINE_UNQUOTED(GPG_AGENT_EXTRA_SOCK_NAME, "S.gpg-agent.extra",
1832                    [The name of the agent socket for remote access])
1833 AC_DEFINE_UNQUOTED(GPG_AGENT_BROWSER_SOCK_NAME, "S.gpg-agent.browser",
1834                    [The name of the agent socket for browsers])
1835 AC_DEFINE_UNQUOTED(GPG_AGENT_SSH_SOCK_NAME, "S.gpg-agent.ssh",
1836                    [The name of the agent socket for ssh])
1837 AC_DEFINE_UNQUOTED(DIRMNGR_INFO_NAME, "DIRMNGR_INFO",
1838                    [The name of the dirmngr info envvar])
1839 AC_DEFINE_UNQUOTED(SCDAEMON_SOCK_NAME, "S.scdaemon",
1840                    [The name of the SCdaemon socket])
1841 AC_DEFINE_UNQUOTED(DIRMNGR_SOCK_NAME, "S.dirmngr",
1842                    [The name of the dirmngr socket])
1843 AC_DEFINE_UNQUOTED(DIRMNGR_DEFAULT_KEYSERVER,
1844                    "hkps://hkps.pool.sks-keyservers.net",
1845       [The default keyserver for dirmngr to use, if none is explicitly given])
1846
1847 AC_DEFINE_UNQUOTED(GPGEXT_GPG, "gpg", [The standard binary file suffix])
1848
1849 if test "$have_w32_system" = yes; then
1850   AC_DEFINE_UNQUOTED(GNUPG_REGISTRY_DIR, "Software\\\\GNU\\\\GnuPG",
1851                      [The directory part of the W32 registry keys])
1852 fi
1853
1854
1855 #
1856 # Provide information about the build.
1857 #
1858 BUILD_REVISION="mym4_revision"
1859 AC_SUBST(BUILD_REVISION)
1860 AC_DEFINE_UNQUOTED(BUILD_REVISION, "$BUILD_REVISION",
1861                    [GIT commit id revision used to build this package])
1862
1863 changequote(,)dnl
1864 BUILD_VERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./'`
1865 changequote([,])dnl
1866 BUILD_VERSION="${BUILD_VERSION}mym4_revision_dec"
1867 BUILD_FILEVERSION=`echo "${BUILD_VERSION}" | tr . ,`
1868 AC_SUBST(BUILD_VERSION)
1869 AC_SUBST(BUILD_FILEVERSION)
1870
1871 AC_ARG_ENABLE([build-timestamp],
1872   AC_HELP_STRING([--enable-build-timestamp],
1873                  [set an explicit build timestamp for reproducibility.
1874                   (default is the current time in ISO-8601 format)]),
1875      [if test "$enableval" = "yes"; then
1876         BUILD_TIMESTAMP=`date -u +%Y-%m-%dT%H:%M+0000 2>/dev/null || date`
1877       else
1878         BUILD_TIMESTAMP="$enableval"
1879       fi
1880       BUILD_HOSTNAME="$ac_hostname"],
1881      [BUILD_TIMESTAMP="<none>"
1882       BUILD_HOSTNAME="<anon>"])
1883 AC_SUBST(BUILD_TIMESTAMP)
1884 AC_DEFINE_UNQUOTED(BUILD_TIMESTAMP, "$BUILD_TIMESTAMP",
1885                    [The time this package was configured for a build])
1886 AC_SUBST(BUILD_HOSTNAME)
1887
1888
1889 #
1890 # Print errors here so that they are visible all
1891 # together and the user can acquire them all together.
1892 #
1893 die=no
1894 if test "$have_gpg_error" = "no"; then
1895    die=yes
1896    AC_MSG_NOTICE([[
1897 ***
1898 *** You need libgpg-error to build this program.
1899 **  This library is for example available at
1900 ***   https://gnupg.org/ftp/gcrypt/libgpg-error
1901 *** (at least version $NEED_GPG_ERROR_VERSION is required.)
1902 ***]])
1903 fi
1904 if test "$have_libgcrypt" = "no"; then
1905    die=yes
1906    AC_MSG_NOTICE([[
1907 ***
1908 *** You need libgcrypt to build this program.
1909 **  This library is for example available at
1910 ***   https://gnupg.org/ftp/gcrypt/libgcrypt/
1911 *** (at least version $NEED_LIBGCRYPT_VERSION (API $NEED_LIBGCRYPT_API) is required.)
1912 ***]])
1913 fi
1914 if test "$have_libassuan" = "no"; then
1915    die=yes
1916    AC_MSG_NOTICE([[
1917 ***
1918 *** You need libassuan to build this program.
1919 *** This library is for example available at
1920 ***   https://gnupg.org/ftp/gcrypt/libassuan/
1921 *** (at least version $NEED_LIBASSUAN_VERSION (API $NEED_LIBASSUAN_API) is required).
1922 ***]])
1923 fi
1924 if test "$have_ksba" = "no"; then
1925     die=yes
1926     AC_MSG_NOTICE([[
1927 ***
1928 *** You need libksba to build this program.
1929 *** This library is for example available at
1930 ***   https://gnupg.org/ftp/gcrypt/libksba/
1931 *** (at least version $NEED_KSBA_VERSION using API $NEED_KSBA_API is required).
1932 ***]])
1933 fi
1934 if test "$gnupg_have_ldap" = yes; then
1935   if test "$have_w32ce_system" = yes; then
1936     AC_MSG_NOTICE([[
1937 *** Note that CeGCC might be broken, a package fixing this is:
1938 ***    http://files.kolab.org/local/windows-ce/
1939 ***                           source/wldap32_0.1-mingw32ce.orig.tar.gz
1940 ***                           binary/wldap32-ce-arm-dev_0.1-1_all.deb
1941 ***]])
1942    fi
1943 fi
1944 if test "$have_npth" = "no"; then
1945     die=yes
1946     AC_MSG_NOTICE([[
1947 ***
1948 *** It is now required to build with support for the
1949 *** New Portable Threads Library (nPth). Please install this
1950 *** library first.  The library is for example available at
1951 ***   https://gnupg.org/ftp/gcrypt/npth/
1952 *** (at least version $NEED_NPTH_VERSION (API $NEED_NPTH_API) is required).
1953 ***]])
1954 fi
1955
1956 if test "$require_iconv" = yes; then
1957   if test "$am_func_iconv" != yes; then
1958     die=yes
1959     AC_MSG_NOTICE([[
1960 ***
1961 *** The system does not provide a working iconv function.  Please
1962 *** install a suitable library; for example GNU Libiconv which is
1963 *** available at:
1964 ***   https://ftp.gnu.org/gnu/libiconv/
1965 ***]])
1966   fi
1967 fi
1968
1969 if test "$use_ccid_driver" = yes; then
1970   if test "$have_libusb" != yes; then
1971     die=yes
1972     AC_MSG_NOTICE([[
1973 ***
1974 *** You need libusb to build the internal ccid driver.  Please
1975 *** install a libusb suitable for your system.
1976 ***]])
1977   fi
1978 fi
1979
1980 if test "$die" = "yes"; then
1981     AC_MSG_ERROR([[
1982 ***
1983 *** Required libraries not found. Please consult the above messages
1984 *** and install them before running configure again.
1985 ***]])
1986 fi
1987
1988
1989
1990 AC_CONFIG_FILES([ m4/Makefile
1991 Makefile
1992 po/Makefile.in
1993 common/Makefile
1994 common/w32info-rc.h
1995 kbx/Makefile
1996 g10/Makefile
1997 sm/Makefile
1998 agent/Makefile
1999 scd/Makefile
2000 g13/Makefile
2001 dirmngr/Makefile
2002 tools/gpg-zip
2003 tools/Makefile
2004 doc/Makefile
2005 tests/Makefile
2006 tests/gpgscm/Makefile
2007 tests/openpgp/Makefile
2008 tests/migrations/Makefile
2009 tests/gpgsm/Makefile
2010 tests/gpgme/Makefile
2011 tests/pkits/Makefile
2012 g10/gpg.w32-manifest
2013 ])
2014
2015
2016 AC_OUTPUT
2017
2018
2019 echo "
2020         GnuPG v${VERSION} has been configured as follows:
2021
2022         Revision:  mym4_revision  (mym4_revision_dec)
2023         Platform:  $PRINTABLE_OS_NAME ($host)
2024
2025         OpenPGP:   $build_gpg
2026         S/MIME:    $build_gpgsm
2027         Agent:     $build_agent
2028         Smartcard: $build_scdaemon $build_scdaemon_extra
2029         G13:       $build_g13
2030         Dirmngr:   $build_dirmngr
2031         Gpgtar:    $build_gpgtar
2032         WKS tools: $build_wks_tools
2033
2034         Protect tool:      $show_gnupg_protect_tool_pgm
2035         LDAP wrapper:      $show_gnupg_dirmngr_ldap_pgm
2036         Default agent:     $show_gnupg_agent_pgm
2037         Default pinentry:  $show_gnupg_pinentry_pgm
2038         Default scdaemon:  $show_gnupg_scdaemon_pgm
2039         Default dirmngr:   $show_gnupg_dirmngr_pgm
2040
2041         Dirmngr auto start:  $dirmngr_auto_start
2042         Readline support:    $gnupg_cv_have_readline
2043         LDAP support:        $gnupg_have_ldap
2044         TLS support:         $use_tls_library
2045         TOFU support:        $use_tofu
2046         Tor support:         $show_tor_support
2047 "
2048 if test x"$use_regex" != xyes ; then
2049 echo "
2050         Warning: No regular expression support available.
2051                  OpenPGP trust signatures won't work.
2052                  gpg-check-pattern will not be built.
2053 "
2054 fi
2055 if test "x${gpg_config_script_warn}" != x; then
2056 cat <<G10EOF
2057         Warning: Mismatches between the target platform and the
2058                  to be used libraries have been detected for:
2059                   ${gpg_config_script_warn}
2060                  Please check above for more warning messages.
2061
2062 G10EOF
2063 fi