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