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