scd: Add very basic support for PIV cards.
[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_HEADER_TIME
1371 AC_CHECK_SIZEOF(time_t,,[[
1372 #include <stdio.h>
1373 #if TIME_WITH_SYS_TIME
1374 # include <sys/time.h>
1375 # include <time.h>
1376 #else
1377 # if HAVE_SYS_TIME_H
1378 #  include <sys/time.h>
1379 # else
1380 #  include <time.h>
1381 # endif
1382 #endif
1383 ]])
1384 GNUPG_TIME_T_UNSIGNED
1385
1386
1387 if test "$ac_cv_sizeof_unsigned_short" = "0" \
1388    || test "$ac_cv_sizeof_unsigned_int" = "0" \
1389    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
1390     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
1391 fi
1392
1393
1394 #
1395 # Checks for library functions.
1396 #
1397 AC_MSG_NOTICE([checking for library functions])
1398 AC_CHECK_DECLS(getpagesize)
1399 AC_FUNC_FSEEKO
1400 AC_FUNC_VPRINTF
1401 AC_FUNC_FORK
1402 AC_CHECK_FUNCS([atexit canonicalize_file_name clock_gettime ctermid  \
1403                 explicit_bzero fcntl flockfile fsync ftello          \
1404                 ftruncate funlockfile getaddrinfo getenv getpagesize \
1405                 getpwnam getpwuid getrlimit getrusage gettimeofday   \
1406                 gmtime_r inet_ntop inet_pton isascii lstat memicmp   \
1407                 memmove memrchr mmap nl_langinfo pipe raise rand     \
1408                 setenv setlocale setrlimit sigaction sigprocmask     \
1409                 stat stpcpy strcasecmp strerror strftime stricmp     \
1410                 strlwr strncasecmp strpbrk strsep strtol strtoul     \
1411                 strtoull tcgetattr timegm times ttyname unsetenv     \
1412                 wait4 waitpid ])
1413
1414 # On some systems (e.g. Solaris) nanosleep requires linking to librl.
1415 # Given that we use nanosleep only as an optimization over a select
1416 # based wait function we want it only if it is available in libc.
1417 _save_libs="$LIBS"
1418 AC_SEARCH_LIBS([nanosleep], [],
1419                [AC_DEFINE(HAVE_NANOSLEEP,1,
1420                 [Define to 1 if you have the `nanosleep' function in libc.])])
1421 LIBS="$_save_libs"
1422
1423
1424 # See whether libc supports the Linux inotify interface
1425 case "${host}" in
1426     *-*-linux*)
1427         AC_CHECK_FUNCS([inotify_init])
1428         ;;
1429 esac
1430
1431
1432 if test "$have_android_system" = yes; then
1433    # On Android ttyname is a stub but prints an error message.
1434    AC_DEFINE(HAVE_BROKEN_TTYNAME,1,
1435              [Defined if ttyname does not work properly])
1436 fi
1437
1438 AC_CHECK_TYPES([struct sigaction, sigset_t],,,[#include <signal.h>])
1439
1440 # Dirmngr requires mmap on Unix systems.
1441 if test $ac_cv_func_mmap != yes -a $mmap_needed = yes; then
1442   AC_MSG_ERROR([[Sorry, the current implementation requires mmap.]])
1443 fi
1444
1445
1446 #
1447 # Check for the getsockopt SO_PEERCRED, etc.
1448 #
1449 AC_CHECK_MEMBERS([struct ucred.pid, struct ucred.cr_pid, struct sockpeercred.pid], [], [], [#include <sys/types.h>
1450 #include <sys/socket.h> ])
1451
1452 # (Open)Solaris
1453 AC_CHECK_FUNCS([getpeerucred])
1454
1455
1456 #
1457 # W32 specific test
1458 #
1459 GNUPG_FUNC_MKDIR_TAKES_ONE_ARG
1460
1461 #
1462 # Sanity check regex.  Tests adapted from mutt.
1463 #
1464 AC_MSG_CHECKING([whether regular expression support is requested])
1465 AC_ARG_ENABLE(regex,
1466   AC_HELP_STRING([--disable-regex],
1467     [do not handle regular expressions in trust signatures]),
1468   use_regex=$enableval, use_regex=yes)
1469 AC_MSG_RESULT($use_regex)
1470
1471 if test "$use_regex" = yes ; then
1472   _cppflags="${CPPFLAGS}"
1473   _ldflags="${LDFLAGS}"
1474   AC_ARG_WITH(regex,
1475      AC_HELP_STRING([--with-regex=DIR],[look for regex in DIR]),
1476       [
1477       if test -d "$withval" ; then
1478         CPPFLAGS="${CPPFLAGS} -I$withval/include"
1479         LDFLAGS="${LDFLAGS} -L$withval/lib"
1480       fi
1481       ],withval="")
1482
1483   # Does the system have regex functions at all?
1484   AC_SEARCH_LIBS([regcomp], [regex])
1485   AC_CHECK_FUNC(regcomp, gnupg_cv_have_regex=yes, gnupg_cv_have_regex=no)
1486
1487   if test $gnupg_cv_have_regex = no; then
1488     use_regex=no
1489   else
1490     if test x"$cross_compiling" = xyes; then
1491       AC_MSG_WARN([cross compiling; assuming regexp library is not broken])
1492     else
1493       AC_CACHE_CHECK([whether your system's regexp library is broken],
1494        [gnupg_cv_regex_broken],
1495        AC_TRY_RUN([
1496 #include <unistd.h>
1497 #include <regex.h>
1498 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); }],
1499        gnupg_cv_regex_broken=no, gnupg_cv_regex_broken=yes, gnupg_cv_regex_broken=yes))
1500
1501       if test $gnupg_cv_regex_broken = yes; then
1502         AC_MSG_WARN([your regex is broken - disabling regex use])
1503         use_regex=no
1504       fi
1505     fi
1506   fi
1507   CPPFLAGS="${_cppflags}"
1508   LDFLAGS="${_ldflags}"
1509 fi
1510
1511 if test "$use_regex" != yes ; then
1512   AC_DEFINE(DISABLE_REGEX,1, [Define to disable regular expression support])
1513 fi
1514 AM_CONDITIONAL(DISABLE_REGEX, test x"$use_regex" != xyes)
1515
1516
1517
1518 #
1519 # Do we have zlib? Must do it here because Solaris failed
1520 # when compiling a conftest (due to the "-lz" from LIBS).
1521 # Note that we combine zlib and bzlib2 in ZLIBS.
1522 #
1523 if test "$use_zip" = yes ; then
1524   _cppflags="${CPPFLAGS}"
1525   _ldflags="${LDFLAGS}"
1526   AC_ARG_WITH(zlib,
1527     [  --with-zlib=DIR         use libz in DIR],[
1528       if test -d "$withval"; then
1529         CPPFLAGS="${CPPFLAGS} -I$withval/include"
1530         LDFLAGS="${LDFLAGS} -L$withval/lib"
1531       fi
1532     ])
1533
1534   AC_CHECK_HEADER(zlib.h,
1535      AC_CHECK_LIB(z, deflateInit2_,
1536        [
1537        ZLIBS="-lz"
1538        AC_DEFINE(HAVE_ZIP,1, [Defined if ZIP and ZLIB are supported])
1539        ],
1540        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
1541        CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags})
1542 fi
1543
1544
1545 #
1546 # Check whether we can support bzip2
1547 #
1548 if test "$use_bzip2" = yes ; then
1549   _cppflags="${CPPFLAGS}"
1550   _ldflags="${LDFLAGS}"
1551   AC_ARG_WITH(bzip2,
1552      AC_HELP_STRING([--with-bzip2=DIR],[look for bzip2 in DIR]),
1553       [
1554       if test -d "$withval" ; then
1555         CPPFLAGS="${CPPFLAGS} -I$withval/include"
1556         LDFLAGS="${LDFLAGS} -L$withval/lib"
1557       fi
1558       ],withval="")
1559
1560   # Checking alongside stdio.h as an early version of bzip2 (1.0)
1561   # required stdio.h to be included before bzlib.h, and Solaris 9 is
1562   # woefully out of date.
1563   if test "$withval" != no ; then
1564      AC_CHECK_HEADER(bzlib.h,
1565         AC_CHECK_LIB(bz2,BZ2_bzCompressInit,
1566           [
1567           have_bz2=yes
1568           ZLIBS="$ZLIBS -lbz2"
1569           AC_DEFINE(HAVE_BZIP2,1,
1570                   [Defined if the bz2 compression library is available])
1571           ],
1572           CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
1573           CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags},[#include <stdio.h>])
1574   fi
1575 fi
1576 AM_CONDITIONAL(ENABLE_BZIP2_SUPPORT,test x"$have_bz2" = "xyes")
1577 AC_SUBST(ZLIBS)
1578
1579
1580 # Check for readline support
1581 GNUPG_CHECK_READLINE
1582
1583
1584 if test "$development_version" = yes; then
1585     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
1586             [Defined if this is not a regular release])
1587 fi
1588
1589 if test "$USE_MAINTAINER_MODE" = "yes"; then
1590     AC_DEFINE(MAINTAINER_MODE,1,
1591             [Defined if this build is in maintainer mode])
1592 fi
1593
1594 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
1595
1596 GNUPG_CHECK_GNUMAKE
1597
1598 # Add some extra libs here so that previous tests don't fail for
1599 # mysterious reasons - the final link step should bail out.
1600 # W32SOCKLIBS is also defined so that if can be used for tools not
1601 # requiring any network stuff but linking to code in libcommon which
1602 # tracks in winsock stuff (e.g. init_common_subsystems).
1603 if test "$have_w32_system" = yes; then
1604    if test "$have_w32ce_system" = yes; then
1605      W32SOCKLIBS="-lws2"
1606    else
1607      W32SOCKLIBS="-lws2_32"
1608    fi
1609    NETLIBS="${NETLIBS} ${W32SOCKLIBS}"
1610 fi
1611
1612 AC_SUBST(NETLIBS)
1613 AC_SUBST(W32SOCKLIBS)
1614
1615 #
1616 # Setup gcc specific options
1617 #
1618 USE_C99_CFLAGS=
1619 AC_MSG_NOTICE([checking for cc features])
1620 if test "$GCC" = yes; then
1621     mycflags=
1622     mycflags_save=$CFLAGS
1623
1624     # Check whether gcc does not emit a diagnositc for unknown -Wno-*
1625     # options.  This is the case for gcc >= 4.6
1626     AC_MSG_CHECKING([if gcc ignores unknown -Wno-* options])
1627     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1628 #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6 )
1629 #kickerror
1630 #endif]],[])],[_gcc_silent_wno=yes],[_gcc_silent_wno=no])
1631     AC_MSG_RESULT($_gcc_silent_wno)
1632
1633     # Note that it is okay to use CFLAGS here because these are just
1634     # warning options and the user should have a chance of overriding
1635     # them.
1636     if test "$USE_MAINTAINER_MODE" = "yes"; then
1637         mycflags="$mycflags -O3 -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
1638         mycflags="$mycflags -Wformat -Wno-format-y2k -Wformat-security"
1639         if test x"$_gcc_silent_wno" = xyes ; then
1640           _gcc_wopt=yes
1641         else
1642           AC_MSG_CHECKING([if gcc supports -Wno-missing-field-initializers])
1643           CFLAGS="-Wno-missing-field-initializers"
1644           AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
1645                             [_gcc_wopt=yes],[_gcc_wopt=no])
1646           AC_MSG_RESULT($_gcc_wopt)
1647         fi
1648         if test x"$_gcc_wopt" = xyes ; then
1649           mycflags="$mycflags -W -Wno-sign-compare -Wno-format-zero-length"
1650           mycflags="$mycflags -Wno-missing-field-initializers"
1651         fi
1652
1653         AC_MSG_CHECKING([if gcc supports -Wdeclaration-after-statement])
1654         CFLAGS="-Wdeclaration-after-statement"
1655         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
1656         AC_MSG_RESULT($_gcc_wopt)
1657         if test x"$_gcc_wopt" = xyes ; then
1658           mycflags="$mycflags -Wdeclaration-after-statement"
1659         fi
1660
1661         AC_MSG_CHECKING([if gcc supports -Wlogical-op])
1662         CFLAGS="-Wlogical-op -Werror"
1663         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
1664         AC_MSG_RESULT($_gcc_wopt)
1665         if test x"$_gcc_wopt" = xyes ; then
1666           mycflags="$mycflags -Wlogical-op"
1667         fi
1668
1669         AC_MSG_CHECKING([if gcc supports -Wvla])
1670         CFLAGS="-Wvla"
1671         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
1672         AC_MSG_RESULT($_gcc_wopt)
1673         if test x"$_gcc_wopt" = xyes ; then
1674           mycflags="$mycflags -Wvla"
1675         fi
1676
1677     else
1678         mycflags="$mycflags -Wall"
1679     fi
1680
1681     if test x"$_gcc_silent_wno" = xyes ; then
1682       _gcc_psign=yes
1683     else
1684       AC_MSG_CHECKING([if gcc supports -Wno-pointer-sign])
1685       CFLAGS="-Wno-pointer-sign"
1686       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
1687                         [_gcc_psign=yes],[_gcc_psign=no])
1688       AC_MSG_RESULT($_gcc_psign)
1689     fi
1690     if test x"$_gcc_psign" = xyes ; then
1691        mycflags="$mycflags -Wno-pointer-sign"
1692     fi
1693
1694     AC_MSG_CHECKING([if gcc supports -Wpointer-arith])
1695     CFLAGS="-Wpointer-arith"
1696     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_psign=yes,_gcc_psign=no)
1697     AC_MSG_RESULT($_gcc_psign)
1698     if test x"$_gcc_psign" = xyes ; then
1699        mycflags="$mycflags -Wpointer-arith"
1700     fi
1701
1702     CFLAGS="$mycflags $mycflags_save"
1703     if test "$use_libdns" = yes; then
1704        # dirmngr/dns.{c,h} require C99 and GNU extensions.  */
1705        USE_C99_CFLAGS="-std=gnu99"
1706     fi
1707 fi
1708
1709 AC_SUBST(USE_C99_CFLAGS)
1710
1711
1712 #
1713 # This is handy for debugging so the compiler doesn't rearrange
1714 # things and eliminate variables.
1715 #
1716 AC_ARG_ENABLE(optimization,
1717    AC_HELP_STRING([--disable-optimization],
1718                   [disable compiler optimization]),
1719                   [if test $enableval = no ; then
1720                       CFLAGS=`echo $CFLAGS | sed s/-O[[1-9]]\ /-O0\ /g`
1721                    fi])
1722
1723 #
1724 # log_debug has certain requirements which might hamper portability.
1725 # Thus we use an option to enable it.
1726 #
1727 AC_MSG_CHECKING([whether to enable log_clock])
1728 AC_ARG_ENABLE(log_clock,
1729               AC_HELP_STRING([--enable-log-clock],
1730                              [enable log_clock timestamps]),
1731               enable_log_clock=$enableval, enable_log_clock=no)
1732 AC_MSG_RESULT($enable_log_clock)
1733 if test "$enable_log_clock" = yes ; then
1734   AC_DEFINE(ENABLE_LOG_CLOCK,1,[Defined to use log_clock timestamps])
1735 fi
1736
1737 # Add -Werror to CFLAGS.  This hack can be used to avoid problems with
1738 # misbehaving autoconf tests in case the user supplied -Werror.
1739 #
1740 AC_ARG_ENABLE(werror,
1741    AC_HELP_STRING([--enable-werror],
1742                   [append -Werror to CFLAGS]),
1743                   [if test $enableval = yes ; then
1744                       CFLAGS="$CFLAGS -Werror"
1745                    fi])
1746
1747 #
1748 # Configure option --enable-all-tests
1749 #
1750 AC_MSG_CHECKING([whether "make check" shall run all tests])
1751 AC_ARG_ENABLE(all-tests,
1752               AC_HELP_STRING([--enable-all-tests],
1753                              [let "make check" run all tests]),
1754               run_all_tests=$enableval, run_all_tests=no)
1755 AC_MSG_RESULT($run_all_tests)
1756 if test "$run_all_tests" = "yes"; then
1757     AC_DEFINE(RUN_ALL_TESTS,1,
1758             [Defined if "make check" shall run all tests])
1759 fi
1760
1761 #
1762 # We do not want support for the GNUPG_BUILDDIR environment variable
1763 # in a released version.  However, our regression tests suite requires
1764 # this and thus we build with support for it during "make distcheck".
1765 # This configure option implements this along with the top Makefile's
1766 # AM_DISTCHECK_CONFIGURE_FLAGS.
1767 #
1768 gnupg_builddir_envvar=no
1769 AC_ARG_ENABLE(gnupg-builddir-envvar,,
1770               gnupg_builddir_envvar=$enableval)
1771 if test x"$gnupg_builddir_envvar" = x"yes"; then
1772    AC_DEFINE(ENABLE_GNUPG_BUILDDIR_ENVVAR, 1,
1773       [This is only used with "make distcheck"])
1774 fi
1775
1776
1777 #
1778 # To avoid problems with systemd cleaning up the /run/user directory,
1779 # this option will make GnuPG try to use /run/gnupg/user as socket dir
1780 # before /run/user
1781 #
1782 AC_ARG_ENABLE(run-gnupg-user-socket,
1783     AC_HELP_STRING([--enable-run-gnupg-user-socket],
1784                    [try /run/gnupg/user for sockets prior to /run/user]),
1785     use_run_gnupg_user_socket=$enableval)
1786 if test x"$use_run_gnupg_user_socket" = x"yes"; then
1787    AC_DEFINE(USE_RUN_GNUPG_USER_SOCKET, 1,
1788             [If defined try /run/gnupg/user before /run/user])
1789 fi
1790
1791
1792 #
1793 # Decide what to build
1794 #
1795
1796 build_scdaemon_extra=""
1797 if test "$build_scdaemon" = "yes"; then
1798   if test $have_libusb = no; then
1799      build_scdaemon_extra="without internal CCID driver"
1800   fi
1801   if test -n "$build_scdaemon_extra"; then
1802      build_scdaemon_extra="(${build_scdaemon_extra})"
1803   fi
1804 fi
1805
1806
1807 #
1808 # Set variables for use by automake makefiles.
1809 #
1810 AM_CONDITIONAL(BUILD_GPG,         test "$build_gpg" = "yes")
1811 AM_CONDITIONAL(BUILD_GPGSM,       test "$build_gpgsm" = "yes")
1812 AM_CONDITIONAL(BUILD_AGENT,       test "$build_agent" = "yes")
1813 AM_CONDITIONAL(BUILD_SCDAEMON,    test "$build_scdaemon" = "yes")
1814 AM_CONDITIONAL(BUILD_G13,         test "$build_g13" = "yes")
1815 AM_CONDITIONAL(BUILD_DIRMNGR,     test "$build_dirmngr" = "yes")
1816 AM_CONDITIONAL(BUILD_DOC,         test "$build_doc" = "yes")
1817 AM_CONDITIONAL(BUILD_SYMCRYPTRUN, test "$build_symcryptrun" = "yes")
1818 AM_CONDITIONAL(BUILD_GPGTAR,      test "$build_gpgtar" = "yes")
1819 AM_CONDITIONAL(BUILD_WKS_TOOLS,   test "$build_wks_tools" = "yes")
1820
1821 AM_CONDITIONAL(ENABLE_CARD_SUPPORT, test "$card_support" = yes)
1822 AM_CONDITIONAL(NO_TRUST_MODELS,     test "$use_trust_models" = no)
1823 AM_CONDITIONAL(USE_TOFU,            test "$use_tofu" = yes)
1824
1825 #
1826 # Set some defines for use gpgconf.
1827 #
1828 if test "$build_gpg" = yes ; then
1829     AC_DEFINE(BUILD_WITH_GPG,1,[Defined if GPG is to be build])
1830 fi
1831 if test "$build_gpgsm" = yes ; then
1832     AC_DEFINE(BUILD_WITH_GPGSM,1,[Defined if GPGSM is to be build])
1833 fi
1834 if test "$build_agent" = yes ; then
1835     AC_DEFINE(BUILD_WITH_AGENT,1,[Defined if GPG-AGENT is to be build])
1836 fi
1837 if test "$build_scdaemon" = yes ; then
1838     AC_DEFINE(BUILD_WITH_SCDAEMON,1,[Defined if SCDAEMON is to be build])
1839 fi
1840 if test "$build_dirmngr" = yes ; then
1841     AC_DEFINE(BUILD_WITH_DIRMNGR,1,[Defined if DIRMNGR is to be build])
1842 fi
1843 if test "$build_g13" = yes ; then
1844     AC_DEFINE(BUILD_WITH_G13,1,[Defined if G13 is to be build])
1845 fi
1846
1847
1848 #
1849 # Define Name strings
1850 #
1851 AC_DEFINE_UNQUOTED(GNUPG_NAME, "GnuPG", [The name of the project])
1852
1853 AC_DEFINE_UNQUOTED(GPG_NAME, "gpg", [The name of the OpenPGP tool])
1854 AC_DEFINE_UNQUOTED(GPG_DISP_NAME, "GnuPG", [The displayed name of gpg])
1855
1856 AC_DEFINE_UNQUOTED(GPGSM_NAME, "gpgsm", [The name of the S/MIME tool])
1857 AC_DEFINE_UNQUOTED(GPGSM_DISP_NAME, "GPGSM", [The displayed name of gpgsm])
1858
1859 AC_DEFINE_UNQUOTED(GPG_AGENT_NAME, "gpg-agent", [The name of the agent])
1860 AC_DEFINE_UNQUOTED(GPG_AGENT_DISP_NAME, "GPG Agent",
1861                                         [The displayed name of gpg-agent])
1862
1863 AC_DEFINE_UNQUOTED(SCDAEMON_NAME, "scdaemon", [The name of the scdaemon])
1864 AC_DEFINE_UNQUOTED(SCDAEMON_DISP_NAME, "SCDaemon",
1865                                        [The displayed name of scdaemon])
1866
1867 AC_DEFINE_UNQUOTED(DIRMNGR_NAME, "dirmngr", [The name of the dirmngr])
1868 AC_DEFINE_UNQUOTED(DIRMNGR_DISP_NAME, "DirMngr",
1869                                       [The displayed name of dirmngr])
1870
1871 AC_DEFINE_UNQUOTED(G13_NAME, "g13", [The name of the g13 tool])
1872 AC_DEFINE_UNQUOTED(G13_DISP_NAME, "G13", [The displayed name of g13])
1873
1874 AC_DEFINE_UNQUOTED(GPGCONF_NAME, "gpgconf", [The name of the gpgconf tool])
1875 AC_DEFINE_UNQUOTED(GPGCONF_DISP_NAME, "GPGConf",
1876                                       [The displayed name of gpgconf])
1877
1878 AC_DEFINE_UNQUOTED(GPGTAR_NAME, "gpgtar", [The name of the gpgtar tool])
1879
1880 AC_DEFINE_UNQUOTED(GPG_AGENT_SOCK_NAME, "S.gpg-agent",
1881                    [The name of the agent socket])
1882 AC_DEFINE_UNQUOTED(GPG_AGENT_EXTRA_SOCK_NAME, "S.gpg-agent.extra",
1883                    [The name of the agent socket for remote access])
1884 AC_DEFINE_UNQUOTED(GPG_AGENT_BROWSER_SOCK_NAME, "S.gpg-agent.browser",
1885                    [The name of the agent socket for browsers])
1886 AC_DEFINE_UNQUOTED(GPG_AGENT_SSH_SOCK_NAME, "S.gpg-agent.ssh",
1887                    [The name of the agent socket for ssh])
1888 AC_DEFINE_UNQUOTED(DIRMNGR_INFO_NAME, "DIRMNGR_INFO",
1889                    [The name of the dirmngr info envvar])
1890 AC_DEFINE_UNQUOTED(SCDAEMON_SOCK_NAME, "S.scdaemon",
1891                    [The name of the SCdaemon socket])
1892 AC_DEFINE_UNQUOTED(DIRMNGR_SOCK_NAME, "S.dirmngr",
1893                    [The name of the dirmngr socket])
1894 AC_DEFINE_UNQUOTED(DIRMNGR_DEFAULT_KEYSERVER,
1895                    "hkps://hkps.pool.sks-keyservers.net",
1896       [The default keyserver for dirmngr to use, if none is explicitly given])
1897
1898 AC_DEFINE_UNQUOTED(GPGEXT_GPG, "gpg", [The standard binary file suffix])
1899
1900 if test "$have_w32_system" = yes; then
1901   AC_DEFINE_UNQUOTED(GNUPG_REGISTRY_DIR, "Software\\\\GNU\\\\GnuPG",
1902                      [The directory part of the W32 registry keys])
1903 fi
1904
1905
1906 #
1907 # Provide information about the build.
1908 #
1909 BUILD_REVISION="mym4_revision"
1910 AC_SUBST(BUILD_REVISION)
1911 AC_DEFINE_UNQUOTED(BUILD_REVISION, "$BUILD_REVISION",
1912                    [GIT commit id revision used to build this package])
1913
1914 changequote(,)dnl
1915 BUILD_VERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./'`
1916 changequote([,])dnl
1917 BUILD_VERSION="${BUILD_VERSION}mym4_revision_dec"
1918 BUILD_FILEVERSION=`echo "${BUILD_VERSION}" | tr . ,`
1919 AC_SUBST(BUILD_VERSION)
1920 AC_SUBST(BUILD_FILEVERSION)
1921
1922 AC_ARG_ENABLE([build-timestamp],
1923   AC_HELP_STRING([--enable-build-timestamp],
1924                  [set an explicit build timestamp for reproducibility.
1925                   (default is the current time in ISO-8601 format)]),
1926      [if test "$enableval" = "yes"; then
1927         BUILD_TIMESTAMP=`date -u +%Y-%m-%dT%H:%M+0000 2>/dev/null || date`
1928       else
1929         BUILD_TIMESTAMP="$enableval"
1930       fi
1931       BUILD_HOSTNAME="$ac_hostname"],
1932      [BUILD_TIMESTAMP="<none>"
1933       BUILD_HOSTNAME="<anon>"])
1934 AC_SUBST(BUILD_TIMESTAMP)
1935 AC_DEFINE_UNQUOTED(BUILD_TIMESTAMP, "$BUILD_TIMESTAMP",
1936                    [The time this package was configured for a build])
1937 AC_SUBST(BUILD_HOSTNAME)
1938
1939
1940 #
1941 # Print errors here so that they are visible all
1942 # together and the user can acquire them all together.
1943 #
1944 die=no
1945 if test "$have_gpg_error" = "no"; then
1946    die=yes
1947    AC_MSG_NOTICE([[
1948 ***
1949 *** You need libgpg-error to build this program.
1950 **  This library is for example available at
1951 ***   https://gnupg.org/ftp/gcrypt/libgpg-error
1952 *** (at least version $NEED_GPG_ERROR_VERSION is required.)
1953 ***]])
1954 fi
1955 if test "$have_libgcrypt" = "no"; then
1956    die=yes
1957    AC_MSG_NOTICE([[
1958 ***
1959 *** You need libgcrypt to build this program.
1960 **  This library is for example available at
1961 ***   https://gnupg.org/ftp/gcrypt/libgcrypt/
1962 *** (at least version $NEED_LIBGCRYPT_VERSION (API $NEED_LIBGCRYPT_API) is required.)
1963 ***]])
1964 fi
1965 if test "$have_libassuan" = "no"; then
1966    die=yes
1967    AC_MSG_NOTICE([[
1968 ***
1969 *** You need libassuan to build this program.
1970 *** This library is for example available at
1971 ***   https://gnupg.org/ftp/gcrypt/libassuan/
1972 *** (at least version $NEED_LIBASSUAN_VERSION (API $NEED_LIBASSUAN_API) is required).
1973 ***]])
1974 fi
1975 if test "$have_ksba" = "no"; then
1976     die=yes
1977     AC_MSG_NOTICE([[
1978 ***
1979 *** You need libksba to build this program.
1980 *** This library is for example available at
1981 ***   https://gnupg.org/ftp/gcrypt/libksba/
1982 *** (at least version $NEED_KSBA_VERSION using API $NEED_KSBA_API is required).
1983 ***]])
1984 fi
1985 if test "$gnupg_have_ldap" = yes; then
1986   if test "$have_w32ce_system" = yes; then
1987     AC_MSG_NOTICE([[
1988 *** Note that CeGCC might be broken, a package fixing this is:
1989 ***    http://files.kolab.org/local/windows-ce/
1990 ***                           source/wldap32_0.1-mingw32ce.orig.tar.gz
1991 ***                           binary/wldap32-ce-arm-dev_0.1-1_all.deb
1992 ***]])
1993    fi
1994 fi
1995 if test "$have_npth" = "no"; then
1996     die=yes
1997     AC_MSG_NOTICE([[
1998 ***
1999 *** It is now required to build with support for the
2000 *** New Portable Threads Library (nPth). Please install this
2001 *** library first.  The library is for example available at
2002 ***   https://gnupg.org/ftp/gcrypt/npth/
2003 *** (at least version $NEED_NPTH_VERSION (API $NEED_NPTH_API) is required).
2004 ***]])
2005 fi
2006
2007 if test "$require_iconv" = yes; then
2008   if test "$am_func_iconv" != yes; then
2009     die=yes
2010     AC_MSG_NOTICE([[
2011 ***
2012 *** The system does not provide a working iconv function.  Please
2013 *** install a suitable library; for example GNU Libiconv which is
2014 *** available at:
2015 ***   https://ftp.gnu.org/gnu/libiconv/
2016 ***]])
2017   fi
2018 fi
2019
2020 if test "$use_ccid_driver" = yes; then
2021   if test "$have_libusb" != yes; then
2022     die=yes
2023     AC_MSG_NOTICE([[
2024 ***
2025 *** You need libusb to build the internal ccid driver.  Please
2026 *** install a libusb suitable for your system.
2027 ***]])
2028   fi
2029 fi
2030
2031 if test "$die" = "yes"; then
2032     AC_MSG_ERROR([[
2033 ***
2034 *** Required libraries not found. Please consult the above messages
2035 *** and install them before running configure again.
2036 ***]])
2037 fi
2038
2039
2040
2041 AC_CONFIG_FILES([ m4/Makefile
2042 Makefile
2043 po/Makefile.in
2044 common/Makefile
2045 common/w32info-rc.h
2046 kbx/Makefile
2047 g10/Makefile
2048 sm/Makefile
2049 agent/Makefile
2050 scd/Makefile
2051 g13/Makefile
2052 dirmngr/Makefile
2053 tools/Makefile
2054 doc/Makefile
2055 tests/Makefile
2056 tests/gpgscm/Makefile
2057 tests/openpgp/Makefile
2058 tests/migrations/Makefile
2059 tests/gpgsm/Makefile
2060 tests/gpgme/Makefile
2061 tests/pkits/Makefile
2062 g10/gpg.w32-manifest
2063 ])
2064
2065
2066 AC_OUTPUT
2067
2068
2069 echo "
2070         GnuPG v${VERSION} has been configured as follows:
2071
2072         Revision:  mym4_revision  (mym4_revision_dec)
2073         Platform:  $PRINTABLE_OS_NAME ($host)
2074
2075         OpenPGP:   $build_gpg
2076         S/MIME:    $build_gpgsm
2077         Agent:     $build_agent
2078         Smartcard: $build_scdaemon $build_scdaemon_extra
2079         G13:       $build_g13
2080         Dirmngr:   $build_dirmngr
2081         Gpgtar:    $build_gpgtar
2082         WKS tools: $build_wks_tools
2083
2084         Protect tool:      $show_gnupg_protect_tool_pgm
2085         LDAP wrapper:      $show_gnupg_dirmngr_ldap_pgm
2086         Default agent:     $show_gnupg_agent_pgm
2087         Default pinentry:  $show_gnupg_pinentry_pgm
2088         Default scdaemon:  $show_gnupg_scdaemon_pgm
2089         Default dirmngr:   $show_gnupg_dirmngr_pgm
2090
2091         Dirmngr auto start:  $dirmngr_auto_start
2092         Readline support:    $gnupg_cv_have_readline
2093         LDAP support:        $gnupg_have_ldap
2094         TLS support:         $use_tls_library
2095         TOFU support:        $use_tofu
2096         Tor support:         $show_tor_support
2097 "
2098 if test x"$use_regex" != xyes ; then
2099 echo "
2100         Warning: No regular expression support available.
2101                  OpenPGP trust signatures won't work.
2102                  gpg-check-pattern will not be built.
2103 "
2104 fi
2105 if test "x${gpg_config_script_warn}" != x; then
2106 cat <<G10EOF
2107         Warning: Mismatches between the target platform and the
2108                  to be used libraries have been detected for:
2109                   ${gpg_config_script_warn}
2110                  Please check above for more warning messages.
2111
2112 G10EOF
2113 fi