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