configure: bits of reindenting, start of an incomplete new configuration
[oweals/gnunet.git] / configure.ac
1 # This file is part of GNUnet.
2 # (C) 2001--2019 GNUnet e.V.
3 #
4 # GNUnet is free software: you can redistribute it and/or modify it
5 # under the terms of the GNU Affero General Public License as published
6 # by the Free Software Foundation, either version 3 of the License,
7 # or (at your option) any later version.
8 #
9 # GNUnet is distributed in the hope that it will be useful, but
10 # WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Affero General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 #
17 # SPDX-License-Identifier: AGPL3.0-or-later
18 #
19 # Process this file with autoconf to produce a configure script.
20 #
21 #
22 AC_PREREQ(2.61)
23 # Checks for programs.
24 AC_INIT([gnunet], [0.11.4], [bug-gnunet@gnu.org])
25 AC_CONFIG_AUX_DIR([build-aux])
26
27 # check for legacy option that is no longer supported (#5627) and fail hard
28 AC_ARG_WITH(nssdir,
29    [  --with-nssdir=DIR    legacy switch, no longer supported, do not use],
30    [AC_MSG_RESULT([$with_nssdir])
31     AS_CASE([$with_nssdir],
32       [no],[],
33       [AC_MSG_ERROR([--with-nssdir is no longer supported])])
34    ])
35
36 AC_CANONICAL_TARGET
37 AC_CANONICAL_HOST
38 AC_CANONICAL_SYSTEM
39 AM_INIT_AUTOMAKE
40 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
41 AC_CONFIG_HEADERS([gnunet_config.h])
42 AH_TOP([#define _GNU_SOURCE  1])
43 AC_CONFIG_MACRO_DIR([m4])
44 AC_PROG_AWK
45 AC_PROG_CC_C99
46 AC_PROG_CPP
47 AC_PROG_CXX
48 AC_PROG_OBJC
49 AC_PROG_INSTALL
50 AC_PROG_LN_S
51 AC_PROG_MAKE_SET
52 AM_PROG_CC_C_O
53 LT_INIT([disable-static dlopen win32-dll])
54 AC_SUBST(MKDIR_P)
55
56 # large file support
57 AC_SYS_LARGEFILE
58 AC_FUNC_FSEEKO
59
60
61 CFLAGS="-Wall $CFLAGS"
62 # use '-fno-strict-aliasing', but only if the compiler can take it
63 AS_IF([gcc -fno-strict-aliasing -S -o /dev/null -xc /dev/null >/dev/null 2>&1],
64  [CFLAGS="-fno-strict-aliasing $CFLAGS"])
65
66 # Use Linux interface name unless the OS has a different preference
67 DEFAULT_INTERFACE="\"eth0\""
68
69 funcstocheck="getnameinfo gethostname gethostbyname gethostbyaddr getaddrinfo getaddrinfo_a"
70
71 # Srcdir in a form that native compiler understands (i.e. DOS path on W32)
72 native_srcdir=$srcdir
73
74 OLD_LDFLAGS="$LDFLAGS"
75 LDFLAGS="$LDFLAGS -Wl,--unresolved-symbols=report-all"
76
77 # Check system type
78 AS_CASE(["$host_os"],
79   [*darwin* | *rhapsody* | *macosx*],[
80      AC_DEFINE_UNQUOTED(DARWIN,1,[This is an Apple Darwin system])
81      CPPFLAGS="-D_APPLE_C_SOURCE $CPPFLAGS"
82      CFLAGS="-fno-common $CFLAGS"
83      LDFLAGS="$OLD_LDFLAGS"
84      AC_MSG_WARN([WARNING: The VPN application cannot be compiled on your OS])
85      AC_CHECK_LIB(intl, gettext)
86      build_target="darwin"
87      DEFAULT_INTERFACE="\"en0\""
88      LIBPREFIX=
89      DLLDIR=lib
90      UNIXONLY="#"
91   ],
92   [linux*],[
93      AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux kernel])
94      build_target="linux"
95      LIBPREFIX=
96      DLLDIR=lib
97      UNIXONLY="#"
98      AC_PATH_XTRA
99   ],
100   [*freebsd*],[
101      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
102      AC_DEFINE_UNQUOTED(FREEBSD,1,[This is a FreeBSD system])
103      CFLAGS="-D_THREAD_SAFE $CFLAGS"
104      build_target="freebsd"
105      LIBPREFIX=
106      DLLDIR=lib
107      UNIXONLY="#"
108   ],
109   [*openbsd*],[
110      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
111      AC_DEFINE_UNQUOTED(OPENBSD,1,[This is an OpenBSD system])
112      LIBS=`echo $LIBS | sed -e "s/-ldl//"`
113      build_target="openbsd"
114      LIBPREFIX=
115      DLLDIR=lib
116      UNIXONLY="#"
117   ],
118   [*netbsd*],[
119      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
120      AC_DEFINE_UNQUOTED(NETBSD,1,[This is a NetBSD system])
121      LIBPREFIX=
122      DLLDIR=lib
123      UNIXONLY="#"
124   ],
125   [*solaris*],[
126      AC_DEFINE_UNQUOTED(SOLARIS,1,[This is a Solaris system])
127      AC_DEFINE_UNQUOTED(_REENTRANT,1,[Need with solaris or errno doesnt work])
128      AC_CHECK_LIB(resolv, res_init)
129      AC_CHECK_LIB(rt, nanosleep)
130      build_target="solaris"
131      LIBPREFIX=
132      DLLDIR=lib
133      UNIXONLY="#"
134   ],
135   [*arm-linux*],[
136      AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux kernel])
137      CFLAGS="-D_REENTRANT -fPIC -pipe $CFLAGS"
138      build_target="linux"
139      LIBPREFIX=
140      DLLDIR=lib
141      UNIXONLY="#"
142   ],
143   [*cygwin*],[
144      AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system])
145      AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
146      AC_CHECK_LIB(intl, gettext)
147      CFLAGS="-mms-bitfields $CFLAGS"
148      build_target="cygwin"
149      LIBPREFIX=lib
150      DLLDIR=bin
151      AC_PROG_CXX
152      UNIXONLY=""
153   ],
154   [*mingw*],[
155      AC_DEFINE_UNQUOTED(MINGW,1,[This is a MinGW system])
156      AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
157      AC_DEFINE_UNQUOTED(_WIN32,1,[This is a Windows system])
158      AC_CHECK_LIB(intl, gettext)
159      LDFLAGS="$LDFLAGS -Wl,--export-all-symbols"
160      LIBS="$LIBS -lws2_32 -lplibc -lgnurx -lole32"
161      CFLAGS="-mms-bitfields $CFLAGS"
162      CPPFLAGS="-D_WIN32_WINNT=0x0501 -DHAVE_STAT64=1 -D__USE_MINGW_ANSI_STDIO=1 $CPPFLAGS"
163      build_target="mingw"
164      AC_PROG_CXX
165      LIBPREFIX=lib
166      DLLDIR=bin
167      UNIXONLY=""
168      funcstocheck=""
169      native_srcdir=$(cd $srcdir; pwd -W)
170   ],
171   [gnu*],[
172      AC_DEFINE_UNQUOTED(GNU,1,[This is a GNU system])
173      build_target="gnu"
174      UNIXONLY="#"
175   ],
176   [
177      AC_MSG_RESULT(Unrecognised OS $host_os)
178      AC_DEFINE_UNQUOTED(OTHEROS,1,[Some strange OS])
179      UNIXONLY=""
180 ])
181 AC_DEFINE_UNQUOTED([GNUNET_DEFAULT_INTERFACE], $DEFAULT_INTERFACE, [This should be the default choice for the name of the first network interface])
182 AC_SUBST(DEFAULT_INTERFACE)
183
184 # Disable TCP-based IPC on systems that support UNIX domain
185 # sockets in default configuratin:
186 AC_SUBST(UNIXONLY)
187
188
189 AC_MSG_CHECKING([for build target])
190 AM_CONDITIONAL(DARWIN,  test "$build_target" = "darwin")
191 AM_CONDITIONAL(CYGWIN,  test "$build_target" = "cygwin")
192 AM_CONDITIONAL(MINGW,   test "$build_target" = "mingw")
193 AM_CONDITIONAL(SOLARIS, test "$build_target" = "solaris")
194 AM_CONDITIONAL(XFREEBSD, test "$build_target" = "freebsd")
195 AM_CONDITIONAL(OPENBSD, test "$build_target" = "openbsd")
196 AM_CONDITIONAL(LINUX, test "$build_target" = "linux")
197 AM_CONDITIONAL(GNU, test "$build_target" = "gnu")
198
199 AC_MSG_RESULT([$build_target])
200 AC_SUBST(build_target)
201 AM_CONDITIONAL([am__fastdepOBJC], false)
202 AC_UNALIGNED_64_ACCESS
203
204 # some other checks for standard libs
205 AC_SEARCH_LIBS([gethostbyname], [nsl ws2_32])
206 AC_SEARCH_LIBS([memrchr], [],
207                AC_DEFINE(HAVE_MEMRCHR,1,[memrchr supported]), [])
208 AC_SEARCH_LIBS([memset_s], [],
209                AC_DEFINE(HAVE_MEMSET_S,1,[memset_s supported]), [])
210 AC_SEARCH_LIBS([memset_s], [],
211                AC_DEFINE(HAVE_EXPLICIT_BZERO,1,[explicit_bzero supported]), [])
212 AC_CHECK_LIB(socket, socket)
213 AC_CHECK_LIB(m, log)
214 AC_CHECK_LIB(c, getloadavg, AC_DEFINE(HAVE_GETLOADAVG,1,[getloadavg supported]))
215
216 AC_CHECK_PROG(VAR_GETOPT_BINARY, getopt, true, false)
217 AM_CONDITIONAL(HAVE_GETOPT_BINARY, $VAR_GETOPT_BINARY)
218
219 AC_CHECK_PROG(VAR_SSH_BINARY, ssh, true, false)
220 AM_CONDITIONAL(HAVE_SSH_BINARY, $VAR_SSH_BINARY)
221 AM_CONDITIONAL(HAVE_SSH_KEY,  ssh -D 12345 -o "BatchMode yes" -o "UserKnownHostsFile /tmp/gnunet_test_cosks_ssh_garbage" -o "StrictHostKeyChecking no" 127.0.0.1 echo -n)
222 rm -f /tmp/gnunet_test_cosks_ssh_garbage
223
224 # autotools' m4 for python has no maximum version!
225 # python3.4 - python3.7 for tests
226 m4_define_default([_AM_PYTHON_INTERPRETER_LIST],[python3 python3.4 python3.5 python3.6 python3.7 python])
227 AM_PATH_PYTHON([3.4],, [:])
228 AC_SUBST([PYTHON])
229 AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
230
231 # perl
232 AC_PATH_PROG( PERL, perl, ,
233               $PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
234 AC_SUBST([PERL])
235
236 # iptables is a soft requirement to run tests
237 AC_PATH_TARGET_TOOL(VAR_IPTABLES_BINARY, iptables, false)
238
239 AS_IF([test x"$VAR_IPTABLES_BINARY" = x"false"],
240  [AS_IF([test -x "/sbin/iptables"],
241    [VAR_IPTABLES_BINARY="/sbin/iptables"],
242    [AS_IF([test -x "/usr/sbin/iptables"],
243       [VAR_IPTABLES_BINARY="/usr/sbin/iptables"])])])
244
245 AS_IF([test x"$VAR_IPTABLES_BINARY" != x"false"],
246  [AC_DEFINE_UNQUOTED([IPTABLES], "$VAR_IPTABLES_BINARY", [Path to iptables])],
247  [AC_MSG_WARN([warning: 'iptables' not found.])])
248
249 # ip6tables is a soft requirement for some features
250 AC_PATH_TARGET_TOOL(VAR_IP6TABLES_BINARY, ip6tables, false)
251
252 AS_IF([test x"$VAR_IP6TABLES_BINARY" = x"false"],
253   [AS_IF([test -x "/sbin/ip6tables"],
254      [VAR_IP6TABLES_BINARY="/sbin/ip6tables"],
255      [AS_IF([test -x "/usr/sbin/ip6tables"],
256         [VAR_IP6TABLES_BINARY="/usr/sbin/ip6tables"])])])
257         
258
259 AS_IF([test x"$VAR_IP6TABLES_BINARY" != x"false"],
260   [AC_DEFINE_UNQUOTED([IP6TABLES], "$VAR_IP6TABLES_BINARY", [Path to ip6tables])],
261   [AC_MSG_WARN([warning: 'ip6tables' not found.])])
262
263 # ip is a soft requirement for some features
264 AC_PATH_TARGET_TOOL(VAR_IP_BINARY, ip, false)
265
266 AS_IF([test x"$VAR_IP_BINARY" = x"false"],
267  [AS_IF([test -x "/sbin/ip"],
268    [VAR_IP_BINARY="/sbin/ip"],
269    [AS_IF([test -x "/usr/sbin/ip"],
270           [VAR_IP_BINARY="/usr/sbin/ip"])])])
271
272 AS_IF([test x"$VAR_IP_BINARY" != x"false"],
273  [AC_DEFINE_UNQUOTED([PATH_TO_IP], "$VAR_IP_BINARY", [Path to ip])],
274  [AC_MSG_WARN([warning: 'ip' not found.])])
275
276 # locate 'ifconfig'
277 AC_PATH_TARGET_TOOL(VAR_IFCONFIG_BINARY, ifconfig, false)
278
279 AC_CHECK_PROG(VAR_IFCONFIG_BINARY, ifconfig, true, false)
280 AS_IF([test x"$VAR_IFCONFIG_BINARY" = x"false"],
281   [AS_IF([test -x "/sbin/ifconfig"],
282      [VAR_IFCONFIG_BINARY="/sbin/ifconfig"],
283      [AS_IF([test -x "/usr/sbin/ifconfig"],
284             [VAR_IFCONFIG_BINARY="/usr/sbin/ifconfig"])])])
285
286 AS_IF([test x"$VAR_IFCONFIG_BINARY" != x"false"],
287   [AC_DEFINE_UNQUOTED([IFCONFIG], "$VAR_IFCONFIG_BINARY", [Path to ifconfig])],
288   [AC_MSG_WARN(['ifconfig' not found.])])
289
290
291 AC_PATH_TARGET_TOOL(VAR_SYSCTL_BINARY, sysctl, false)
292
293 AC_CHECK_PROG(VAR_SYSCTL_BINARY, sysctl, true, false)
294 AS_IF([test x"$VAR_SYSCTL_BINARY" = x"false"],
295       [AS_IF([test -x "/sbin/sysctl"],
296              [VAR_SYSCTL_BINARY="/sbin/sysctl"],
297              [AS_IF([test -x "/usr/sbin/sysctl"],
298                     [VAR_SYSCTL_BINARY="/usr/sbin/sysctl"])])])
299 AS_IF([test x"$VAR_SYSCTL_BINARY" != x"false"],
300       [AC_DEFINE_UNQUOTED([SYSCTL], "$VAR_SYSCTL_BINARY", [Path to sysctl])],
301       [AC_MSG_WARN(['sysctl' not found.])])
302
303 # miniupnpc / upnpc binary is a soft runtime requirement
304 AC_PATH_TARGET_TOOL(VAR_UPNPC_BINARY, upnpc, false)
305
306 AS_IF([test x"$VAR_UPNPC_BINARY" != x"false"],
307   [AC_DEFINE_UNQUOTED([UPNPC], "$VAR_UPNPC_BINARY", [Path to upnpc binary])],
308   [AC_MSG_WARN([warning: 'upnpc' binary not found.])])
309
310 AC_CHECK_MEMBER(struct tm.tm_gmtoff,
311   [AC_DEFINE(HAVE_TM_GMTOFF, 1,
312      [Define if struct tm has the tm_gmtoff member.])],
313      ,
314      [#include <time.h>])
315
316 AC_CHECK_DECLS([_stati64])
317
318 # 'save' libs; only those libs found so far will be
319 # linked against _everywhere_.  For the others, we
320 # will be more selective!
321 SAVE_LIBS=$LIBS
322
323 have_addrinfo_a=0
324 AC_CHECK_LIB(anl,
325              getaddrinfo_a,
326              [have_addrinfo_a=1 AC_DEFINE(HAVE_GETADDRINFO_A,
327                                           1,
328                                           [getaddrinfo_a supported])])
329 AM_CONDITIONAL(HAVE_GETADDRINFO_A,
330                [test "$have_addrinfo_a" = 1])
331
332 # tests only run on Windows
333 AS_IF([test "x$build_target" = "xmingw"],
334       [AC_CHECK_LIB(plibc,
335                     plibc_init,
336                     [],
337                     [AC_MSG_ERROR([GNUnet requires PlibC on Windows])])
338        AC_CHECK_LIB(gnurx,
339                     regexec,
340                     [],
341                     [AC_MSG_ERROR([GNUnet requires libgnurx on Windows])])])
342
343 # libgcrypt
344 gcrypt=0
345 NEED_LIBGCRYPT_API=1
346 NEED_LIBGCRYPT_VERSION=1.6.0
347
348
349 AM_PATH_LIBGCRYPT("$NEED_LIBGCRYPT_API:$NEED_LIBGCRYPT_VERSION", gcrypt=1)
350 AC_CHECK_DECLS([gcry_mpi_set_opaque_copy], [], [], [[#include <gcrypt.h>]])
351
352 AS_IF([test $gcrypt = 0],
353  [
354   AC_MSG_ERROR([[
355 ***
356 *** You need libgcrypt to build this program.
357 **  This library is for example available at
358 ***   ftp://ftp.gnupg.org/gcrypt/libgcrypt/
359 *** (at least version $NEED_LIBGCRYPT_VERSION (API $NEED_LIBGCRYPT_API)
360 ***  is required.)
361 ***]])
362 ])
363 AC_DEFINE_UNQUOTED([NEED_LIBGCRYPT_VERSION], "$NEED_LIBGCRYPT_VERSION", [required libgcrypt version])
364
365 AC_CHECK_DECLS([struct in6_ifreq], [], [], [[#include <linux/if_tun.h>]])
366
367
368
369 # should the build process be building the documentation?
370 AC_MSG_CHECKING(whether to build documentation)
371 AC_ARG_ENABLE([documentation],
372               [AS_HELP_STRING([--disable-documentation],
373                               [do not build the documentation])],
374               [documentation=${enableval}],
375               [documentation=yes])
376 AC_MSG_RESULT($documentation)
377 AS_IF([test "x$documentation" = "xyes"],
378       [AM_CONDITIONAL([DOCUMENTATION],
379                       true)
380        AC_DEFINE([DOCUMENTATION],
381                  [1],
382                  [Building the documentation])],
383       [AM_CONDITIONAL([DOCUMENTATION],
384                       false)
385        AC_DEFINE([DOCUMENTATION],
386                  [0],
387                  [Not building the documentation])])
388
389 # COMMENT: Check wether to transpile texinfo to mdoc.
390 # COMMENT: This is TRUE when --enable-texi2mdoc-generation
391 # COMMENT: but ERRORS when texi2mdoc binary is missing in your $PATH
392 # COMMENT: and makes the configure fail if it is missing.
393 # COMMENT: Consequential the DEFINE and CONDITIONAL are set to true.
394 # COMMENT: This is FALSE when --disable-texi2mdoc-generation was set
395 # COMMENT: or nothing was set (this is the default).
396 # COMMENT: There are 2 nested AS_IFs because we need to catch the
397 # COMMENT: potential non-existence of the texi2mdoc binary.
398 # COMMENT: Default return value / setting: no
399 AC_MSG_CHECKING(wether to include generated texi2mdoc output in installation)
400 AC_ARG_ENABLE([texi2mdoc-generation],
401               [AS_HELP_STRING([--enable-texi2mdoc-generation],
402                               [include generated texi2mdoc output in installation])],
403               [texi2mdoc_generation=${enableval}],
404               [texi2mdoc_generation=no])
405 AC_MSG_RESULT($texi2mdoc_generation)
406 AS_IF([test "x$texi2mdoc_generation" = "xyes"],
407       [AS_IF([test "$texi2mdoc" = 0],
408              [AC_MSG_WARN([ERROR: transpiled mdoc output requires texi2mdoc.])
409               AC_MSG_WARN([ERROR: texi2mdoc can be obtained via your Operating System])
410               AC_MSG_WARN([ERROR: package manager or from https://mandoc.bsd.lv/texi2mdoc/])],
411              [AM_CONDITIONAL([TEXI2MDOC_GENERATION],true)
412               AC_DEFINE([TEXI2MDOC_GENERATION],
413                         [1],
414                         [Building section 7 mdoc output])])],
415       [AM_CONDITIONAL([TEXI2MDOC_GENERATION],
416                       false)
417        AC_DEFINE([TEXI2MDOC_GENERATION],
418                  [0],
419                  [Not building section 7 mdoc output])])
420
421 # should the build process be building only the documentation?
422 AC_MSG_CHECKING(whether to build only documentation)
423 AC_ARG_ENABLE([documentation-only],
424    [AS_HELP_STRING([--enable-documentation-only], [build only the documentation])],
425    [documentation_only=${enableval}],
426    [documentation_only=no])
427 AC_MSG_RESULT($documentation_only)
428 AS_IF([test "x$documentation_only" = "xyes"],
429  [
430   AM_CONDITIONAL([DOCUMENTATION_ONLY],true)
431   AC_DEFINE([DOCUMENTATION_ONLY],[1],[Building only the documentation])
432  ],[
433   AM_CONDITIONAL([DOCUMENTATION_ONLY],false)
434   # TODO: Double negation might be a bit hard to parse for some
435   # TODO: people reading the output.
436   AC_DEFINE([DOCUMENTATION_ONLY],[0],[Not building only the documentation])
437  ])
438
439 # should the build process be including the manpages? (default: yes)
440 AC_MSG_CHECKING(whether to include man pages)
441 AC_ARG_ENABLE([include-manpages],
442    [AS_HELP_STRING([--disable-include-manpages], [Do not include the man pages in build and installation])],
443    [include_manpages=${enableval}],
444    [include_manpages=yes])
445 AC_MSG_RESULT($include_manpages)
446 AS_IF([test "x$include_manpages" = "xyes"],
447  [
448   AM_CONDITIONAL([INCLUDE_MANPAGES],true)
449   AC_DEFINE([INCLUDE_MANPAGES],[1],[Including the man pages in the build and installation])
450  ],[
451   AM_CONDITIONAL([INCLUDE_MANPAGES],false)
452   AC_DEFINE([INCLUDE_MANPAGES],[0],[Not including the man pages in the build and installation])
453  ])
454
455 # Adam shostack suggests the following for Windows:
456 # -D_FORTIFY_SOURCE=2 -fstack-protector-all
457 AC_ARG_ENABLE(gcc-hardening,
458    AS_HELP_STRING(--enable-gcc-hardening, enable compiler security checks),
459 [AS_IF([test x$enableval = xyes],[
460     CFLAGS="$CFLAGS -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-all"
461     CFLAGS="$CFLAGS -fwrapv -fPIE -Wstack-protector"
462     CFLAGS="$CFLAGS --param ssp-buffer-size=1"
463     LDFLAGS="$LDFLAGS -pie"
464  ])])
465
466 # Linker hardening options
467 # Currently these options are ELF specific - you can't use this with MacOSX
468 AC_ARG_ENABLE(linker-hardening,
469   AS_HELP_STRING(--enable-linker-hardening, enable linker security fixups),
470 [AS_IF([test x$enableval = xyes],
471    [LDFLAGS="$LDFLAGS -z relro -z now"])])
472
473
474 AC_ARG_ENABLE(sanitizer,
475   AS_HELP_STRING(--enable-sanitizer, enable Address Sanitizer and Undefined Behavior Sanitizer),
476 [AS_IF([test x$enableval = xyes],[
477    LDFLAGS="$CFLAGS -fsanitize=address,undefined -fno-omit-frame-pointer"
478  ])])
479
480
481 extra_logging=GNUNET_NO
482 AC_ARG_ENABLE([logging],
483    AS_HELP_STRING([--enable-logging@<:@=value@:>@],[Enable logging calls. Possible values: yes,no,verbose,veryverbose ('yes' is the default)]),
484    [AS_IF([test "x$enableval" = "xyes"], [],
485           [test "x$enableval" = "xno"], [AC_DEFINE([GNUNET_CULL_LOGGING],[],[Define to cull all logging calls])],
486           [test "x$enableval" = "xverbose"], [extra_logging=GNUNET_YES]
487           [test "x$enableval" = "xveryverbose"], [extra_logging=\(GNUNET_YES+1\)])
488    ], [])
489 AC_DEFINE_UNQUOTED([GNUNET_EXTRA_LOGGING],[$extra_logging],[1 if extra logging is enabled, 2 for very verbose extra logging, 0 otherwise])
490
491 # should memory poisoning be enabled?
492 AC_MSG_CHECKING(whether to poison freed memory)
493 AC_ARG_ENABLE([poisoning],
494    [AS_HELP_STRING([--enable-poisoning], [enable poisoning of freed memory (good for debugging)])],
495    [enable_poisoning=${enableval}],
496    [
497      AS_IF([test "x$extra_logging" != "xGNUNET_NO"],
498        [enable_poisoning="defaults to yes (extra logging is enabled)"],
499        [enable_poisoning=no])
500    ])
501 AC_MSG_RESULT($enable_poisoning)
502 AS_IF([test ! "x$enable_poisoning" = "xno"],
503   [enable_poisoning=1],
504   [enable_poisoning=0])
505 AC_DEFINE_UNQUOTED([ENABLE_POISONING],[$enable_poisoning],[1 if freed memory should be poisoned, 0 otherwise])
506
507 AS_IF([test $build = $target],
508 [
509 AC_MSG_CHECKING([for working HMAC])
510 AC_LANG_PUSH(C)
511 LIBS="$LIBS $LIBGCRYPT_LIBS"
512 CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
513 AC_RUN_IFELSE(
514   [AC_LANG_PROGRAM([#include <gcrypt.h>
515         #include <stdio.h>], [[
516         gcry_md_hd_t mac;
517
518         unsigned char data[] = { 0xbf, 0x16, 0x6e, 0x46, 0x3a, 0x6c, 0xf3, 0x93, 0xa7, 0x72,
519             0x11, 0xa1, 0xdc, 0x0b, 0x07, 0xdb, 0x1a, 0x5e, 0xd9, 0xb9, 0x81, 0xbe,
520             0xea, 0xe4, 0x31, 0x5f, 0x24, 0xff, 0xfe, 0x50, 0x8a, 0xde };
521         unsigned char key[] = { 0xfc, 0x62, 0x76, 0x35 };
522         unsigned char result[] = {0xa2, 0xb, 0x1, 0xd9, 0xc0, 0x8b, 0x5a, 0x12, 0x80,
523             0xd5, 0x50, 0x12, 0x8e, 0xd0, 0x5b, 0xb6, 0x5c, 0x87, 0x24, 0xe2, 0xd0,
524             0xd2, 0xaf, 0x63, 0xae, 0xd1, 0xd6, 0x64, 0x14, 0xe3, 0x6e, 0x61, 0x5b,
525             0xd, 0xba, 0x17, 0x7d, 0xd3, 0x10, 0xb1, 0x37, 0x41, 0x91, 0x7d, 0xeb,
526             0x1, 0x4d, 0x71, 0xe8, 0x59, 0x71, 0x42, 0x8e, 0xd6, 0xf3, 0x29, 0x3b,
527             0x90, 0xf2, 0xd1, 0xaf, 0x65, 0x1e, 0xb3};
528
529         if (!gcry_check_version (GCRYPT_VERSION))
530         {
531           fprintf (stderr, "Version mismatch %s <-> %s \n", gcry_check_version (NULL), GCRYPT_VERSION);
532           return 1;
533         }
534
535         gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
536         gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
537
538         if (gcry_md_open(&mac, GCRY_MD_SHA512, GCRY_MD_FLAG_HMAC) != GPG_ERR_NO_ERROR)
539         {
540           fprintf (stderr, "gcry_md_open error\n");
541           return 2;
542         }
543
544         gcry_md_setkey (mac, key, sizeof (key));
545         gcry_md_write (mac, data, sizeof (data));
546
547         if (memcmp(gcry_md_read (mac, 0), result, gcry_md_get_algo_dlen (gcry_md_get_algo (mac))) != 0)
548         {
549           fprintf (stderr, "memcmp error\n");
550           return 3;
551         }
552
553         gcry_md_close (mac);
554
555         return 0;
556     ]])],
557   [AC_MSG_RESULT([yes])],
558   [
559    RESULT=$?
560    if test $RESULT = 3
561    then
562      AC_MSG_FAILURE([HMAC test vector does not match. This is a known problem with libgcrypt 1.2.2 on Windows and fixed in 1.4.6.])
563    fi
564    if test $RESULT = 2
565    then
566      AC_MSG_FAILURE([HMAC test failed])
567    fi
568    if test $RESULT = 1
569    then
570      AC_MSG_FAILURE([libgcrypt header version does not match library version])
571    fi
572   ],
573   [AC_MSG_RESULT([cross compiling, test skipped])])
574 AC_LANG_POP(C)
575 ])      # $build = $target
576
577 # check for bluetooth library
578 bluetooth=0
579 AC_CHECK_LIB(bluetooth, ba2str,[AC_CHECK_HEADER([bluetooth/bluetooth.h],bluetooth=1)])
580 AS_IF([test "$build_target" = "mingw"],
581  [bluetooth=1])
582 AM_CONDITIONAL(HAVE_LIBBLUETOOTH, [test "$bluetooth" = 1])
583 AS_IF([test "$bluetooth" = 1],
584  [AC_DEFINE([HAVE_LIBBLUETOOTH],[1],[Have bluetooth library])],
585  [AC_DEFINE([HAVE_LIBBLUETOOTH],[0],[Lacking bluetooth library])])
586
587 # check for zbar library
588 zbar=0
589 AC_MSG_CHECKING(for libzbar)
590 AC_ARG_WITH(zbar,
591    [  --with-zbar=PFX    base of libzbar installation],
592    [AC_MSG_RESULT([$with_zbar])
593     AS_CASE([$with_zbar],
594       [no],[],
595       [yes],[
596         AC_CHECK_HEADERS(zbar.h,
597           AC_CHECK_LIB([zbar], [zbar_processor_create],
598             zbar=1))
599        ],[
600         LDFLAGS="-L$with_zbar/lib $LDFLAGS"
601         CPPFLAGS="-I$with_zbar/include $CPPFLAGS"
602         AC_CHECK_HEADERS(zbar.h,
603           AC_CHECK_LIB([zbar], [zbar_processor_create],
604             EXT_LIB_PATH="-L$with_zbar/lib $EXT_LIB_PATH"
605             zbar=1))
606        ])
607    ],
608    [AC_MSG_RESULT([--with-zbar not specified])
609     AC_CHECK_HEADERS(zbar.h,
610      AC_CHECK_LIB([zbar], [zbar_processor_create],
611       zbar=1))])
612 AM_CONDITIONAL(HAVE_ZBAR, [test "$zbar" = 1])
613 AS_IF([test "x$zbar" = x1],
614       [AC_DEFINE([HAVE_ZBAR],[1],[Have zbar library])],
615       [AC_DEFINE([HAVE_ZBAR],[0],[Lacking zbar library])])
616
617 # check for jansson library
618 jansson=0
619 AC_MSG_CHECKING(for libjansson)
620 AC_ARG_WITH(jansson,
621    [  --with-jansson=PFX    base of libjansson installation],
622    [AC_MSG_RESULT([$with_jansson])
623     AS_CASE([$with_jansson],
624       [no],[],
625       [yes],[
626         AC_CHECK_HEADERS(jansson.h,
627           AC_CHECK_LIB([jansson], [json_loads],
628             jansson=1))
629       ],[
630         LDFLAGS="-L$with_jansson/lib $LDFLAGS"
631         CPPFLAGS="-I$with_jansson/include $CPPFLAGS"
632         AC_CHECK_HEADERS(jansson.h,
633           AC_CHECK_LIB([jansson], [json_loads],
634             EXT_LIB_PATH="-L$with_jansson/lib $EXT_LIB_PATH"
635             jansson=1))
636       ])
637    ],
638    [AC_MSG_RESULT([--with-jansson not specified])
639     AC_CHECK_HEADERS(jansson.h,
640      AC_CHECK_LIB([jansson], [json_loads],
641       jansson=1))])
642 AM_CONDITIONAL(HAVE_JANSSON, [test "$jansson" = 1])
643 AM_CONDITIONAL(HAVE_JSON, [test x$jansson = x1])
644 AS_IF([test "x$jansson" = x1],
645       [AC_DEFINE([HAVE_JANSSON],[1],[Have jansson library])],
646       [AC_DEFINE([HAVE_JANSSON],[0],[Lacking jansson library])])
647
648
649 # check for libpulse(audio) library
650 pulse=0
651 AC_CHECK_LIB(pulse,pa_stream_peek,
652   [AC_CHECK_HEADER([pulse/simple.h],pulse=1)])
653 AS_IF([test "$build_target" = "mingw"],
654       [pulse=0])
655 AS_IF([test "$pulse" = 1],
656       [AC_DEFINE([HAVE_PULSE],[1],[Have libpulse(audio) library])])
657
658 # check for libopus(audio) library
659 opus=0
660 AC_CHECK_LIB(opus,opus_decode_float,
661   [AC_CHECK_HEADER([opus/opus.h],
662     [AC_CHECK_DECL([OPUS_SET_GAIN],[opus=1],[],[[#include <opus/opus.h>]]
663     )]
664   )]
665 )
666 AS_IF([test "x$opus" = x1],
667       [AC_DEFINE([HAVE_OPUS],[1],[Have libopus library])])
668
669 # libogg
670 AC_CHECK_LIB(ogg, ogg_stream_flush_fill,
671         [AC_CHECK_HEADERS([ogg/ogg.h],
672           AM_CONDITIONAL(HAVE_OGG, true)
673           ogg=1
674           AC_DEFINE(HAVE_OGG,1,[Have ogg]),
675           AM_CONDITIONAL(HAVE_OGG, false)
676           ogg=0
677           AC_DEFINE(HAVE_OGG,0,[lacking ogg]))],
678         AM_CONDITIONAL(HAVE_OGG, false)
679         ogg=0)
680
681
682 PKG_CHECK_MODULES([GLIB],
683                   [glib-2.0],
684   [# check for pbc library
685   pbc=0
686    AC_CHECK_HEADER([pbc/pbc.h],pbc=1)
687    AC_CHECK_HEADER([gabe.h],abe=1)
688    AM_CONDITIONAL(HAVE_PBC, [test "x$pbc" = x1])
689    AM_CONDITIONAL(HAVE_ABE, [test "x$abe" = x1])
690    AS_IF([test "x$pbc" = x1],
691      [AC_DEFINE([HAVE_PBC],[1],[Have pbc library])],
692      [AC_DEFINE([HAVE_PBC],[0],[Lacking pbc library])])
693    AS_IF([test "x$abe" = x1],
694     [AC_DEFINE([HAVE_ABE],[1],[Have ABE library])],
695     [AC_DEFINE([HAVE_ABE],[0],[Lacking ABE library])])],
696   [# glib-2 not found
697    AM_CONDITIONAL(HAVE_PBC, [false])
698    AM_CONDITIONAL(HAVE_ABE, [false])
699    AC_DEFINE([HAVE_PBC],[0],[Lacking glib library])])
700
701 gst=0
702 PKG_CHECK_MODULES(
703   [GST],
704   [glib-2.0 gobject-2.0 gstreamer-1.0 gstreamer-app-1.0 gstreamer-audio-1.0],
705   [gst=1],
706   [gst=0])
707
708 # Pulse Audio
709 AS_IF([test "x$pulse" != "x1" -o "x$opus" != "x1" -o "x$ogg" != "x1"],[
710  AS_IF([test "x$gst" != "x1"],[
711   conversation_backend=none
712   AM_CONDITIONAL(BUILD_PULSE_HELPERS, false)
713   AM_CONDITIONAL(BUILD_GST_HELPERS, false)
714   AM_CONDITIONAL(BUILD_EXPERIMENTAL_HELPERS, false)
715  ],[
716    conversation_backend=gst
717    AM_CONDITIONAL(BUILD_PULSE_HELPERS, false)
718    AM_CONDITIONAL(BUILD_GST_HELPERS, true)
719    AM_CONDITIONAL(BUILD_EXPERIMENTAL_HELPERS, false)
720  ])
721 ],[
722  conversation_backend=pulse
723  AM_CONDITIONAL(BUILD_PULSE_HELPERS, true)
724  AM_CONDITIONAL(BUILD_GST_HELPERS, false)
725  AM_CONDITIONAL(BUILD_EXPERIMENTAL_HELPERS, false)
726 ])
727
728 # libgnurl
729 LIBGNURL_CHECK_CONFIG(,7.34.0,gnurl=1,gnurl=0)
730
731 SAVE_CPPFLAGS=$CPPFLAGS
732 CPPFLAGS="$LIBGNURL_CPPFLAGS $LIBCURL_CPPFLAGS $CPPFLAGS"
733 LIBS="$LIBGNURL $LIBCURL $LIBS"
734
735 # libcurl-gnutls
736 LIBCURL_CHECK_CONFIG(,7.34.0,[curl=true],[curl=false])
737 AS_IF([test "x$curl" = xtrue],[
738  AC_CHECK_HEADER([curl/curl.h],
739   AC_CHECK_DECLS(CURLINFO_TLS_SESSION,[curl=true],[curl=false],[[#include <curl/curl.h>]]),
740   [curl=false])
741  # need libcurl-gnutls.so, everything else is not acceptable
742  AC_CHECK_LIB([curl-gnutls],[curl_easy_getinfo],,[curl=false])
743  # cURL must support CURLINFO_TLS_SESSION, version >= 7.34
744 ])
745
746 # libcurl and libgnurl should be mutually exclusive
747 AS_IF([test "$gnurl" = 1],
748       [AM_CONDITIONAL(HAVE_LIBGNURL, true)
749        AC_DEFINE([HAVE_LIBGNURL],[1],[Have libgnurl])
750        AM_CONDITIONAL(HAVE_LIBCURL, false)
751        AC_DEFINE([HAVE_LIBCURL],[0],[Lacking libcurl])],
752       [AS_IF([test "$curl" = true],
753              [AM_CONDITIONAL(HAVE_LIBGNURL, false)
754               AC_DEFINE([HAVE_LIBGNURL],[0],[Lacking libgnurl])
755               AM_CONDITIONAL(HAVE_LIBCURL, true)
756               AC_DEFINE([HAVE_LIBCURL],[1],[Have libcurl])],
757              [AC_MSG_WARN([ERROR: GNUnet requires libcurl-gnutls or gnurl >= 7.34])
758               AM_CONDITIONAL(HAVE_LIBGNURL, false)
759               AC_DEFINE([HAVE_LIBGNURL],[0],[Lacking libgnurl])
760               AM_CONDITIONAL(HAVE_LIBCURL, false)
761               AC_DEFINE([HAVE_LIBCURL],[0],[Lacking libcurl])])])
762
763 AC_SEARCH_LIBS(__atomic_load_8, atomic, [have_libatomic=1 AC_DEFINE(HAVE_LIBATOMIC,1,[external libatomic])])
764 AM_CONDITIONAL(HAVE_LIBATOMIC, [test "$have_libatomic" = 1])
765
766 # restore LIBS & CPPFLAGS
767 LIBS=$SAVE_LIBS
768 CPPFLAGS=$SAVE_CPPFLAGS
769
770 AC_CHECK_HEADERS([glpk.h],[glpk=true],[glpk=false])
771 # GLPK must support glpk_init_env, version >= 4.43
772 AC_CHECK_LIB([glpk],[glp_init_env],,[glpk=false])
773 # GLPK must support atm MLP presolving, version >= 4.32
774 AC_CHECK_MEMBERS(glp_iocp.presolve,,[glpk=false],[[#include <glpk.h>]])
775 AS_IF([test "x$glpk" = xfalse],
776 [
777         AM_CONDITIONAL(HAVE_LIBGLPK, false)
778         AC_MSG_WARN([ERROR: GNUnet requires GLPK  >= 4.32])
779 ],[
780         AM_CONDITIONAL(HAVE_LIBGLPK, true)
781         AC_DEFINE([HAVE_LIBGLPK],[1],[Have GLPK])
782 ])
783
784
785 AC_CHECK_HEADERS([nss.h],[nss=true],[nss=false])
786 AS_IF([test x$nss = xfalse],
787   [
788         AM_CONDITIONAL(HAVE_GLIBCNSS, false)
789         AC_MSG_WARN([No GNU libc nss header, will not build NSS plugin])
790   ],[
791         NSS_INCLUDES="
792         #include <nss.h>
793         "
794         AC_CHECK_DECL([NSS_STATUS_UNAVAIL],
795                 [AM_CONDITIONAL(HAVE_GLIBCNSS, true)],
796                 [AM_CONDITIONAL(HAVE_GLIBCNSS, false)
797                  AC_MSG_WARN([No nss header fails to define NSS_STATUS_UNAVAIl, will not build NSS plugin])],
798                 [$NSS_INCLUDES])
799 ])
800
801
802
803 # test for kvm and kstat (for CPU stats under BSD/Solaris)
804 AC_CHECK_LIB([kvm],[kvm_open])
805 AC_CHECK_LIB([kstat],[kstat_open])
806
807
808 # should the build process be restricted to the code required
809 # for GNU Taler wallets?
810 AC_MSG_CHECKING(whether to compile GNU Taler Wallet library ONLY)
811 AC_ARG_ENABLE([taler-wallet],
812    [AS_HELP_STRING([--enable-taler-wallet], [only compile for Taler wallet])],
813    [taler_only=${enableval}],
814    [taler_only=no])
815 AC_MSG_RESULT($taler_only)
816 AS_IF([test "x$taler_only" = "xyes"],
817 [
818   AM_CONDITIONAL([TALER_ONLY],true)
819   AC_DEFINE([TALER_WALLET_ONLY],[1],[Compiling for Taler wallet])
820 ],[
821   AM_CONDITIONAL([TALER_ONLY],false)
822   AC_DEFINE([TALER_WALLET_ONLY],[0],[Canonical compilation])
823 ])
824
825 # test for libextractor
826 extractor=0
827 AC_MSG_CHECKING(for libextractor)
828 AC_ARG_WITH(extractor,
829    [  --with-extractor=PFX    base of libextractor installation],
830    [AC_MSG_RESULT([$with_extractor])
831     AS_CASE([$with_extractor],
832       [no],[],
833       [yes],[
834         AC_CHECK_HEADERS([extractor.h],
835           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
836             extractor=1))
837       ],[
838         LDFLAGS="-L$with_extractor/lib $LDFLAGS"
839         CPPFLAGS="-I$with_extractor/include $CPPFLAGS"
840         AC_CHECK_HEADERS([extractor.h],
841           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
842             EXT_LIB_PATH="-L$with_extractor/lib $EXT_LIB_PATH"
843             extractor=1))
844       ])
845    ],
846    [AC_MSG_RESULT([--with-extractor not specified])
847     AC_CHECK_HEADERS([extractor.h],
848      AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
849       extractor=1))])
850 # restore LIBS
851 LIBS=$SAVE_LIBS
852
853 AS_IF([test "$extractor" != 1],
854  [
855  AM_CONDITIONAL(HAVE_LIBEXTRACTOR, false)
856  AC_DEFINE([HAVE_LIBEXTRACTOR],[0],[Lacking libextractor])
857  ],[
858  AM_CONDITIONAL(HAVE_LIBEXTRACTOR, true)
859  AC_DEFINE([HAVE_LIBEXTRACTOR],[1],[Have libextractor])
860  ])
861
862
863 AS_IF([test "$taler_only" != yes],[
864
865
866 # Check for libltdl header (#2999)
867 ltdl=0
868 AC_MSG_CHECKING(for libltdl)
869 AC_ARG_WITH(ltdl,
870    [  --with-ltdl=PFX    base of libltdl installation],
871    [AC_MSG_RESULT([$with_ltdl])
872     AS_CASE([$with_ltdl],
873       [no],[],
874       [yes],[
875         AC_CHECK_HEADERS(ltdl.h,
876           AC_CHECK_LIB([ltdl], [lt_dlopenext],
877             ltdl=1))
878       ],[
879         LDFLAGS="-L$with_ltdl/lib $LDFLAGS"
880         CPPFLAGS="-I$with_ltdl/include $CPPFLAGS"
881         AC_CHECK_HEADERS(ltdl.h,
882           AC_CHECK_LIB([ltdl], [lt_dlopenext],
883             EXT_LIB_PATH="-L$with_ltdl/lib $EXT_LIB_PATH"
884             ltdl=1))
885       ])
886    ],
887    [AC_MSG_RESULT([--with-ltdl not specified])
888     AC_CHECK_HEADERS(ltdl.h,
889      AC_CHECK_LIB([ltdl], [lt_dlopenext],
890       ltdl=1))])
891 AS_IF([test x$ltdl = x1],
892 [
893  AC_MSG_RESULT([libltdl found])
894 ],[
895  AC_MSG_ERROR([GNUnet requires libltdl (from GNU libtool), try installing libltdl-dev])
896 ])
897 # restore LIBS
898 LIBS=$SAVE_LIBS
899
900 # libidn and libidn2. The ideal goal is this:
901 # check for libidn2, if it doesn't exist check for libidn
902 # if both exist, prefer libidn2
903 # if none exist, fail and message that libidn or libidn2
904 # is required with a preference for libidn2.
905 # TODO: What we have right here can probably be improved.
906 my_with_libidn=1
907 AC_ARG_WITH(libidn,
908             AS_HELP_STRING([--with-libidn=pathname],
909                            [Support IDN (needs libidn)]),
910             [],
911             [withval="yes"])
912 AS_IF([test x_$withval = x_yes],
913       [AC_CHECK_HEADERS([idna.h],
914           AC_MSG_NOTICE([Found idna.h]),
915           AC_CHECK_HEADERS([idn/idna.h],
916                AC_MSG_NOTICE([Found idn/idna.h]),
917                my_with_libidn=0))],
918       [AS_IF([test x_$withval != x_no],
919              [CFLAGS="$CFLAGS -I$withval/include"
920               LDFLAGS="$LDFLAGS -L$withval/lib"
921               AC_CHECK_HEADERS([idna.h],
922                 AC_MSG_NOTICE([Found idna.h]),
923                 [AC_MSG_NOTICE([Failed to find idna.h])
924                  my_with_libidn=0])],
925              [my_with_libidn=0])])
926
927 my_with_libidn2=1
928 AC_ARG_WITH(libidn2,
929             AS_HELP_STRING([--with-libidn2=pathname],
930                            [Support IDN (needs libidn2)]),
931             [],
932             [withval="yes"])
933 AS_IF([test x_$withval = x_yes],
934       [AC_CHECK_HEADERS([idn2.h],
935        AC_MSG_NOTICE([Found idn2.h]),
936        AC_CHECK_HEADERS([idn2/idn2.h],
937           AC_MSG_NOTICE([Found idn2/idn2.h]),
938           [AC_MSG_NOTICE([Failed to find idn2.h])
939            my_with_libidn2=0]))],
940       [AS_IF([test x_$withval != x_no],
941              [CFLAGS="$CFLAGS -I$withval/include"
942               LDFLAGS="$LDFLAGS -L$withval/lib"],
943              [my_with_libidn2=0])])
944
945 AC_MSG_CHECKING([if libidn can be used])
946 # Check for LIBIDNs
947 there_can_only_be_one=1
948
949 working_libidn1=0
950 working_libidn2=0
951 AS_IF([test x$my_with_libidn2 = x1],
952       [AC_MSG_NOTICE([Checking for libidn2])
953        AC_CHECK_LIB([idn2],
954                     [idn2_to_unicode_8z8z],
955                     [working_libidn2=1
956                     LIBS="-lidn2 $LIBS"
957                     AC_DEFINE_UNQUOTED([HAVE_LIBIDN2],
958                                        [1],
959                                        [Define to 1 if you have 'libidn2' (-lidn2).])],
960                     [MISSING_DEPS="${MISSING_DEPS}${MISSING_SEP}libidn2"
961                      MISSING_SEP=", "])])
962 AM_CONDITIONAL(HAVE_LIBIDN2,
963                test x$working_libidn2 = x1)
964 AS_IF([test x$working_libidn2 = x0],
965       [AS_IF([test x$my_with_libidn = x1],
966              [AC_MSG_NOTICE([Checking for libidn])
967               AC_CHECK_LIB([idn],
968                            [idna_to_ascii_8z],
969                            [working_libidn1=1
970                            LIBS="-lidn $LIBS"
971                            AC_DEFINE_UNQUOTED([HAVE_LIBIDN],
972                                               [1],
973                                               [Define to 1 if you have 'libidn' (-lidn).])],
974                            [there_can_only_be_one=0])],
975              [AS_IF([test x$my_with_libidn2 = x1],
976                     [there_can_only_be_one=0
977                      AC_MSG_FAILURE([* There can only be one libidn.
978                                      * Provide either libidn >= 1.13
979                                      * or
980                                      * libidn2 to the configure
981                                      * script via
982                                      * --with-libidn2
983                                      * --with-libidn])])])])
984 AM_CONDITIONAL(HAVE_LIBIDN, test x$working_libidn1 = x1)
985
986 AS_IF([test "$working_libidn1" = 0 -a "$working_libidn2" = 0],
987       [AC_MSG_ERROR([GNUnet requires libidn (or libidn2)])])
988
989 AS_IF([test x$there_can_only_be_one = x0],
990       [AC_MSG_FAILURE([Missing dependencies: $MISSING_DEPS])])
991
992 # test for zlib
993 SAVE_LDFLAGS=$LDFLAGS
994 SAVE_CPPFLAGS=$CPPFLAGS
995 AC_ARG_WITH(zlib,
996             [  --with-zlib[[=DIR]]       use libz in DIR],
997             [AS_IF([test "$withval" = "no"],
998                    [AC_MSG_ERROR([GNUnet requires zlib])],
999                    [test "$withval" != "yes"],
1000                    [Z_DIR=$withval
1001                     CPPFLAGS="${CPPFLAGS} -I$withval/include"
1002                     LDFLAGS="${LDFLAGS} -L$withval/lib"])])
1003 AC_CHECK_HEADER(zlib.h,
1004                 [],
1005                 [AC_MSG_ERROR([GNUnet requires zlib])])
1006 AC_CHECK_LIB(z,
1007              compress2,
1008              [AC_DEFINE([HAVE_ZLIB],
1009                         [],
1010                         [Have compression library])
1011               if test "x${Z_DIR}" != "x"; then
1012                       Z_CFLAGS="-I${Z_DIR}/include"
1013                       Z_LIBS="-L${Z_DIR}/lib -lz"
1014               else
1015                       Z_LIBS="-lz"
1016               fi],
1017               [AC_MSG_ERROR([GNUnet requires zlib])])
1018 AC_SUBST(Z_CFLAGS)
1019 AC_SUBST(Z_LIBS)
1020
1021 AS_IF([test "$enable_shared" = "no"],
1022       [AC_MSG_ERROR([GNUnet only works with shared libraries. Sorry.])])
1023
1024
1025 # restore LIBS
1026 LIBS=$SAVE_LIBS
1027
1028
1029 # end of taler-only being false
1030 ])
1031
1032
1033 # check for iconv
1034 AM_ICONV
1035
1036 # test for libunistring
1037 gl_LIBUNISTRING
1038 AS_IF([test $HAVE_LIBUNISTRING != yes],
1039       [AC_MSG_ERROR([GNUnet requires libunistring])])
1040  
1041 # under emscripten, $gl_libunistring_hexversion is undefined
1042 if test "$taler_only" != yes; then
1043
1044 AS_IF([test "x$gl_libunistring_hexversion" = "x" || test "$gl_libunistring_hexversion" -le 2305],
1045       [AC_MSG_ERROR([GNUnet requires libunistring >= 0.9.1.1])])
1046 fi
1047 AC_CHECK_HEADERS([unistr.h],
1048                  ,
1049                  AC_MSG_ERROR([Compiling GNUnet requires unistr.h (from libunistring) to be installed]))
1050
1051 # restore LIBS
1052 LIBS=$SAVE_LIBS
1053
1054
1055
1056 # Checks for standard header files.
1057 AC_HEADER_DIRENT
1058 AC_HEADER_STDC
1059
1060 # Check for headers that are ALWAYS required
1061 AC_CHECK_HEADERS([fcntl.h math.h errno.h ctype.h limits.h stdio.h stdlib.h string.h unistd.h stdarg.h signal.h locale.h sys/stat.h sys/types.h],,AC_MSG_ERROR([Compiling GNUnet requires standard UNIX headers files: fcntl.h math.h errno.h ctype.h limits.h stdio.h stdlib.h string.h unistd.h stdarg.h signal.h locale.h sys/stat.h sys/types.h]))
1062
1063
1064
1065 # Checks for headers that are only required on some systems or
1066 # opional (and where we do NOT abort if they are not there)
1067 AC_CHECK_HEADERS([stdatomic.h malloc.h malloc/malloc.h malloc/malloc_np.h langinfo.h sys/param.h sys/mount.h sys/statvfs.h sys/select.h sockLib.h sys/mman.h sys/msg.h sys/vfs.h arpa/inet.h fcntl.h libintl.h netdb.h netinet/in.h sys/ioctl.h sys/socket.h sys/time.h unistd.h kstat.h sys/sysinfo.h kvm.h sys/file.h sys/resource.h ifaddrs.h mach/mach.h stddef.h sys/timeb.h terminos.h argz.h ucred.h sys/ucred.h endian.h sys/endian.h execinfo.h byteswap.h])
1068
1069 # FreeBSD requires this for netinet/in_systm.h and netinet/ip.h
1070 AC_CHECK_HEADERS([sys/types.h netinet/in_systm.h netinet/in.h netinet/ip.h],,,
1071 [#ifdef HAVE_SYS_TYPES_H
1072 #include <sys/types.h>
1073 #endif
1074 #ifdef HAVE_NETINET_IN_SYSTM_H
1075 #include <netinet/in_systm.h>
1076 #endif
1077 #ifdef HAVE_NETINET_IN_H
1078 #include <netinet/in.h>
1079 #endif
1080 ])
1081
1082 SAVE_LDFLAGS=$LDFLAGS
1083 SAVE_CPPFLAGS=$CPPFLAGS
1084
1085 # test for sqlite
1086 sqlite=false
1087 AC_MSG_CHECKING(for SQLite)
1088 AC_ARG_WITH(sqlite,
1089   [  --with-sqlite=PFX       base of SQLite installation],
1090   [AC_MSG_RESULT("$with_sqlite")
1091    AS_CASE([$with_sqlite],
1092      [no],[],
1093      [yes],[
1094       AC_CHECK_HEADERS(sqlite3.h,
1095       sqlite=true)],
1096      [
1097     LDFLAGS="-L$with_sqlite/lib $LDFLAGS"
1098     CPPFLAGS="-I$with_sqlite/include $CPPFLAGS"
1099     AC_CHECK_HEADERS(sqlite3.h,
1100      EXT_LIB_PATH="-L$with_sqlite/lib $EXT_LIB_PATH"
1101      SQLITE_LDFLAGS="-L$with_sqlite/lib"
1102      SQLITE_CPPFLAGS="-I$with_sqlite/include"
1103      sqlite=true)
1104     LDFLAGS=$SAVE_LDFLAGS
1105     CPPFLAGS=$SAVE_CPPFLAGS
1106     ])
1107   ],
1108   [AC_MSG_RESULT([--with-sqlite not specified])
1109     AC_CHECK_HEADERS(sqlite3.h, sqlite=true)])
1110 AM_CONDITIONAL(HAVE_SQLITE, test x$sqlite = xtrue)
1111 AC_SUBST(SQLITE_CPPFLAGS)
1112 AC_SUBST(SQLITE_LDFLAGS)
1113
1114 LDFLAGS=$SAVE_LDFLAGS
1115 CPPFLAGS=$SAVE_CPPFLAGS
1116
1117 # test for postgres
1118 postgres=false
1119 # even running the check for postgres breaks emscripten ...
1120 AS_IF([test "$taler_only" != yes],
1121       [AX_LIB_POSTGRESQL([9.5],
1122         [CPPFLAGS="$CPPFLAGS $POSTGRESQL_CPPFLAGS"
1123          AC_CHECK_HEADERS([libpq-fe.h],
1124          postgres=true)
1125         ],
1126         [AC_MSG_RESULT([no postgres])])])
1127 AM_CONDITIONAL(HAVE_POSTGRESQL, test x$postgres = xtrue)
1128
1129
1130 LDFLAGS=$SAVE_LDFLAGS
1131 CPPFLAGS=$SAVE_CPPFLAGS
1132
1133 # mysql & windows
1134 AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include <sys/types.h>])
1135 AC_CHECK_TYPES([size_t], [], [], [#include <stdio.h>])
1136
1137 AS_IF([test "$build_target" = "mingw"]
1138  [CYGWIN_MYSQL_MAGIC="#include <mysql/my_global.h>"])
1139
1140 # test for mysql
1141 mysql=false
1142 mysqlfail=false
1143 SAVE_LDFLAGS=$LDFLAGS
1144 SAVE_CPPFLAGS=$CPPFLAGS
1145 AC_MSG_CHECKING(for mysql)
1146 AC_ARG_WITH(mysql,
1147   [  --with-mysql=PFX        base of MySQL installation],
1148   [AC_MSG_RESULT([$with_mysql])
1149    AS_CASE([$with_mysql],
1150      [no],[],
1151      [yes|""],[
1152       AC_CHECK_HEADERS(mysql/mysql.h,
1153        AC_CHECK_LIB(mysqlclient, mysql_init,
1154        mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
1155      ],[
1156       LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql $LDFLAGS $ZLIBS"
1157       CPPFLAGS="-I$with_mysql/include $CPPFLAGS"
1158       AC_CHECK_HEADERS(mysql/mysql.h,
1159        AC_CHECK_LIB(mysqlclient, mysql_init,
1160         MYSQL_LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql"
1161         MYSQL_CPPFLAGS="-I$with_mysql/include"
1162
1163         mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
1164      ])
1165   ],
1166   [AC_MSG_RESULT([--with-mysql not specified])
1167    if test -d "/usr/lib64/mysql"; then
1168     MYSQL_LIBDIR="/usr/lib64/mysql"
1169    elif test -d "/usr/lib/mysql"; then
1170     MYSQL_LIBDIR="/usr/lib/mysql"
1171    else
1172     MYSQL_LIBDIR="/usr/lib"
1173    fi
1174    LDFLAGS="-L$MYSQL_LIBDIR $LDFLAGS $ZLIBS"
1175    AC_CHECK_LIB(mysqlclient, mysql_init,
1176     [AC_CHECK_HEADERS(mysql/mysql.h,
1177       MYSQL_LDFLAGS="-L$MYSQL_LIBDIR"
1178       mysql=true
1179
1180      , [], [$CYGWIN_MYSQL_MAGIC])])
1181   ])
1182
1183 AC_SUBST(MYSQL_LDFLAGS)
1184 AC_SUBST(MYSQL_CPPFLAGS)
1185
1186 # additional version check for mysql
1187 AC_ARG_ENABLE(mysql-version-check, [  --disable-mysql-version-check  do not check MySQL version],, enable_mysql_version_check=yes)
1188 AS_IF([test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes"],
1189  [
1190   AC_MSG_CHECKING(mysql version)
1191   AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1192     [[$CYGWIN_MYSQL_MAGIC
1193       #include <mysql/mysql.h>]],
1194     [[
1195       #if (MYSQL_VERSION_ID < 40100)
1196       #error needs at least version >= 4.1
1197       #endif
1198       int main () { return 0; }
1199     ]])
1200     ],mysql=true,mysql=false)
1201   AS_IF([test "$mysql" = "false"],
1202    [
1203     mysqlfail=true
1204     AC_MSG_RESULT([fail, >= 4.1 required])
1205    ],[
1206     AC_MSG_RESULT(ok)
1207    ])
1208 ])
1209 AM_CONDITIONAL(HAVE_MYSQL, test x$mysql = xtrue)
1210 AM_CONDITIONAL(HAVE_MYSQLE, false)
1211 # restore LIBS
1212 LIBS=$SAVE_LIBS
1213 LDFLAGS=$SAVE_LDFLAGS
1214 CPPFLAGS=$SAVE_CPPFLAGS
1215
1216 AS_IF([test "$sqlite" = 0 -a "$mysql" = 0],
1217 [
1218  AC_MSG_ERROR([GNUnet requires SQLite or MySQL])
1219 ])
1220
1221 # libmicrohttpd
1222 lmhd=0
1223 AC_MSG_CHECKING([for libmicrohttpd])
1224 AC_ARG_WITH(microhttpd,
1225    [  --with-microhttpd=PFX   base of libmicrohttpd installation],
1226    [AC_MSG_RESULT([$with_microhttpd])
1227     AS_CASE([$with_microhttpd],
1228       [no],[],
1229       [yes|""],[
1230         AC_CHECK_HEADERS([microhttpd.h],
1231           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
1232             AC_CHECK_LIB([microhttpd], [MHD_get_fdset2],
1233               [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.63])
1234               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1235                 #include "$native_srcdir/src/include/platform.h"
1236                 #include <microhttpd.h>
1237                 #if (MHD_VERSION < 0x0096300)
1238                 #error needs at least version 0.9.63
1239                 #endif
1240                 int main () { return 0; }
1241                ])],
1242                [AC_MSG_RESULT(ok)
1243                 lmhd=1],
1244                [AC_MSG_RESULT(failed)])]),
1245             [],[#include "$native_srcdir/src/include/platform.h"
1246                 #include <microhttpd.h>]),,
1247             [#include "$native_srcdir/src/include/platform.h"])
1248       ],[
1249         LDFLAGS="-L$with_microhttpd/lib $LDFLAGS"
1250         CPPFLAGS="-I$with_microhttpd/include $CPPFLAGS"
1251         AC_CHECK_HEADERS(microhttpd.h,
1252           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
1253             AC_CHECK_LIB([microhttpd], [MHD_get_fdset2],
1254               EXT_LIB_PATH="-L$with_microhttpd/lib $EXT_LIB_PATH"
1255               [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.52])
1256                AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1257                 #include "$native_srcdir/src/include/platform.h"
1258                 #include <microhttpd.h>
1259                 #if (MHD_VERSION < 0x0094200)
1260                 #error needs at least version 0.9.42
1261                 #endif
1262                 int main () { return 0; }
1263                ])],
1264                [AC_MSG_RESULT(ok)
1265                 lmhd=1],
1266                [AC_MSG_RESULT(failed)])]),
1267             [],[#include "$native_srcdir/src/include/platform.h"
1268                 #include <microhttpd.h>]),,
1269             [#include "$native_srcdir/src/include/platform.h"])
1270        ])
1271    ],
1272    [AC_MSG_RESULT([--with-microhttpd not specified])
1273     AC_CHECK_HEADERS([microhttpd.h],
1274       AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
1275         AC_CHECK_LIB([microhttpd], [MHD_get_fdset2],
1276           [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.52])
1277               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1278                 #include "$native_srcdir/src/include/platform.h"
1279                 #include <microhttpd.h>
1280                 #if (MHD_VERSION < 0x0094200)
1281                 #error needs at least version 0.9.52
1282                 #endif
1283                ])],
1284                [AC_MSG_RESULT(ok)
1285                 lmhd=1],
1286                [AC_MSG_RESULT(failed)])]),
1287         [],[#include "$native_srcdir/src/include/platform.h"
1288             #include <microhttpd.h>]),,
1289        [#include "$native_srcdir/src/include/platform.h"])])
1290 AM_CONDITIONAL(HAVE_MHD, test x$lmhd = x1)
1291 AC_DEFINE_UNQUOTED([HAVE_MHD], $lmhd, [We have libmicrohttpd])
1292
1293 AM_CONDITIONAL(HAVE_JSON, [test x$jansson = x1])
1294
1295 # restore LIBS
1296 LIBS=$SAVE_LIBS
1297
1298 # check for gettext
1299 AM_GNU_GETTEXT([external])
1300 AM_GNU_GETTEXT_VERSION([0.18.1])
1301
1302 # Checks for standard typedefs, structures, and compiler characteristics.
1303 AC_TYPE_PID_T
1304 AC_TYPE_SIZE_T
1305 AC_TYPE_MODE_T
1306 AC_HEADER_TIME
1307 AC_HEADER_STAT
1308 AC_HEADER_STDBOOL
1309 AC_STRUCT_TM
1310
1311 AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
1312    [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
1313    ],
1314    [],
1315    [
1316       #include <sys/types.h>
1317       #include <sys/socket.h>
1318       #include <netinet/in.h>
1319    ])
1320
1321 AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
1322                 [ AC_DEFINE(HAVE_SOCKADDR_UN_SUN_LEN,
1323                             1,
1324                             [Do we have sockaddr_un.sun_len?])],
1325                 [],
1326                 [
1327                 #include <sys/types.h>
1328                 #include <sys/socket.h>
1329                 #include <sys/un.h>
1330                 ])
1331
1332
1333
1334 # Checks for library functions.
1335 AC_FUNC_CLOSEDIR_VOID
1336 AC_FUNC_FORK
1337 AC_PROG_GCC_TRADITIONAL
1338 AC_FUNC_MEMCMP
1339 AC_FUNC_SELECT_ARGTYPES
1340 AC_FUNC_CHOWN
1341
1342 AC_TYPE_SIGNAL
1343 AC_FUNC_STAT
1344 AC_FUNC_STRFTIME
1345 AC_FUNC_VPRINTF
1346 AC_HEADER_SYS_WAIT
1347 AC_TYPE_OFF_T
1348 AC_TYPE_UID_T
1349 AC_CHECK_FUNCS([atoll stat64 strnlen mremap getrlimit setrlimit sysconf initgroups strndup gethostbyname2 getpeerucred getpeereid setresuid $funcstocheck getifaddrs freeifaddrs getresgid mallinfo malloc_size malloc_usable_size getrusage random srandom stat statfs statvfs wait4])
1350
1351 # restore LIBS
1352 LIBS=$SAVE_LIBS
1353
1354 GN_INTLINCL=""
1355 GN_LIBINTL="$LTLIBINTL"
1356 AC_ARG_ENABLE(framework,
1357               [--enable-framework      enable Mac OS X framework build helpers],
1358               enable_framework_build=$enableval)
1359 AM_CONDITIONAL(WANT_FRAMEWORK,
1360                test x$enable_framework_build = xyes)
1361 AS_IF([test x$enable_framework_build = xyes],
1362       [AC_DEFINE([FRAMEWORK_BUILD],
1363                  1,
1364                  [Build a Mac OS X Framework])
1365       GN_INTLINCL='-I$(top_srcdir)/src/intlemu'
1366       GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation'
1367       AC_LIB_APPENDTOVAR([CPPFLAGS],
1368                          [$GN_INTLINCL])])
1369
1370 GN_LIB_LDFLAGS="-export-dynamic -no-undefined"
1371 GN_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined"
1372
1373 AC_SUBST(GN_LIB_LDFLAGS)
1374 AC_SUBST(GN_PLUGIN_LDFLAGS)
1375 AC_SUBST(GN_INTLINCL)
1376 AC_SUBST(GN_LIBINTL)
1377
1378 AC_SUBST(CPPFLAGS)
1379 AC_SUBST(LIBS)
1380 AC_SUBST(LDFLAGS)
1381 AC_SUBST(EXT_LIB_PATH)
1382 AC_SUBST(EXT_LIBS)
1383
1384 AC_SUBST(LIBPREFIX)
1385 AC_SUBST(DLLDIR)
1386 AC_SUBST(EXT_LIB_PATH)
1387
1388 DATAROOTDIR=$datarootdir
1389 AC_SUBST(DATAROOTDIR)
1390
1391 # test for sudo
1392 # TODO: do we need to change anything for "doas" on openbsd?
1393 AC_MSG_CHECKING(for sudo)
1394 AC_ARG_WITH(sudo,
1395             [  --with-sudo=PATH       path to sudo binary (or just yes)],
1396             [AC_MSG_RESULT("$with_sudo")
1397              AS_CASE([$with_sudo],
1398                      [no],[SUDO_BINARY=],
1399                      [yes],[SUDO_BINARY=sudo],
1400                      [SUDO_BINARY=$with_sudo])],
1401             [AC_MSG_RESULT([no])])
1402 AC_SUBST(SUDO_BINARY)
1403 AM_CONDITIONAL([HAVE_SUDO],
1404                [test "x$SUDO_BINARY" != "x" -o -w /])
1405
1406
1407 # test for gnunetdns group name
1408 GNUNETDNS_GROUP=gnunetdns
1409 AC_MSG_CHECKING(for gnunetdns group name)
1410 AC_ARG_WITH(gnunetdns,
1411             [  --with-gnunetdns=GRPNAME       name for gnunetdns group],
1412             [AC_MSG_RESULT("$with_gnunetdns")
1413              AS_CASE([$with_gnunetdns],
1414                      [no],[GNUNETDNS_GROUP=gnunet],
1415                      [yes],[GNUNETDNS_GROUP=gnunetdns],
1416                      [GNUNETDNS_GROUP=$with_gnunetdns])],
1417             [AC_MSG_RESULT([gnunetdns])])
1418 AC_SUBST(GNUNETDNS_GROUP)
1419
1420
1421
1422 # gnutls
1423 gnutls=0
1424 gnutls_dane=0
1425 AC_MSG_CHECKING(for gnutls)
1426 AC_ARG_WITH(gnutls,
1427             [  --with-gnutls=PFX   base of gnutls installation],
1428             [AC_MSG_RESULT([$with_gnutls])
1429              AS_CASE([$with_gnutls],
1430                      [no],[],
1431                      [yes],
1432                      [AC_CHECK_HEADERS([gnutls/abstract.h],
1433                                        AC_CHECK_LIB([gnutls],
1434                                                     [gnutls_priority_set],
1435                                                     gnutls=true))
1436                       AC_CHECK_HEADERS([gnutls/dane.h],
1437                                        AC_CHECK_LIB([gnutls-dane],
1438                                                     [dane_verify_crt_raw],
1439                                                     gnutls_dane=1))],
1440
1441         [LDFLAGS="-L$with_gnutls/lib $LDFLAGS"
1442         CPPFLAGS="-I$with_gnutls/include $CPPFLAGS"
1443         AC_CHECK_HEADERS([gnutls/abstract.h],
1444             AC_CHECK_LIB([gnutls], [gnutls_priority_set],
1445               EXT_LIB_PATH="-L$with_gnutls/lib $EXT_LIB_PATH"
1446               gnutls=true))
1447         AC_CHECK_HEADERS([gnutls/dane.h],
1448             AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
1449               gnutls_dane=1))
1450       ])
1451    ],
1452    [AC_MSG_RESULT([--with-gnutls not specified])
1453     AC_CHECK_HEADERS([gnutls/abstract.h],
1454         AC_CHECK_LIB([gnutls], [gnutls_priority_set],
1455           gnutls=true))
1456     AC_CHECK_HEADERS([gnutls/dane.h],
1457         AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
1458                      gnutls_dane=1))
1459    ])
1460 AM_CONDITIONAL(HAVE_GNUTLS, test x$gnutls = xtrue)
1461 AC_DEFINE_UNQUOTED([HAVE_GNUTLS], $gnutls, [We have GnuTLS])
1462 AM_CONDITIONAL(HAVE_GNUTLS_DANE, test x$gnutls_dane = x1)
1463 AC_DEFINE_UNQUOTED([HAVE_GNUTLS_DANE], $gnutls_dane, [We have GnuTLS with DANE support])
1464
1465
1466
1467 # Test if we are building for superMUC
1468 AC_MSG_CHECKING(if GNUnet is being configured to run on the SuperMUC)
1469 AC_ARG_ENABLE([supermuc],
1470     [AS_HELP_STRING([--enable-supermuc],
1471        [build GNUnet with support to run on the SuperMUC (default is NO)])],
1472     [AS_IF([test "x$enable_supermuc" = "xno"],
1473       [supermuc=0],
1474       [supermuc=1])],
1475     [supermuc=0
1476      enable_supermuc=no])
1477 AC_MSG_RESULT($enable_SUPERMUC)
1478 AM_CONDITIONAL([ENABLE_SUPERMUC], [test "x$supermuc" = "x1"])
1479 AC_DEFINE_UNQUOTED([ENABLE_SUPERMUC], [$supermuc], [Build with support for SuperMUC])
1480
1481 # Check if NSE has to send timestamp information to testbed logger for
1482 # generating histogram of messages received
1483 AC_MSG_CHECKING(if NSE has to send timestamp information to testbed logger)
1484 AC_ARG_ENABLE([nse-histogram],
1485     [AS_HELP_STRING([--enable-nse-histogram],
1486        [have NSE send timestamp information to testbed logger for generating
1487        histogram of received messages.  NOT useful for production (default is
1488        NO)])],
1489     [AS_IF([test "x$enableval" = "xno"],
1490       [nse_histogram=0],
1491       [nse_histogram=1])],
1492     [nse_histogram=0
1493      enable_nse_histogram=no])
1494 AC_MSG_RESULT($enable_nse_histogram)
1495 AM_CONDITIONAL([ENABLE_NSE_HISTOGRAM], [test "x$nse_histogram" = "x1"])
1496 AC_DEFINE_UNQUOTED([ENABLE_NSE_HISTOGRAM], [$nse_histogram],
1497                    [have NSE send timestamp information to testbed logger])
1498
1499 # should 'make check' run tests?
1500 AC_MSG_CHECKING(whether to run tests)
1501 AC_ARG_ENABLE([testruns],
1502    [AS_HELP_STRING([--disable-testruns], [disable running tests on make check (default is YES)])],
1503    [enable_tests_run=${enableval}],
1504    [enable_tests_run=yes])
1505 AC_MSG_RESULT($enable_test_run)
1506 AM_CONDITIONAL([ENABLE_TEST_RUN], [test "x$enable_tests_run" = "xyes"])
1507
1508
1509 AC_MSG_CHECKING([whether to compile in benchmarks (currently for http and crypto)])
1510 AC_ARG_ENABLE([benchmark],
1511    [AS_HELP_STRING([--enable-benchmark], [enable benchmarking])],
1512    [enable_benchmark=${enableval}],
1513    [enable_benchmark=no])
1514 AC_MSG_RESULT($enable_benchmark)
1515 AS_IF([test "x$enable_benchmark" = "xyes"],
1516       [AC_DEFINE_UNQUOTED(ENABLE_BENCHMARK,1,[Benchmarks are enabled])])
1517 AM_CONDITIONAL([ENABLE_BENCHMARK], [test "x$enable_benchmark" = "xyes"])
1518
1519
1520 # should expensive tests be run?
1521 AC_MSG_CHECKING(whether to run expensive tests)
1522 AC_ARG_ENABLE([expensivetests],
1523    [AS_HELP_STRING([--enable-expensivetests], [enable running expensive testcases])],
1524    [enable_expensive=${enableval}],
1525    [enable_expensive=no])
1526 AC_MSG_RESULT($enable_expensive)
1527 AM_CONDITIONAL([HAVE_EXPENSIVE_TESTS], [test "x$enable_expensive" = "xyes"])
1528
1529 # should ports be open for Java services?
1530 AC_MSG_CHECKING(whether to enable ports for gnunet-java)
1531 AC_ARG_ENABLE([javaports],
1532    [AS_HELP_STRING([--enable-javaports], [use non-zero ports for services with Java bindings (default is NO)])],
1533    [enable_java_ports=${enableval}],
1534    [enable_java_ports=no])
1535 AC_MSG_RESULT($enable_java_ports)
1536 AS_IF([test "x$enable_java_ports" = "xyes"],
1537  [JAVAPORT=""],
1538  [JAVAPORT="$UNIXONLY"])
1539 AC_SUBST(JAVAPORT)
1540
1541 # should benchmarks be run?
1542 AC_MSG_CHECKING(whether to run benchmarks during make check)
1543 AC_ARG_ENABLE([benchmarks],
1544    [AS_HELP_STRING([--enable-benchmarks], [enable running benchmarks during make check])],
1545    [enable_benchmarks=${enableval}],
1546    [enable_benchmarks=no])
1547 AC_MSG_RESULT($enable_benchmarks)
1548 AM_CONDITIONAL([HAVE_BENCHMARKS], [test "x$enable_benchmarks" = "xyes"])
1549
1550 # should gnunet-testing be compiled
1551 AC_MSG_CHECKING(wether to compile gnunet-testing)
1552 AC_ARG_ENABLE([testing],
1553    [AS_HELP_STRING([--disable-testing], [do not build gnunet-testing])],
1554    [enable_testing=${enableval}],
1555    [enable_testing=yes])
1556 AC_MSG_RESULT($enable_testing)
1557 AM_CONDITIONAL([HAVE_TESTING], [test "x$enable_testing" = "xyes"])
1558
1559 # should experimental code be compiled (code that may not yet compile)?
1560 AC_MSG_CHECKING(whether to compile experimental code)
1561 AC_ARG_ENABLE([experimental],
1562    [AS_HELP_STRING([--enable-experimental], [enable compiling experimental code])],
1563    [enable_experimental=${enableval}],
1564    [enable_experimental=no])
1565 AC_MSG_RESULT($enable_experimental)
1566 AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"])
1567
1568 # should malicious code be compiled (should only be used for testing)?
1569 AC_MSG_CHECKING(whether to compile malicious code)
1570 AC_ARG_ENABLE([malicious],
1571    [AS_HELP_STRING([--enable-malicious], [enable compiling malicious code])],
1572    [AS_IF([test "x$enableval" = "xno"],
1573      [malicious=0],
1574      [malicious=1])],
1575    [malicious=0
1576     enable_malicious=no])
1577 AC_MSG_RESULT($enable_malicious)
1578 AM_CONDITIONAL([ENABLE_MALICIOUS], [test 1=$malicious])
1579 AC_DEFINE_UNQUOTED([ENABLE_MALICIOUS], [$malicious],
1580                    [enable compilation of malicious code])
1581
1582 # should services be started on demand when needed?
1583 # Some services may choose to never start by default
1584 # and it is up to the service/module developer to decide
1585 # by having "START_ON_DEMAND = NO" instead of
1586 # "START_ON_DEMAND = @START_ON_DEMAND@"
1587 # in the service/module's conf.in file.
1588 # See also IMMEDIATE_START for an unconditional immediate start.
1589 START_ON_DEMAND="YES"
1590 AC_MSG_CHECKING(whether to start peer's services on demand by default)
1591 AC_ARG_ENABLE([autostart],
1592    [AS_HELP_STRING([--disable-autostart], [do not start peer's services by default])],
1593    [enable_autostart=${enableval}
1594     AS_IF([test "x$enable_autostart" = "xno"],
1595       [START_ON_DEMAND="NO"])
1596    ],
1597    [enable_autostart=yes])
1598 AC_MSG_RESULT($enable_autostart)
1599 #AM_CONDITIONAL([HAVE_START_ON_DEMAND], [test "x$enable_autostart" = "xyes"])
1600 AC_SUBST(START_ON_DEMAND)
1601
1602 # should memory statistics be kept (very expensive CPU-wise!)
1603 AC_MSG_CHECKING(whether to create expensive statistics on memory use)
1604 AC_ARG_ENABLE([heapstats],
1605    [AS_HELP_STRING([--enable-heapstats], [enable expensive heap statistics])],
1606    [enable_heapstats=1],
1607    [enable_heapstats=0])
1608 AC_MSG_RESULT($enable_heapstats)
1609 AC_DEFINE_UNQUOTED([ENABLE_HEAP_STATISTICS],$enable_heapstats,[enable expensive heap statistics])
1610
1611 # should code be enabled that works around missing OS functionality on Windows?
1612 # used for test cases
1613 if test $build_target = "mingw"
1614 then
1615         workarounds=1
1616
1617 AC_LINK_IFELSE(
1618  [AC_LANG_PROGRAM(
1619   [#include <ws2tcpip.h>
1620   ],[
1621   int s = socket (0, 0, 0);])
1622  ],[
1623   AC_DEFINE_UNQUOTED([HAVE_SOCKET],1,[Define this if socket() is available])
1624  ],[
1625   AC_DEFINE_UNQUOTED([HAVE_SOCKET],0,[Define this if socket() is available])
1626  ])
1627
1628 AC_LINK_IFELSE(
1629  [AC_LANG_PROGRAM(
1630   [#include <ws2tcpip.h>
1631   ],[
1632   int s = select (0, NULL, NULL, NULL, NULL);])
1633  ],[
1634   AC_DEFINE_UNQUOTED([HAVE_SELECT],1,[Define this if select() is available])
1635  ],[
1636   AC_DEFINE_UNQUOTED([HAVE_SELECT],0,[Define this if select() is available])
1637  ])
1638
1639 AC_LINK_IFELSE(
1640  [AC_LANG_PROGRAM(
1641   [#include <ws2tcpip.h>
1642   ],[
1643   struct in_addr i;
1644   char *s = inet_ntoa (i);])
1645  ],[
1646   AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],1,[Define this if inet_ntoa() is available])
1647  ],[
1648   AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],0,[Define this if inet_ntoa() is available])
1649  ])
1650
1651 AC_LINK_IFELSE(
1652  [AC_LANG_PROGRAM(
1653   [#include <ws2tcpip.h>
1654   ],[
1655   int s = getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);])
1656  ],[
1657   AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],1,[Define this if getnameinfo() is available])
1658  ],[
1659   AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],0,[Define this if getnameinfo() is available])
1660  ])
1661
1662 AC_LINK_IFELSE(
1663  [AC_LANG_PROGRAM(
1664   [#include <ws2tcpip.h>
1665   ],[
1666   int s = gethostname (NULL, 0);])
1667  ],[
1668   AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],1,[Define this if gethostname() is available])
1669  ],[
1670   AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],0,[Define this if gethostname() is available])
1671  ])
1672
1673 AC_LINK_IFELSE(
1674  [AC_LANG_PROGRAM(
1675   [#include <ws2tcpip.h>
1676   ],[
1677   void *s = gethostbyname (NULL);])
1678  ],[
1679   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],1,[Define this if gethostbyname() is available])
1680  ],[
1681   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],0,[Define this if gethostbyname() is available])
1682  ])
1683
1684 AC_LINK_IFELSE(
1685  [AC_LANG_PROGRAM(
1686   [#include <ws2tcpip.h>
1687   ],[
1688   void *s = gethostbyaddr (NULL, 0, 0);])
1689  ],[
1690   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],1,[Define this if gethostbyaddr() is available])
1691  ],[
1692   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],0,[Define this if gethostbyaddr() is available])
1693  ])
1694
1695 AC_LINK_IFELSE(
1696  [AC_LANG_PROGRAM(
1697   [#include <ws2tcpip.h>
1698   ],[
1699   int s = getaddrinfo (NULL, NULL, NULL, NULL);])
1700  ],[
1701   AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],1,[Define this if getaddrinfo() is available])
1702  ],[
1703   AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],0,[Define this if getaddrinfo() is available])
1704  ])
1705
1706 else
1707   AC_MSG_CHECKING(whether to enable windows workarounds)
1708   AC_ARG_ENABLE([windows_workarounds],
1709      [AS_HELP_STRING([--enable-windows_workarounds], [enable workarounds used on Windows (only useful for test cases)])],
1710      [enable_workarounds=${enableval}],
1711      [enable_workarounds=no])
1712   AC_MSG_RESULT($enable_workarounds)
1713   AS_IF([test x$enable_windows_workarounds = "xyes"],
1714     [workarounds=1],
1715     [workarounds=0])
1716 fi
1717 AC_DEFINE_UNQUOTED([ENABLE_WINDOWS_WORKAROUNDS], $workarounds, [enable workarounds used on Windows (only useful for test cases)])
1718
1719
1720 # Check if the __thread storage class for
1721 # thread-local storage is available.
1722 AC_MSG_CHECKING(whether __thread is supported)
1723 AC_LINK_IFELSE(
1724 [AC_LANG_PROGRAM([#include <stdlib.h>
1725                    #undef __thread
1726                    static __thread int a = 1;],
1727                   [exit(a-1);])],
1728  [have_thread_local_gcc=1],[have_thread_local_gcc=0])
1729 AC_DEFINE_UNQUOTED([HAVE_THREAD_LOCAL_GCC],$have_thread_local_gcc,[Define this if __thread is supported])
1730 AS_IF([test "x$have_thread_local_gcc" = "x1"],
1731       [AC_MSG_RESULT(yes)],
1732       [AC_MSG_RESULT(no)])
1733
1734 # gcov compilation
1735 AC_MSG_CHECKING(whether to compile with support for code coverage analysis)
1736 AC_ARG_ENABLE([coverage],
1737               AS_HELP_STRING([--enable-coverage],
1738                              [compile the library with code coverage support]),
1739               [use_gcov=${enableval}],
1740               [use_gcov=no])
1741 AC_MSG_RESULT($use_gcov)
1742 AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
1743
1744
1745 # version info
1746 # TODO: git blame says this predates our switch to git.
1747 # git-svn should be adjusted to simply git, or
1748 # an external script that does the job.
1749 AC_PATH_PROG(svnversioncommand, svnversion)
1750 AC_PATH_PROG(gitcommand, git)
1751 AC_MSG_CHECKING(for source being under a VCS)
1752
1753
1754 # version info
1755 AC_PATH_PROG(gitcommand, git)
1756 AC_MSG_CHECKING(for source being under a VCS)
1757 git_version=
1758 AS_IF([test ! "X$gitcommand" = "X"],
1759 [
1760   git_version=$(cd $srcdir ; git rev-list --full-history --all --abbrev-commit | head -n 1 2>/dev/null)
1761 ])
1762 AS_IF([test "X$git_version" = "X"],
1763   [
1764     vcs_name="no"
1765     vcs_version="\"release\""
1766   ],
1767   [
1768     vcs_name="yes, git-svn"
1769     vcs_version="\"git-$git_version\""
1770   ])
1771 AC_MSG_RESULT($vcs_name)
1772
1773 AC_MSG_CHECKING(VCS version)
1774 AC_MSG_RESULT($vcs_version)
1775 AC_DEFINE_UNQUOTED(VCS_VERSION, [$vcs_version], [VCS revision/hash or tarball version])
1776
1777 AC_CONFIG_FILES([
1778 Makefile
1779 contrib/Makefile
1780 contrib/hellos/Makefile
1781 contrib/services/Makefile
1782 contrib/services/openrc/Makefile
1783 contrib/services/systemd/Makefile
1784 contrib/scripts/Makefile
1785 contrib/scripts/gnunet-logread/Makefile
1786 doc/Makefile
1787 doc/man/Makefile
1788 doc/doxygen/Makefile
1789 doc/handbook/Makefile
1790 doc/tutorial/Makefile
1791 lint/Makefile
1792 m4/Makefile
1793 po/Makefile.in
1794 src/Makefile
1795 src/arm/Makefile
1796 src/arm/arm.conf
1797 src/ats/Makefile
1798 src/ats/ats.conf
1799 src/ats-tool/Makefile
1800 src/ats-tests/Makefile
1801 src/auction/Makefile
1802 src/block/Makefile
1803 src/cadet/Makefile
1804 src/cadet/cadet.conf
1805 src/core/Makefile
1806 src/core/core.conf
1807 src/consensus/Makefile
1808 src/consensus/consensus.conf
1809 src/conversation/Makefile
1810 src/conversation/conversation.conf
1811 src/curl/Makefile
1812 src/datacache/Makefile
1813 src/datastore/Makefile
1814 src/datastore/datastore.conf
1815 src/dht/Makefile
1816 src/dht/dht.conf
1817 src/dns/Makefile
1818 src/dns/dns.conf
1819 src/exit/Makefile
1820 src/fragmentation/Makefile
1821 src/fs/Makefile
1822 src/fs/fs.conf
1823 src/gns/Makefile
1824 src/gns/gns.conf
1825 src/gns/nss/Makefile
1826 src/gnsrecord/Makefile
1827 src/hello/Makefile
1828 src/identity/Makefile
1829 src/identity/identity.conf
1830 src/credential/Makefile
1831 src/credential/credential.conf
1832 src/include/Makefile
1833 src/integration-tests/Makefile
1834 src/json/Makefile
1835 src/hostlist/Makefile
1836 src/my/Makefile
1837 src/mysql/Makefile
1838 src/namecache/Makefile
1839 src/namecache/namecache.conf
1840 src/namestore/Makefile
1841 src/namestore/namestore.conf
1842 src/nat/Makefile
1843 src/nat/nat.conf
1844 src/nat-auto/Makefile
1845 src/nat-auto/nat-auto.conf
1846 src/nse/Makefile
1847 src/nse/nse.conf
1848 src/nt/Makefile
1849 src/peerinfo/Makefile
1850 src/peerinfo/peerinfo.conf
1851 src/peerinfo-tool/Makefile
1852 src/peerstore/Makefile
1853 src/peerstore/peerstore.conf
1854 src/pq/Makefile
1855 src/pt/Makefile
1856 src/regex/Makefile
1857 src/regex/regex.conf
1858 src/revocation/Makefile
1859 src/revocation/revocation.conf
1860 src/rps/Makefile
1861 src/rps/rps.conf
1862 src/secretsharing/Makefile
1863 src/secretsharing/secretsharing.conf
1864 src/scalarproduct/Makefile
1865 src/scalarproduct/scalarproduct.conf
1866 src/set/Makefile
1867 src/set/set.conf
1868 src/sq/Makefile
1869 src/statistics/Makefile
1870 src/statistics/statistics.conf
1871 src/template/Makefile
1872 src/testbed/Makefile
1873 src/testbed/testbed.conf
1874 src/testbed-logger/Makefile
1875 src/testbed-logger/testbed-logger.conf
1876 src/testing/Makefile
1877 src/topology/Makefile
1878 src/transport/Makefile
1879 src/transport/transport.conf
1880 src/util/Makefile
1881 src/util/resolver.conf
1882 src/vpn/Makefile
1883 src/vpn/vpn.conf
1884 src/zonemaster/Makefile
1885 src/zonemaster/zonemaster.conf
1886 src/rest/Makefile
1887 src/abe/Makefile
1888 src/reclaim-attribute/Makefile
1889 src/reclaim/Makefile
1890 pkgconfig/Makefile
1891 pkgconfig/gnunetarm.pc
1892 pkgconfig/gnunetats.pc
1893 pkgconfig/gnunetblock.pc
1894 pkgconfig/gnunetcadet.pc
1895 pkgconfig/gnunetconsensus.pc
1896 pkgconfig/gnunetconversation.pc
1897 pkgconfig/gnunetcore.pc
1898 pkgconfig/gnunetdatacache.pc
1899 pkgconfig/gnunetdatastore.pc
1900 pkgconfig/gnunetdht.pc
1901 pkgconfig/gnunetdns.pc
1902 pkgconfig/gnunetenv.pc
1903 pkgconfig/gnunetfragmentation.pc
1904 pkgconfig/gnunetfs.pc
1905 pkgconfig/gnunetgns.pc
1906 pkgconfig/gnunethello.pc
1907 pkgconfig/gnunetidentity.pc
1908 pkgconfig/gnunetmicrophone.pc
1909 pkgconfig/gnunetmysql.pc
1910 pkgconfig/gnunetnamestore.pc
1911 pkgconfig/gnunetnat.pc
1912 pkgconfig/gnunetnse.pc
1913 pkgconfig/gnunetpeerinfo.pc
1914 pkgconfig/gnunetpq.pc
1915 pkgconfig/gnunetregex.pc
1916 pkgconfig/gnunetrevocation.pc
1917 pkgconfig/gnunetrps.pc
1918 pkgconfig/gnunetscalarproduct.pc
1919 pkgconfig/gnunetset.pc
1920 pkgconfig/gnunetspeaker.pc
1921 pkgconfig/gnunetstatistics.pc
1922 pkgconfig/gnunettestbed.pc
1923 pkgconfig/gnunettesting.pc
1924 pkgconfig/gnunettransport.pc
1925 pkgconfig/gnunetutil.pc
1926 pkgconfig/gnunetvpn.pc
1927 ])
1928 AC_OUTPUT
1929
1930
1931 # FIXME: `some modules' -> be more specific which exact modules.
1932
1933 # java ports
1934 AS_IF([test "x$enable_java_ports" = "xyes"],
1935       [AC_MSG_NOTICE([NOTICE: Opening ports for gnunet-java bindings by default.])])
1936
1937 ####
1938 #### Lasciate ogne speranza, voi ch'intrate
1939 ####
1940 #### This could be moved to the checks above,
1941 #### but for now let's keep it here.
1942 ####
1943
1944 # -- print message regarding enabled experimental features
1945 AS_IF([test "x$enable_experimental" = "xyes"],
1946       [experimental_msg="experimental features enabled"])
1947 # -- OSX Framework
1948 AS_IF([test "$enable_framework_build" = "yes"],
1949       [macosx_framework_msg="yes"],
1950       [macosx_framework_msg="no"])
1951 # -- libidn 2
1952 AS_IF([test "x$working_libidn2" = x1],
1953       [libidn2_msg="libidn2"])
1954 # -- libidn 1
1955 AS_IF([test "x$working_libidn1" = x1],
1956       [libidn1_msg="libidn1"])
1957 # -- texi2mdoc
1958 AS_IF([test "x$texi2mdoc_generation" = x1],
1959       [mdoc_msg="yes"],
1960       [mdoc_msg="no"])
1961 # -- texinfo
1962 AS_IF([test "x$makeinfo" != "x1"],
1963       [texinfo_msg="no"],
1964       [texinfo_msg="yes"])
1965 # -- conversation
1966 AS_IF([test "x$conversation_backend" = "xnone"],
1967       [AS_IF([test "x$pulse" != "x1"],
1968              [AC_MSG_NOTICE([WARNING: libpulse(audio) not found, conversation will not be built.])
1969               libpulse_msg="no"],
1970              [libpulse_msg="yes"])
1971        AS_IF([test "x$opus" != "x1"],
1972              [AC_MSG_NOTICE([WARNING: libopus not found, conversation will not be built.])
1973               libopus_msg="no"],
1974              [libopus_msg="yes"])
1975        AS_IF([test "x$gst" != "x1"],
1976              [AC_MSG_NOTICE([WARNING: GStreamer not found, conversation will not be built.])
1977               gstreamer_msg="no"],
1978              [gstreamer_msg="yes"])],
1979       [features_msg="$features_msg conversation"])
1980 # -- interface
1981 interface_msg=`echo $DEFAULT_INTERFACE | tr -d \"`
1982 # -- libmicrohttpd
1983 AS_IF([test "x$lmhd" != "x1"],
1984       [libmicrohttpd_msg="no (optional)"],
1985       [libmicrohttpd_msg="yes"])
1986 # -- jansson
1987 AS_IF([test "x$jansson" = "x0"],
1988       [jansson_msg="no (optional)"],
1989       [jansson_msg="yes"])
1990 # -- libextractor
1991 AS_IF([test "$extractor" != 1],
1992       [AC_MSG_WARN([ERROR: libextractor not found, but various file-sharing functions require it])],
1993       [libextractor_msg="yes"])
1994 # -- libzbar
1995 AS_IF([test "$have_zbar" = 1],
1996       [libzbar_msg="yes"
1997        features_msg="$features_msg gnunet-qr"],
1998       [AC_MSG_NOTICE([WARNING: zbar not found, gnunet-qr will not be built.])
1999        libzbar_msg="no"])
2000 # -- libgnurl
2001 AS_IF([test "$gnurl" = "0"],
2002       [AS_IF([test "x$curl" = "xfalse"],
2003              [AC_MSG_NOTICE([WARNING: libgnurl not found. http client support will not be compiled.])
2004               AC_MSG_WARN([ERROR: libgnurl not found. hostlist daemon will not be compiled, and you probably WANT the hostlist daemon])
2005               curl_msg="no"],
2006              [AC_MSG_NOTICE([WARNING: libgnurl not found, trying to use libcurl-gnutls instead.])
2007               curl_msg="yes"])],
2008        [gnurl_msg="yes"])
2009 # -- ifconfig
2010 AS_IF([test "$VAR_IFCONFIG_BINARY" = "false"],
2011       [AC_MSG_NOTICE([WARNING: optional ifconfig not found])
2012        ifconfig_msg="no (optional)"],
2013       [ifconfig_msg="yes"])
2014 # -- upnpc
2015 AS_IF([test "$VAR_UPNPC_BINARY" = "false"],
2016       [AC_MSG_NOTICE([WARNING: optional upnpc binary not found])
2017        upnpc_msg="no (optional)"],
2018       [upnpc_msg="yes"])
2019 # -- iptables
2020 AS_IF([test "$VAR_IPTABLES_BINARY" = "false"],
2021       [AC_MSG_NOTICE([WARNING: optional iptables not found])
2022        iptables_msg="no (optional)"],
2023       [iptables_msg="yes"])
2024 # -- bluetooth
2025 AS_IF([test "x$bluetooth" = "x0"],
2026       [AC_MSG_NOTICE([WARNING: optional bluetooth library not found.])
2027        bluetooth_msg="no (optional)"],
2028       [bluetooth_msg="yes"])
2029 # -- gnutls
2030 AS_IF([test x$gnutls != xtrue],
2031       [AC_MSG_NOTICE([WARNING: GnuTLS not found, gnunet-gns-proxy will not be built])
2032        gnutls_msg="no"],
2033       [AS_IF([test "x$gnutls_dane" != "x1"],
2034              [AC_MSG_NOTICE([WARNING: GnuTLS has no DANE support, DANE validation will not be possible])
2035               gnutls_msg="yes (without DANE support)"],
2036              [gnutls_msg="yes (with DANE support)"])])
2037 # -- databases
2038 AS_IF([test $mysqlfail = true]
2039       [AC_MSG_NOTICE([WARNING: optional MySQL not found (or too old)])])
2040 AS_IF([test "$mysql" = true],
2041       [features_msg="$features_msg mysql"
2042        mysql_msg="yes"],
2043       [mysql_msg="no"])
2044 AS_IF([test "$sqlite" = true],
2045       [features_msg="$features_msg sqlite"
2046        sqlite_msg="yes"],
2047       [AC_MSG_ERROR([ERROR: sqlite3 not found, but sqlite3 is required.])
2048        sqlite_msg="no"])
2049 AS_IF([test "$postgres" = true],
2050       [features_msg="$features_msg postgres"
2051        postgres_msg="yes"],
2052       [postgres_msg="no"])
2053 # -- features
2054 # ---- 1. replace spaces with newlines,
2055 # ---- 2. sort the lines,
2056 # ---- 3. replace the newlines with spaces.
2057 features_msg=`echo $features_msg | tr ' ' '\012' | sort | tr '\012' ' '`
2058 AC_SUBST(features_msg)
2059
2060
2061 # The summary
2062 # TODO: reduce the length of the last message block ("the message")
2063
2064 AC_MSG_NOTICE([
2065 GNUnet Configuration (incomplete!)
2066
2067 gnunet version:                 ${VERSION}
2068
2069 Host setup:                     ${host}
2070 Install prefix:                 ${prefix}
2071 Compiler:                       ${CC}
2072 CFLAGS:                         ${CFLAGS}
2073 CPPFLAGS:                       ${CPPFLAGS}
2074 LDFLAGS:                        ${LDFLAGS}
2075 LIBS:                           ${LIBS}
2076 Build Target:                   $build_target
2077 Mac OSX framework build:        ${macosx_framework_msg}
2078
2079 Default Interface:              ${interface_msg}
2080
2081 MySQL:                          ${mysql_msg}
2082 PostgreSQL:                     ${postgres_msg}
2083 sqlite3:                        ${sqlite_msg}
2084 gnurl:                          ${gnurl_msg}
2085 curl:                           ${curl_msg}
2086 bluetooth:                      ${bluetooth_msg}
2087 jansson:                        ${jansson_msg}
2088 iptables:                       ${iptables_msg}
2089 ifconfig:                       ${ifconfig_msg}
2090 upnpc:                          ${upnpc_msg}
2091 gnutls:                         ${gnutls_msg}
2092 libzbar:                        ${libzbar_msg}
2093 java:                           ${java_msg}
2094 libmicrohttpd:                  ${libmicrohttpd_msg}
2095 libidn:                         ${libidn1_msg}${libidn2_msg}
2096 libopus:                        ${libopus_msg}
2097 gstreamer:                      ${gstreamer_msg}
2098 libpulse:                       ${libpulse_msg}
2099 libextractor:                   ${libextractor_msg}
2100
2101 texinfo manual:                 ${texinfo_msg}
2102 transpiled mdoc manual:         ${mdoc_msg}
2103
2104 features:                       ${features_msg}
2105 experimental:                   ${experimental_msg}
2106
2107
2108 IMPORTANT:
2109
2110 Please make sure NOW that you have created a user and group 'gnunet'
2111 and additionally a group 'gnunetdns'. On Debian and Ubuntu GNU/Linux,
2112 type:
2113
2114   addgroup gnunetdns
2115   adduser --system --group --disabled-login --home /var/lib/gnunet gnunet
2116
2117 Make sure that '/var/lib/gnunet' is owned (and writable) by user
2118 'gnunet'.  Then, you can compile GNUnet with
2119
2120   make
2121
2122 After that, run (if necessary as 'root')
2123
2124   make install
2125
2126 to install everything.
2127
2128 Each GNUnet user should be added to the 'gnunet' group (may
2129 require fresh login to come into effect):
2130
2131   adduser USERNAME gnunet
2132
2133 (run the above command as root once for each of your users, replacing
2134 "USERNAME" with the respective login names).  If you have a global IP
2135 address, no further configuration is required.
2136
2137 For more detailed setup instructions, see https://docs.gnunet.org/
2138
2139 Optionally, download and compile gnunet-gtk to get a GUI for
2140 file-sharing and configuration.  This is particularly recommended
2141 if your network setup is non-trivial, as gnunet-setup can be
2142 used to test in the GUI if your network configuration is working.
2143 gnunet-setup should be run as the "gnunet" user under X.  As it
2144 does very little with the network, running it as "root" is likely
2145 also harmless.  You can also run it as a normal user, but then
2146 you have to copy ~/.gnunet/gnunet.conf" over to the "gnunet" user's
2147 home directory in the end.
2148
2149 Once you have configured your peer, run (as the 'gnunet' user)
2150
2151   gnunet-arm -s
2152
2153 to start the peer.  You can then run the various GNUnet-tools as
2154 your "normal" user (who should only be in the group 'gnunet').
2155 ])