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