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