configure: remove windows specific checks.
[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
1573 # Check if the __thread storage class for
1574 # thread-local storage is available.
1575 AC_MSG_CHECKING(whether __thread is supported)
1576 AC_LINK_IFELSE(
1577 [AC_LANG_PROGRAM([#include <stdlib.h>
1578                    #undef __thread
1579                    static __thread int a = 1;],
1580                   [exit(a-1);])],
1581  [have_thread_local_gcc=1],[have_thread_local_gcc=0])
1582 AC_DEFINE_UNQUOTED([HAVE_THREAD_LOCAL_GCC],$have_thread_local_gcc,[Define this if __thread is supported])
1583 AS_IF([test "x$have_thread_local_gcc" = "x1"],
1584       [AC_MSG_RESULT(yes)],
1585       [AC_MSG_RESULT(no)])
1586
1587 # gcov compilation
1588 AC_MSG_CHECKING(whether to compile with support for code coverage analysis)
1589 AC_ARG_ENABLE([coverage],
1590               AS_HELP_STRING([--enable-coverage],
1591                              [compile the library with code coverage support]),
1592               [use_gcov=${enableval}],
1593               [use_gcov=no])
1594 AC_MSG_RESULT($use_gcov)
1595 AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
1596
1597
1598 # version info
1599 # TODO: git blame says this predates our switch to git.
1600 # git-svn should be adjusted to simply git, or
1601 # an external script that does the job.
1602 AC_PATH_PROG(svnversioncommand, svnversion)
1603 AC_PATH_PROG(gitcommand, git)
1604 AC_MSG_CHECKING(for source being under a VCS)
1605
1606
1607 # version info
1608 AC_PATH_PROG(gitcommand, git)
1609 AC_MSG_CHECKING(for source being under a VCS)
1610 git_version=
1611 AS_IF([test ! "X$gitcommand" = "X"],
1612 [
1613   git_version=$(cd $srcdir ; git rev-list --full-history --all --abbrev-commit | head -n 1 2>/dev/null)
1614 ])
1615 AS_IF([test "X$git_version" = "X"],
1616   [
1617     vcs_name="no"
1618     vcs_version="\"release\""
1619   ],
1620   [
1621     vcs_name="yes, git-svn"
1622     vcs_version="\"git-$git_version\""
1623   ])
1624 AC_MSG_RESULT($vcs_name)
1625
1626 AC_MSG_CHECKING(VCS version)
1627 AC_MSG_RESULT($vcs_version)
1628 AC_DEFINE_UNQUOTED(VCS_VERSION, [$vcs_version], [VCS revision/hash or tarball version])
1629
1630 AC_CONFIG_FILES([
1631 Makefile
1632 contrib/Makefile
1633 contrib/hellos/Makefile
1634 contrib/services/Makefile
1635 contrib/services/openrc/Makefile
1636 contrib/services/systemd/Makefile
1637 contrib/scripts/Makefile
1638 contrib/scripts/gnunet-logread/Makefile
1639 doc/Makefile
1640 doc/man/Makefile
1641 doc/doxygen/Makefile
1642 doc/handbook/Makefile
1643 doc/tutorial/Makefile
1644 lint/Makefile
1645 m4/Makefile
1646 po/Makefile.in
1647 src/Makefile
1648 src/arm/Makefile
1649 src/arm/arm.conf
1650 src/ats/Makefile
1651 src/ats/ats.conf
1652 src/ats-tool/Makefile
1653 src/ats-tests/Makefile
1654 src/auction/Makefile
1655 src/block/Makefile
1656 src/cadet/Makefile
1657 src/cadet/cadet.conf
1658 src/core/Makefile
1659 src/core/core.conf
1660 src/consensus/Makefile
1661 src/consensus/consensus.conf
1662 src/conversation/Makefile
1663 src/conversation/conversation.conf
1664 src/curl/Makefile
1665 src/datacache/Makefile
1666 src/datastore/Makefile
1667 src/datastore/datastore.conf
1668 src/dht/Makefile
1669 src/dht/dht.conf
1670 src/dns/Makefile
1671 src/dns/dns.conf
1672 src/exit/Makefile
1673 src/fragmentation/Makefile
1674 src/fs/Makefile
1675 src/fs/fs.conf
1676 src/gns/Makefile
1677 src/gns/gns.conf
1678 src/gns/nss/Makefile
1679 src/gnsrecord/Makefile
1680 src/hello/Makefile
1681 src/identity/Makefile
1682 src/identity/identity.conf
1683 src/credential/Makefile
1684 src/credential/credential.conf
1685 src/include/Makefile
1686 src/integration-tests/Makefile
1687 src/json/Makefile
1688 src/hostlist/Makefile
1689 src/my/Makefile
1690 src/mysql/Makefile
1691 src/namecache/Makefile
1692 src/namecache/namecache.conf
1693 src/namestore/Makefile
1694 src/namestore/namestore.conf
1695 src/nat/Makefile
1696 src/nat/nat.conf
1697 src/nat-auto/Makefile
1698 src/nat-auto/nat-auto.conf
1699 src/nse/Makefile
1700 src/nse/nse.conf
1701 src/nt/Makefile
1702 src/peerinfo/Makefile
1703 src/peerinfo/peerinfo.conf
1704 src/peerinfo-tool/Makefile
1705 src/peerstore/Makefile
1706 src/peerstore/peerstore.conf
1707 src/pq/Makefile
1708 src/pt/Makefile
1709 src/regex/Makefile
1710 src/regex/regex.conf
1711 src/revocation/Makefile
1712 src/revocation/revocation.conf
1713 src/rps/Makefile
1714 src/rps/rps.conf
1715 src/secretsharing/Makefile
1716 src/secretsharing/secretsharing.conf
1717 src/scalarproduct/Makefile
1718 src/scalarproduct/scalarproduct.conf
1719 src/set/Makefile
1720 src/set/set.conf
1721 src/sq/Makefile
1722 src/statistics/Makefile
1723 src/statistics/statistics.conf
1724 src/template/Makefile
1725 src/testbed/Makefile
1726 src/testbed/testbed.conf
1727 src/testbed-logger/Makefile
1728 src/testbed-logger/testbed-logger.conf
1729 src/testing/Makefile
1730 src/topology/Makefile
1731 src/transport/Makefile
1732 src/transport/transport.conf
1733 src/util/Makefile
1734 src/util/resolver.conf
1735 src/vpn/Makefile
1736 src/vpn/vpn.conf
1737 src/zonemaster/Makefile
1738 src/zonemaster/zonemaster.conf
1739 src/rest/Makefile
1740 src/abe/Makefile
1741 src/reclaim-attribute/Makefile
1742 src/reclaim/Makefile
1743 pkgconfig/Makefile
1744 pkgconfig/gnunetarm.pc
1745 pkgconfig/gnunetats.pc
1746 pkgconfig/gnunetblock.pc
1747 pkgconfig/gnunetcadet.pc
1748 pkgconfig/gnunetconsensus.pc
1749 pkgconfig/gnunetconversation.pc
1750 pkgconfig/gnunetcore.pc
1751 pkgconfig/gnunetdatacache.pc
1752 pkgconfig/gnunetdatastore.pc
1753 pkgconfig/gnunetdht.pc
1754 pkgconfig/gnunetdns.pc
1755 pkgconfig/gnunetenv.pc
1756 pkgconfig/gnunetfragmentation.pc
1757 pkgconfig/gnunetfs.pc
1758 pkgconfig/gnunetgns.pc
1759 pkgconfig/gnunethello.pc
1760 pkgconfig/gnunetidentity.pc
1761 pkgconfig/gnunetmicrophone.pc
1762 pkgconfig/gnunetmysql.pc
1763 pkgconfig/gnunetnamestore.pc
1764 pkgconfig/gnunetnat.pc
1765 pkgconfig/gnunetnse.pc
1766 pkgconfig/gnunetpeerinfo.pc
1767 pkgconfig/gnunetpq.pc
1768 pkgconfig/gnunetregex.pc
1769 pkgconfig/gnunetrevocation.pc
1770 pkgconfig/gnunetrps.pc
1771 pkgconfig/gnunetscalarproduct.pc
1772 pkgconfig/gnunetset.pc
1773 pkgconfig/gnunetspeaker.pc
1774 pkgconfig/gnunetstatistics.pc
1775 pkgconfig/gnunettestbed.pc
1776 pkgconfig/gnunettesting.pc
1777 pkgconfig/gnunettransport.pc
1778 pkgconfig/gnunetutil.pc
1779 pkgconfig/gnunetvpn.pc
1780 ])
1781 AC_OUTPUT
1782
1783
1784 # FIXME: `some modules' -> be more specific which exact modules.
1785
1786 # java ports
1787 AS_IF([test "x$enable_java_ports" = "xyes"],
1788       [AC_MSG_NOTICE([NOTICE: Opening ports for gnunet-java bindings by default.])])
1789
1790 ####
1791 #### Lasciate ogne speranza, voi ch'intrate
1792 ####
1793 #### This could be moved to the checks above,
1794 #### but for now let's keep it here.
1795 ####
1796
1797 # -- print message regarding enabled experimental features
1798 AS_IF([test "x$enable_experimental" = "xyes"],
1799       [experimental_msg="experimental features enabled"])
1800 # -- OSX Framework
1801 AS_IF([test "$enable_framework_build" = "yes"],
1802       [macosx_framework_msg="yes"],
1803       [macosx_framework_msg="no"])
1804 # -- libidn 2
1805 AS_IF([test "x$working_libidn2" = x1],
1806       [libidn2_msg="libidn2"])
1807 # -- libidn 1
1808 AS_IF([test "x$working_libidn1" = x1],
1809       [libidn1_msg="libidn1"])
1810 # -- texi2mdoc
1811 AS_IF([test "x$texi2mdoc_generation" = x1],
1812       [mdoc_msg="yes"],
1813       [mdoc_msg="no"])
1814 # -- texinfo
1815 AS_IF([test "x$makeinfo" != "x1"],
1816       [texinfo_msg="no"],
1817       [texinfo_msg="yes"])
1818 # -- conversation
1819 AS_IF([test "x$conversation_backend" = "xnone"],
1820       [AS_IF([test "x$pulse" != "x1"],
1821              [AC_MSG_NOTICE([WARNING: libpulse(audio) not found, conversation will not be built.])
1822               libpulse_msg="no"],
1823              [libpulse_msg="yes"])
1824        AS_IF([test "x$opus" != "x1"],
1825              [AC_MSG_NOTICE([WARNING: libopus not found, conversation will not be built.])
1826               libopus_msg="no"],
1827              [libopus_msg="yes"])
1828        AS_IF([test "x$gst" != "x1"],
1829              [AC_MSG_NOTICE([WARNING: GStreamer not found, conversation will not be built.])
1830               gstreamer_msg="no"],
1831              [gstreamer_msg="yes"])],
1832       [features_msg="$features_msg conversation"])
1833 # -- interface
1834 interface_msg=`echo $DEFAULT_INTERFACE | tr -d \"`
1835 # -- libmicrohttpd
1836 AS_IF([test "x$lmhd" != "x1"],
1837       [libmicrohttpd_msg="no (optional)"],
1838       [libmicrohttpd_msg="yes"])
1839 # -- jansson
1840 AS_IF([test "x$jansson" = "x0"],
1841       [jansson_msg="no (optional)"],
1842       [jansson_msg="yes"])
1843 # -- libextractor
1844 AS_IF([test "$extractor" != 1],
1845       [AC_MSG_WARN([ERROR: libextractor not found, but various file-sharing functions require it])],
1846       [libextractor_msg="yes"])
1847 # -- libzbar
1848 AS_IF([test "x$zbar" = "x1"],
1849       [libzbar_msg="yes"
1850        features_msg="$features_msg gnunet-qr"],
1851       [AC_MSG_NOTICE([WARNING: zbar not found, gnunet-qr will not be built.])
1852        libzbar_msg="no"])
1853 # -- libgnurl
1854 AS_IF([test "$gnurl" = "0"],
1855       [AS_IF([test "x$curl" = "xfalse"],
1856              [AC_MSG_NOTICE([WARNING: libgnurl not found. http client support will not be compiled.])
1857               AC_MSG_WARN([ERROR: libgnurl not found. hostlist daemon will not be compiled, and you probably WANT the hostlist daemon])
1858               curl_msg="no"],
1859              [AC_MSG_NOTICE([WARNING: libgnurl not found, trying to use libcurl-gnutls instead.])
1860               curl_msg="yes"])],
1861        [gnurl_msg="yes"])
1862 # -- ifconfig
1863 AS_IF([test "$VAR_IFCONFIG_BINARY" = "false"],
1864       [AC_MSG_NOTICE([WARNING: optional ifconfig not found])
1865        ifconfig_msg="no (optional)"],
1866       [ifconfig_msg="yes"])
1867 # -- upnpc
1868 AS_IF([test "$VAR_UPNPC_BINARY" = "false"],
1869       [AC_MSG_NOTICE([WARNING: optional upnpc binary not found])
1870        upnpc_msg="no (optional)"],
1871       [upnpc_msg="yes"])
1872 # -- iptables
1873 AS_IF([test "$VAR_IPTABLES_BINARY" = "false"],
1874       [AC_MSG_NOTICE([WARNING: optional iptables not found])
1875        iptables_msg="no (optional)"],
1876       [iptables_msg="yes"])
1877 # -- bluetooth
1878 AS_IF([test "x$bluetooth" = "x0"],
1879       [AC_MSG_NOTICE([WARNING: optional bluetooth library not found.])
1880        bluetooth_msg="no (optional)"],
1881       [bluetooth_msg="yes"])
1882 # -- gnutls
1883 AS_IF([test x$gnutls != xtrue],
1884       [AC_MSG_NOTICE([WARNING: GnuTLS not found, gnunet-gns-proxy will not be built])
1885        gnutls_msg="no"],
1886       [AS_IF([test "x$gnutls_dane" != "x1"],
1887              [AC_MSG_NOTICE([WARNING: GnuTLS has no DANE support, DANE validation will not be possible])
1888               gnutls_msg="yes (without DANE support)"],
1889              [gnutls_msg="yes (with DANE support)"])])
1890 # -- databases
1891 AS_IF([test $mysqlfail = true]
1892       [AC_MSG_NOTICE([WARNING: optional MySQL not found (or too old)])])
1893 AS_IF([test "$mysql" = true],
1894       [features_msg="$features_msg mysql"
1895        mysql_msg="yes"],
1896       [mysql_msg="no"])
1897 AS_IF([test "$sqlite" = true],
1898       [features_msg="$features_msg sqlite"
1899        sqlite_msg="yes"],
1900       [AC_MSG_ERROR([ERROR: sqlite3 not found, but sqlite3 is required.])
1901        sqlite_msg="no"])
1902 AS_IF([test "$postgres" = true],
1903       [features_msg="$features_msg postgres"
1904        postgres_msg="yes"],
1905       [postgres_msg="no"])
1906 # -- features
1907 # ---- 1. replace spaces with newlines,
1908 # ---- 2. sort the lines,
1909 # ---- 3. replace the newlines with spaces.
1910 features_msg=`echo $features_msg | tr ' ' '\012' | sort | tr '\012' ' '`
1911 AC_SUBST(features_msg)
1912
1913
1914 # The summary
1915 # TODO: reduce the length of the last message block ("the message")
1916
1917 AC_MSG_NOTICE([
1918 GNUnet Configuration (incomplete!)
1919
1920 gnunet version:                 ${VERSION}
1921
1922 Host setup:                     ${host}
1923 Install prefix:                 ${prefix}
1924 Compiler:                       ${CC}
1925 CFLAGS:                         ${CFLAGS}
1926 CPPFLAGS:                       ${CPPFLAGS}
1927 LDFLAGS:                        ${LDFLAGS}
1928 LIBS:                           ${LIBS}
1929 Build Target:                   $build_target
1930 Mac OSX framework build:        ${macosx_framework_msg}
1931
1932 Default Interface:              ${interface_msg}
1933
1934 MySQL:                          ${mysql_msg}
1935 PostgreSQL:                     ${postgres_msg}
1936 sqlite3:                        ${sqlite_msg}
1937 gnurl:                          ${gnurl_msg}
1938 curl:                           ${curl_msg}
1939 bluetooth:                      ${bluetooth_msg}
1940 jansson:                        ${jansson_msg}
1941 iptables:                       ${iptables_msg}
1942 ifconfig:                       ${ifconfig_msg}
1943 upnpc:                          ${upnpc_msg}
1944 gnutls:                         ${gnutls_msg}
1945 libzbar:                        ${libzbar_msg}
1946 java:                           ${java_msg}
1947 libmicrohttpd:                  ${libmicrohttpd_msg}
1948 libidn:                         ${libidn1_msg}${libidn2_msg}
1949 libopus:                        ${libopus_msg}
1950 gstreamer:                      ${gstreamer_msg}
1951 libpulse:                       ${libpulse_msg}
1952 libextractor:                   ${libextractor_msg}
1953
1954 texinfo manual:                 ${texinfo_msg}
1955 transpiled mdoc manual:         ${mdoc_msg}
1956
1957 features:                       ${features_msg}
1958 experimental:                   ${experimental_msg}
1959
1960
1961 IMPORTANT:
1962
1963 Please make sure NOW that you have created a user and group 'gnunet'
1964 and additionally a group 'gnunetdns'. On Debian and Ubuntu GNU/Linux,
1965 type:
1966
1967   addgroup gnunetdns
1968   adduser --system --group --disabled-login --home /var/lib/gnunet gnunet
1969
1970 Make sure that '/var/lib/gnunet' is owned (and writable) by user
1971 'gnunet'.  Then, you can compile GNUnet with
1972
1973   make
1974
1975 After that, run (if necessary as 'root')
1976
1977   make install
1978
1979 to install everything.
1980
1981 Each GNUnet user should be added to the 'gnunet' group (may
1982 require fresh login to come into effect):
1983
1984   adduser USERNAME gnunet
1985
1986 (run the above command as root once for each of your users, replacing
1987 "USERNAME" with the respective login names).  If you have a global IP
1988 address, no further configuration is required.
1989
1990 For more detailed setup instructions, see https://docs.gnunet.org/
1991
1992 Optionally, download and compile gnunet-gtk to get a GUI for
1993 file-sharing and configuration.  This is particularly recommended
1994 if your network setup is non-trivial, as gnunet-setup can be
1995 used to test in the GUI if your network configuration is working.
1996 gnunet-setup should be run as the "gnunet" user under X.  As it
1997 does very little with the network, running it as "root" is likely
1998 also harmless.  You can also run it as a normal user, but then
1999 you have to copy ~/.gnunet/gnunet.conf" over to the "gnunet" user's
2000 home directory in the end.
2001
2002 Once you have configured your peer, run (as the 'gnunet' user)
2003
2004   gnunet-arm -s
2005
2006 to start the peer.  You can then run the various GNUnet-tools as
2007 your "normal" user (who should only be in the group 'gnunet').
2008 ])