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