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