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