use AS_CASE/AS_IF
[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 if test "x$taler_only" = "xyes"
792 then
793   AM_CONDITIONAL([TALER_ONLY],true)
794   AC_DEFINE([TALER_WALLET_ONLY],[1],[Compiling for Taler wallet])
795 else
796   AM_CONDITIONAL([TALER_ONLY],false)
797   AC_DEFINE([TALER_WALLET_ONLY],[0],[Canonical compilation])
798 fi
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     case $with_extractor in
807       no)
808         ;;
809       yes)
810         AC_CHECK_HEADERS([extractor.h],
811           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
812             extractor=1))
813         ;;
814       *)
815         LDFLAGS="-L$with_extractor/lib $LDFLAGS"
816         CPPFLAGS="-I$with_extractor/include $CPPFLAGS"
817         AC_CHECK_HEADERS([extractor.h],
818           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
819             EXT_LIB_PATH="-L$with_extractor/lib $EXT_LIB_PATH"
820             extractor=1))
821         ;;
822     esac
823    ],
824    [AC_MSG_RESULT([--with-extractor not specified])
825     AC_CHECK_HEADERS([extractor.h],
826      AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
827       extractor=1))])
828 # restore LIBS
829 LIBS=$SAVE_LIBS
830
831 if test "$extractor" != 1
832 then
833  AM_CONDITIONAL(HAVE_LIBEXTRACTOR, false)
834  AC_DEFINE([HAVE_LIBEXTRACTOR],[0],[Lacking libextractor])
835 else
836  AM_CONDITIONAL(HAVE_LIBEXTRACTOR, true)
837  AC_DEFINE([HAVE_LIBEXTRACTOR],[1],[Have libextractor])
838 fi
839
840
841 if test "$taler_only" != yes
842 then
843
844 # Check for libltdl header (#2999)
845 ltdl=0
846 AC_MSG_CHECKING(for libltdl)
847 AC_ARG_WITH(ltdl,
848    [  --with-ltdl=PFX    base of libltdl installation],
849    [AC_MSG_RESULT([$with_ltdl])
850     case $with_ltdl in
851       no)
852         ;;
853       yes)
854         AC_CHECK_HEADERS(ltdl.h,
855           AC_CHECK_LIB([ltdl], [lt_dlopenext],
856             ltdl=1))
857         ;;
858       *)
859         LDFLAGS="-L$with_ltdl/lib $LDFLAGS"
860         CPPFLAGS="-I$with_ltdl/include $CPPFLAGS"
861         AC_CHECK_HEADERS(ltdl.h,
862           AC_CHECK_LIB([ltdl], [lt_dlopenext],
863             EXT_LIB_PATH="-L$with_ltdl/lib $EXT_LIB_PATH"
864             ltdl=1))
865         ;;
866     esac
867    ],
868    [AC_MSG_RESULT([--with-ltdl not specified])
869     AC_CHECK_HEADERS(ltdl.h,
870      AC_CHECK_LIB([ltdl], [lt_dlopenext],
871       ltdl=1))])
872 if test x$ltdl = x1
873 then
874  AC_MSG_RESULT([libltdl found])
875 else
876  AC_MSG_ERROR([GNUnet requires libltdl (from GNU libtool), try installing libltdl-dev])
877 fi
878 # restore LIBS
879 LIBS=$SAVE_LIBS
880
881 # libidn and libidn2. The ideal goal is this:
882 # check for libidn2, if it doesn't exist check for libidn
883 # if both exist, prefer libidn2
884 # if none exist, fail and message that libidn or libidn2
885 # is required with a preference for libidn2.
886 # TODO: What we have right here can probably be improved.
887 my_with_libidn=1
888 AC_ARG_WITH(libidn,
889             AS_HELP_STRING([--with-libidn=pathname],
890                            [Support IDN (needs libidn)]),
891             [],
892             [withval="yes"])
893 AS_IF([test x_$withval = x_yes],
894       [AC_CHECK_HEADERS([idna.h],
895           AC_MSG_NOTICE([Found idna.h]),
896           AC_CHECK_HEADERS([idn/idna.h],
897                AC_MSG_NOTICE([Found idn/idna.h]),
898                my_with_libidn=0))],
899       [AS_IF([test x_$withval != x_no],
900              [CFLAGS="$CFLAGS -I$withval/include"
901               LDFLAGS="$LDFLAGS -L$withval/lib"
902               AC_CHECK_HEADERS([idna.h],
903                 AC_MSG_NOTICE([Found idna.h]),
904                 [AC_MSG_NOTICE([Failed to find idna.h])
905                  my_with_libidn=0])],
906              [my_with_libidn=0])])
907
908 my_with_libidn2=1
909 AC_ARG_WITH(libidn2,
910             AS_HELP_STRING([--with-libidn2=pathname],
911                            [Support IDN (needs libidn2)]),
912             [],
913             [withval="yes"])
914 AS_IF([test x_$withval = x_yes],
915       [AC_CHECK_HEADERS([idn2.h],
916        AC_MSG_NOTICE([Found idn2.h]),
917        AC_CHECK_HEADERS([idn2/idn2.h],
918           AC_MSG_NOTICE([Found idn2/idn2.h]),
919           [AC_MSG_NOTICE([Failed to find idn2.h])
920            my_with_libidn2=0]))],
921       [AS_IF([test x_$withval != x_no],
922              [CFLAGS="$CFLAGS -I$withval/include"
923               LDFLAGS="$LDFLAGS -L$withval/lib"],
924              [my_with_libidn2=0])])
925
926 AC_MSG_CHECKING([if libidn can be used])
927 # Check for LIBIDNs
928 there_can_only_be_one=1
929
930 working_libidn1=0
931 working_libidn2=0
932 AS_IF([test x$my_with_libidn2 = x1],
933       [AC_MSG_NOTICE([Checking for libidn2])
934        AC_CHECK_LIB([idn2],
935                     [idn2_to_unicode_8z8z],
936                     [working_libidn2=1
937                     LIBS="-lidn2 $LIBS"
938                     AC_DEFINE_UNQUOTED([HAVE_LIBIDN2],
939                                        [1],
940                                         [Define to 1 if you have 'libidn2' (-lidn2).])],
941                      [MISSING_DEPS="${MISSING_DEPS}${MISSING_SEP}libidn2"
942                      MISSING_SEP=", "])])
943 AM_CONDITIONAL(HAVE_LIBIDN2, test x$working_libidn2 = x1)
944 AS_IF([test x$working_libidn2 = x0],
945       [AS_IF([test x$my_with_libidn = x1],
946              [AC_MSG_NOTICE([Checking for libidn])
947               AC_CHECK_LIB([idn],
948                            [idna_to_ascii_8z],
949                            [working_libidn1=1
950                            LIBS="-lidn $LIBS"
951                              AC_DEFINE_UNQUOTED([HAVE_LIBIDN],
952                                                 [1],
953                                                 [Define to 1 if you have 'libidn' (-lidn).])],
954                              [there_can_only_be_one=0])],
955              [AS_IF([test x$my_with_libidn2 = x1],
956                     [there_can_only_be_one=0
957                      AC_MSG_FAILURE([* There can only be one libidn.
958                                      * Provide either libidn >= 1.13
959                                      * or
960                                      * libidn2 to the configure
961                                      * script via
962                                      * --with-libidn2
963                                      * --with-libidn])])])])
964 AM_CONDITIONAL(HAVE_LIBIDN, test x$working_libidn1 = x1)
965
966 AS_IF([test "$working_libidn1" = 0 -a "$working_libidn2" = 0],
967       [AC_MSG_ERROR([GNUnet requires libidn (or libidn2)])])
968
969 AS_IF([test x$there_can_only_be_one = x0],
970       [AC_MSG_FAILURE([Missing dependencies: $MISSING_DEPS])])
971
972 # test for zlib
973 SAVE_LDFLAGS=$LDFLAGS
974 SAVE_CPPFLAGS=$CPPFLAGS
975 AC_ARG_WITH(zlib,
976             [  --with-zlib[[=DIR]]       use libz in DIR],
977             [AS_IF([test "$withval" = "no"],
978                    [AC_MSG_ERROR([GNUnet requires zlib])],
979                    [test "$withval" != "yes"],
980                    [
981                      Z_DIR=$withval
982                      CPPFLAGS="${CPPFLAGS} -I$withval/include"
983                      LDFLAGS="${LDFLAGS} -L$withval/lib"
984                    ])
985             ])
986 AC_CHECK_HEADER(zlib.h,
987                 [],
988                 [AC_MSG_ERROR([GNUnet requires zlib])])
989 AC_CHECK_LIB(z, compress2,
990              [
991               AC_DEFINE([HAVE_ZLIB], [], [Have compression library])
992               if test "x${Z_DIR}" != "x"; then
993                       Z_CFLAGS="-I${Z_DIR}/include"
994                       Z_LIBS="-L${Z_DIR}/lib -lz"
995               else
996                       Z_LIBS="-lz"
997               fi],
998               [AC_MSG_ERROR([GNUnet requires zlib])])
999 AC_SUBST(Z_CFLAGS)
1000 AC_SUBST(Z_LIBS)
1001
1002 if test "$enable_shared" = "no"
1003 then
1004  AC_MSG_ERROR([GNUnet only works with shared libraries. Sorry.])
1005 fi
1006
1007
1008
1009 # restore LIBS
1010 LIBS=$SAVE_LIBS
1011
1012
1013 fi
1014
1015 # check for iconv
1016 AM_ICONV
1017
1018 # test for libunistring
1019 gl_LIBUNISTRING
1020 if test $HAVE_LIBUNISTRING != yes; then
1021  AC_MSG_ERROR([GNUnet requires libunistring])
1022 fi
1023 # under emscripten, $gl_libunistring_hexversion is undefined
1024 if test "$taler_only" != yes; then
1025 if test "x$gl_libunistring_hexversion" = "x" || test "$gl_libunistring_hexversion" -le 2305; then
1026  AC_MSG_ERROR([GNUnet requires libunistring >= 0.9.1.1])
1027 fi
1028 fi
1029 AC_CHECK_HEADERS([unistr.h],,AC_MSG_ERROR([Compiling GNUnet requires unistr.h (from libunistring) to be installed]))
1030
1031 # restore LIBS
1032 LIBS=$SAVE_LIBS
1033
1034
1035
1036 # Checks for standard header files.
1037 AC_HEADER_DIRENT
1038 AC_HEADER_STDC
1039
1040 # Check for headers that are ALWAYS required
1041 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]))
1042
1043
1044
1045 # Checks for headers that are only required on some systems or opional (and where we do NOT abort if they are not there)
1046 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])
1047
1048 # FreeBSD requires something more funky for netinet/in_systm.h and netinet/ip.h...
1049 AC_CHECK_HEADERS([sys/types.h netinet/in_systm.h netinet/in.h netinet/ip.h],,,
1050 [#ifdef HAVE_SYS_TYPES_H
1051 #include <sys/types.h>
1052 #endif
1053 #ifdef HAVE_NETINET_IN_SYSTM_H
1054 #include <netinet/in_systm.h>
1055 #endif
1056 #ifdef HAVE_NETINET_IN_H
1057 #include <netinet/in.h>
1058 #endif
1059 ])
1060
1061 SAVE_LDFLAGS=$LDFLAGS
1062 SAVE_CPPFLAGS=$CPPFLAGS
1063
1064 # test for sqlite
1065 sqlite=false
1066 AC_MSG_CHECKING(for SQLite)
1067 AC_ARG_WITH(sqlite,
1068   [  --with-sqlite=PFX       base of SQLite installation],
1069   [AC_MSG_RESULT("$with_sqlite")
1070    case $with_sqlite in
1071    no)
1072      ;;
1073    yes)
1074     AC_CHECK_HEADERS(sqlite3.h,
1075      sqlite=true)
1076      ;;
1077    *)
1078     LDFLAGS="-L$with_sqlite/lib $LDFLAGS"
1079     CPPFLAGS="-I$with_sqlite/include $CPPFLAGS"
1080     AC_CHECK_HEADERS(sqlite3.h,
1081      EXT_LIB_PATH="-L$with_sqlite/lib $EXT_LIB_PATH"
1082      SQLITE_LDFLAGS="-L$with_sqlite/lib"
1083      SQLITE_CPPFLAGS="-I$with_sqlite/include"
1084      sqlite=true)
1085     LDFLAGS=$SAVE_LDFLAGS
1086     CPPFLAGS=$SAVE_CPPFLAGS
1087     ;;
1088    esac
1089   ],
1090   [AC_MSG_RESULT([--with-sqlite not specified])
1091     AC_CHECK_HEADERS(sqlite3.h, sqlite=true)])
1092 AM_CONDITIONAL(HAVE_SQLITE, test x$sqlite = xtrue)
1093 AC_SUBST(SQLITE_CPPFLAGS)
1094 AC_SUBST(SQLITE_LDFLAGS)
1095
1096 LDFLAGS=$SAVE_LDFLAGS
1097 CPPFLAGS=$SAVE_CPPFLAGS
1098
1099 # test for postgres
1100 postgres=false
1101 # even running the check for postgres breaks emscripten ...
1102 AS_IF([test "$taler_only" != yes],
1103       [AX_LIB_POSTGRESQL([9.5],
1104         [CPPFLAGS="$CPPFLAGS $POSTGRESQL_CPPFLAGS"
1105          AC_CHECK_HEADERS([libpq-fe.h],
1106          postgres=true)
1107         ],
1108         [AC_MSG_RESULT([no postgres])])])
1109 AM_CONDITIONAL(HAVE_POSTGRESQL, test x$postgres = xtrue)
1110
1111
1112 LDFLAGS=$SAVE_LDFLAGS
1113 CPPFLAGS=$SAVE_CPPFLAGS
1114
1115 # mysql & windows
1116 AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include <sys/types.h>])
1117 AC_CHECK_TYPES([size_t], [], [], [#include <stdio.h>])
1118
1119 if test "$build_target" = "mingw"
1120 then
1121   CYGWIN_MYSQL_MAGIC="#include <mysql/my_global.h>"
1122 fi
1123
1124 # test for mysql
1125 mysql=false
1126 mysqlfail=false
1127 SAVE_LDFLAGS=$LDFLAGS
1128 SAVE_CPPFLAGS=$CPPFLAGS
1129 AC_MSG_CHECKING(for mysql)
1130 AC_ARG_WITH(mysql,
1131   [  --with-mysql=PFX        base of MySQL installation],
1132   [AC_MSG_RESULT([$with_mysql])
1133    case $with_mysql in
1134    no)
1135       ;;
1136    yes|"")
1137       AC_CHECK_HEADERS(mysql/mysql.h,
1138        AC_CHECK_LIB(mysqlclient, mysql_init,
1139
1140        mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
1141       ;;
1142    *)
1143       LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql $LDFLAGS $ZLIBS"
1144       CPPFLAGS="-I$with_mysql/include $CPPFLAGS"
1145       AC_CHECK_HEADERS(mysql/mysql.h,
1146        AC_CHECK_LIB(mysqlclient, mysql_init,
1147         MYSQL_LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql"
1148         MYSQL_CPPFLAGS="-I$with_mysql/include"
1149
1150         mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
1151       ;;
1152    esac
1153   ],
1154   [AC_MSG_RESULT([--with-mysql not specified])
1155    if test -d "/usr/lib64/mysql"; then
1156     MYSQL_LIBDIR="/usr/lib64/mysql"
1157    elif test -d "/usr/lib/mysql"; then
1158     MYSQL_LIBDIR="/usr/lib/mysql"
1159    else
1160     MYSQL_LIBDIR="/usr/lib"
1161    fi
1162    LDFLAGS="-L$MYSQL_LIBDIR $LDFLAGS $ZLIBS"
1163    AC_CHECK_LIB(mysqlclient, mysql_init,
1164     [AC_CHECK_HEADERS(mysql/mysql.h,
1165       MYSQL_LDFLAGS="-L$MYSQL_LIBDIR"
1166       mysql=true
1167
1168      , [], [$CYGWIN_MYSQL_MAGIC])])
1169   ])
1170
1171 AC_SUBST(MYSQL_LDFLAGS)
1172 AC_SUBST(MYSQL_CPPFLAGS)
1173
1174 # additional version check for mysql
1175 AC_ARG_ENABLE(mysql-version-check, [  --disable-mysql-version-check  do not check MySQL version],, enable_mysql_version_check=yes)
1176 if test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes"
1177 then
1178   AC_MSG_CHECKING(mysql version)
1179   AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1180     [[$CYGWIN_MYSQL_MAGIC
1181       #include <mysql/mysql.h>]],
1182     [[
1183       #if (MYSQL_VERSION_ID < 40100)
1184       #error needs at least version >= 4.1
1185       #endif
1186       int main () { return 0; }
1187     ]])
1188     ],mysql=true,mysql=false)
1189   if test "$mysql" = "false"
1190   then
1191     mysqlfail=true
1192     AC_MSG_RESULT([fail, >= 4.1 required])
1193   else
1194     AC_MSG_RESULT(ok)
1195   fi
1196 fi
1197 AM_CONDITIONAL(HAVE_MYSQL, test x$mysql = xtrue)
1198 AM_CONDITIONAL(HAVE_MYSQLE, false)
1199 # restore LIBS
1200 LIBS=$SAVE_LIBS
1201 LDFLAGS=$SAVE_LDFLAGS
1202 CPPFLAGS=$SAVE_CPPFLAGS
1203
1204 if test "$sqlite" = 0 -a "$mysql" = 0
1205 then
1206  AC_MSG_ERROR([GNUnet requires SQLite or MySQL])
1207 fi
1208
1209 # libmicrohttpd
1210 lmhd=0
1211 AC_MSG_CHECKING([for libmicrohttpd])
1212 AC_ARG_WITH(microhttpd,
1213    [  --with-microhttpd=PFX   base of libmicrohttpd installation],
1214    [AC_MSG_RESULT([$with_microhttpd])
1215     case $with_microhttpd in
1216       no)
1217         ;;
1218       yes|"")
1219         AC_CHECK_HEADERS([microhttpd.h],
1220           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
1221             AC_CHECK_LIB([microhttpd], [MHD_get_fdset2],
1222               [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.63])
1223               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1224                 #include "$native_srcdir/src/include/platform.h"
1225                 #include <microhttpd.h>
1226                 #if (MHD_VERSION < 0x0096300)
1227                 #error needs at least version 0.9.63
1228                 #endif
1229                 int main () { return 0; }
1230                ])],
1231                [AC_MSG_RESULT(ok)
1232                 lmhd=1],
1233                [AC_MSG_RESULT(failed)])]),
1234             [],[#include "$native_srcdir/src/include/platform.h"
1235                 #include <microhttpd.h>]),,
1236             [#include "$native_srcdir/src/include/platform.h"])
1237         ;;
1238       *)
1239         LDFLAGS="-L$with_microhttpd/lib $LDFLAGS"
1240         CPPFLAGS="-I$with_microhttpd/include $CPPFLAGS"
1241         AC_CHECK_HEADERS(microhttpd.h,
1242           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
1243             AC_CHECK_LIB([microhttpd], [MHD_get_fdset2],
1244               EXT_LIB_PATH="-L$with_microhttpd/lib $EXT_LIB_PATH"
1245               [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.52])
1246                AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1247                 #include "$native_srcdir/src/include/platform.h"
1248                 #include <microhttpd.h>
1249                 #if (MHD_VERSION < 0x0094200)
1250                 #error needs at least version 0.9.42
1251                 #endif
1252                 int main () { return 0; }
1253                ])],
1254                [AC_MSG_RESULT(ok)
1255                 lmhd=1],
1256                [AC_MSG_RESULT(failed)])]),
1257             [],[#include "$native_srcdir/src/include/platform.h"
1258                 #include <microhttpd.h>]),,
1259             [#include "$native_srcdir/src/include/platform.h"])
1260         ;;
1261     esac
1262    ],
1263    [AC_MSG_RESULT([--with-microhttpd not specified])
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           [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.52])
1268               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1269                 #include "$native_srcdir/src/include/platform.h"
1270                 #include <microhttpd.h>
1271                 #if (MHD_VERSION < 0x0094200)
1272                 #error needs at least version 0.9.52
1273                 #endif
1274                ])],
1275                [AC_MSG_RESULT(ok)
1276                 lmhd=1],
1277                [AC_MSG_RESULT(failed)])]),
1278         [],[#include "$native_srcdir/src/include/platform.h"
1279             #include <microhttpd.h>]),,
1280        [#include "$native_srcdir/src/include/platform.h"])])
1281 AM_CONDITIONAL(HAVE_MHD, test x$lmhd = x1)
1282 AC_DEFINE_UNQUOTED([HAVE_MHD], $lmhd, [We have libmicrohttpd])
1283
1284 AM_CONDITIONAL(HAVE_JSON, [test x$jansson = x1])
1285
1286 # restore LIBS
1287 LIBS=$SAVE_LIBS
1288
1289 # check for gettext
1290 AM_GNU_GETTEXT([external])
1291 AM_GNU_GETTEXT_VERSION([0.18.1])
1292
1293 # Checks for standard typedefs, structures, and compiler characteristics.
1294 AC_TYPE_PID_T
1295 AC_TYPE_SIZE_T
1296 AC_TYPE_MODE_T
1297 AC_HEADER_TIME
1298 AC_HEADER_STAT
1299 AC_HEADER_STDBOOL
1300 AC_STRUCT_TM
1301
1302 AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
1303    [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
1304    ],
1305    [],
1306    [
1307       #include <sys/types.h>
1308       #include <sys/socket.h>
1309       #include <netinet/in.h>
1310    ])
1311
1312 AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
1313    [ AC_DEFINE(HAVE_SOCKADDR_UN_SUN_LEN, 1, [Do we have sockaddr_un.sun_len?])
1314    ],
1315    [],
1316    [
1317       #include <sys/types.h>
1318       #include <sys/socket.h>
1319       #include <sys/un.h>
1320    ])
1321
1322
1323
1324 # Checks for library functions.
1325 AC_FUNC_CLOSEDIR_VOID
1326 AC_FUNC_FORK
1327 AC_PROG_GCC_TRADITIONAL
1328 AC_FUNC_MEMCMP
1329 AC_FUNC_SELECT_ARGTYPES
1330 AC_FUNC_CHOWN
1331
1332 AC_TYPE_SIGNAL
1333 AC_FUNC_STAT
1334 AC_FUNC_STRFTIME
1335 AC_FUNC_VPRINTF
1336 AC_HEADER_SYS_WAIT
1337 AC_TYPE_OFF_T
1338 AC_TYPE_UID_T
1339 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])
1340
1341 # restore LIBS
1342 LIBS=$SAVE_LIBS
1343
1344 GN_INTLINCL=""
1345 GN_LIBINTL="$LTLIBINTL"
1346 AC_ARG_ENABLE(framework, [  --enable-framework      enable Mac OS X framework build helpers],enable_framework_build=$enableval)
1347 AM_CONDITIONAL(WANT_FRAMEWORK, test x$enable_framework_build = xyes)
1348 if test x$enable_framework_build = xyes
1349 then
1350   AC_DEFINE([FRAMEWORK_BUILD], 1, [Build a Mac OS X Framework])
1351   GN_INTLINCL='-I$(top_srcdir)/src/intlemu'
1352   GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation'
1353   AC_LIB_APPENDTOVAR([CPPFLAGS], [$GN_INTLINCL])
1354 fi
1355
1356 GN_LIB_LDFLAGS="-export-dynamic -no-undefined"
1357 GN_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined"
1358
1359 AC_SUBST(GN_LIB_LDFLAGS)
1360 AC_SUBST(GN_PLUGIN_LDFLAGS)
1361 AC_SUBST(GN_INTLINCL)
1362 AC_SUBST(GN_LIBINTL)
1363
1364 AC_SUBST(CPPFLAGS)
1365 AC_SUBST(LIBS)
1366 AC_SUBST(LDFLAGS)
1367 AC_SUBST(EXT_LIB_PATH)
1368 AC_SUBST(EXT_LIBS)
1369
1370 AC_SUBST(LIBPREFIX)
1371 AC_SUBST(DLLDIR)
1372 AC_SUBST(EXT_LIB_PATH)
1373
1374 DATAROOTDIR=$datarootdir
1375 AC_SUBST(DATAROOTDIR)
1376
1377 # test for sudo
1378 # TODO: do we need to change anything for "doas" on openbsd?
1379 AC_MSG_CHECKING(for sudo)
1380 AC_ARG_WITH(sudo,
1381   [  --with-sudo=PATH       path to sudo binary (or just yes)],
1382   [AC_MSG_RESULT("$with_sudo")
1383    case $with_sudo in
1384    no)
1385      SUDO_BINARY=
1386      ;;
1387    yes)
1388      SUDO_BINARY=sudo
1389      ;;
1390    *)
1391      SUDO_BINARY=$with_sudo
1392     ;;
1393    esac
1394   ],
1395   [AC_MSG_RESULT([no])])
1396 AC_SUBST(SUDO_BINARY)
1397 AM_CONDITIONAL([HAVE_SUDO], [test "x$SUDO_BINARY" != "x" -o -w /])
1398
1399
1400 # test for gnunetdns group name
1401 GNUNETDNS_GROUP=gnunetdns
1402 AC_MSG_CHECKING(for gnunetdns group name)
1403 AC_ARG_WITH(gnunetdns,
1404   [  --with-gnunetdns=GRPNAME       name for gnunetdns group],
1405   [AC_MSG_RESULT("$with_gnunetdns")
1406    case $with_gnunetdns in
1407    no)
1408      GNUNETDNS_GROUP=gnunet
1409      ;;
1410    yes)
1411      GNUNETDNS_GROUP=gnunetdns
1412      ;;
1413    *)
1414      GNUNETDNS_GROUP=$with_gnunetdns
1415     ;;
1416    esac
1417   ],
1418   [AC_MSG_RESULT([gnunetdns])])
1419 AC_SUBST(GNUNETDNS_GROUP)
1420
1421
1422
1423 # gnutls
1424 gnutls=0
1425 gnutls_dane=0
1426 AC_MSG_CHECKING(for gnutls)
1427 AC_ARG_WITH(gnutls,
1428    [  --with-gnutls=PFX   base of gnutls installation],
1429    [AC_MSG_RESULT([$with_gnutls])
1430     case $with_gnutls in
1431       no)
1432         ;;
1433       yes)
1434         AC_CHECK_HEADERS([gnutls/abstract.h],
1435             AC_CHECK_LIB([gnutls], [gnutls_priority_set],
1436              gnutls=true))
1437         AC_CHECK_HEADERS([gnutls/dane.h],
1438             AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
1439               gnutls_dane=1))
1440         ;;
1441       *)
1442         LDFLAGS="-L$with_gnutls/lib $LDFLAGS"
1443         CPPFLAGS="-I$with_gnutls/include $CPPFLAGS"
1444         AC_CHECK_HEADERS([gnutls/abstract.h],
1445             AC_CHECK_LIB([gnutls], [gnutls_priority_set],
1446               EXT_LIB_PATH="-L$with_gnutls/lib $EXT_LIB_PATH"
1447               gnutls=true))
1448         AC_CHECK_HEADERS([gnutls/dane.h],
1449             AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
1450               gnutls_dane=1))
1451         ;;
1452     esac
1453    ],
1454    [AC_MSG_RESULT([--with-gnutls not specified])
1455     AC_CHECK_HEADERS([gnutls/abstract.h],
1456         AC_CHECK_LIB([gnutls], [gnutls_priority_set],
1457           gnutls=true))
1458     AC_CHECK_HEADERS([gnutls/dane.h],
1459         AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
1460                      gnutls_dane=1))
1461    ])
1462 AM_CONDITIONAL(HAVE_GNUTLS, test x$gnutls = xtrue)
1463 AC_DEFINE_UNQUOTED([HAVE_GNUTLS], $gnutls, [We have GnuTLS])
1464 AM_CONDITIONAL(HAVE_GNUTLS_DANE, test x$gnutls_dane = x1)
1465 AC_DEFINE_UNQUOTED([HAVE_GNUTLS_DANE], $gnutls_dane, [We have GnuTLS with DANE support])
1466
1467
1468
1469 # Test if we are building for superMUC
1470 AC_MSG_CHECKING(if GNUnet is being configured to run on the SuperMUC)
1471 AC_ARG_ENABLE([supermuc],
1472     [AS_HELP_STRING([--enable-supermuc],
1473        [build GNUnet with support to run on the SuperMUC (default is NO)])],
1474     [if test "x$enable_supermuc" = "xno"
1475      then
1476        supermuc=0
1477      else
1478        supermuc=1
1479      fi],
1480     [supermuc=0
1481      enable_supermuc=no])
1482 AC_MSG_RESULT($enable_SUPERMUC)
1483 AM_CONDITIONAL([ENABLE_SUPERMUC], [test "x$supermuc" = "x1"])
1484 AC_DEFINE_UNQUOTED([ENABLE_SUPERMUC], [$supermuc], [Build with support for SuperMUC])
1485
1486 # Check if NSE has to send timestamp information to testbed logger for
1487 # generating histogram of messages received
1488 AC_MSG_CHECKING(if NSE has to send timestamp information to testbed logger)
1489 AC_ARG_ENABLE([nse-histogram],
1490     [AS_HELP_STRING([--enable-nse-histogram],
1491        [have NSE send timestamp information to testbed logger for generating
1492        histogram of received messages.  NOT useful for production (default is
1493        NO)])],
1494     [if test "x$enableval" = "xno"
1495      then
1496        nse_histogram=0
1497      else
1498        nse_histogram=1
1499      fi],
1500     [nse_histogram=0
1501      enable_nse_histogram=no])
1502 AC_MSG_RESULT($enable_nse_histogram)
1503 AM_CONDITIONAL([ENABLE_NSE_HISTOGRAM], [test "x$nse_histogram" = "x1"])
1504 AC_DEFINE_UNQUOTED([ENABLE_NSE_HISTOGRAM], [$nse_histogram],
1505                    [have NSE send timestamp information to testbed logger])
1506
1507 # should 'make check' run tests?
1508 AC_MSG_CHECKING(whether to run tests)
1509 AC_ARG_ENABLE([testruns],
1510    [AS_HELP_STRING([--disable-testruns], [disable running tests on make check (default is YES)])],
1511    [enable_tests_run=${enableval}],
1512    [enable_tests_run=yes])
1513 AC_MSG_RESULT($enable_test_run)
1514 AM_CONDITIONAL([ENABLE_TEST_RUN], [test "x$enable_tests_run" = "xyes"])
1515
1516
1517 AC_MSG_CHECKING([whether to compile in benchmarks (currently for http and crypto)])
1518 AC_ARG_ENABLE([benchmark],
1519    [AS_HELP_STRING([--enable-benchmark], [enable benchmarking])],
1520    [enable_benchmark=${enableval}],
1521    [enable_benchmark=no])
1522 AC_MSG_RESULT($enable_benchmark)
1523 AS_IF([test "x$enable_benchmark" = "xyes"],
1524       [AC_DEFINE_UNQUOTED(ENABLE_BENCHMARK,1,[Benchmarks are enabled])])
1525 AM_CONDITIONAL([ENABLE_BENCHMARK], [test "x$enable_benchmark" = "xyes"])
1526
1527
1528 # should expensive tests be run?
1529 AC_MSG_CHECKING(whether to run expensive tests)
1530 AC_ARG_ENABLE([expensivetests],
1531    [AS_HELP_STRING([--enable-expensivetests], [enable running expensive testcases])],
1532    [enable_expensive=${enableval}],
1533    [enable_expensive=no])
1534 AC_MSG_RESULT($enable_expensive)
1535 AM_CONDITIONAL([HAVE_EXPENSIVE_TESTS], [test "x$enable_expensive" = "xyes"])
1536
1537 # should ports be open for Java services?
1538 AC_MSG_CHECKING(whether to enable ports for gnunet-java)
1539 AC_ARG_ENABLE([javaports],
1540    [AS_HELP_STRING([--enable-javaports], [use non-zero ports for services with Java bindings (default is NO)])],
1541    [enable_java_ports=${enableval}],
1542    [enable_java_ports=no])
1543 AC_MSG_RESULT($enable_java_ports)
1544 if test "x$enable_java_ports" = "xyes"
1545 then
1546   JAVAPORT=""
1547 else
1548   JAVAPORT="$UNIXONLY"
1549 fi
1550 AC_SUBST(JAVAPORT)
1551
1552 # should benchmarks be run?
1553 AC_MSG_CHECKING(whether to run benchmarks during make check)
1554 AC_ARG_ENABLE([benchmarks],
1555    [AS_HELP_STRING([--enable-benchmarks], [enable running benchmarks during make check])],
1556    [enable_benchmarks=${enableval}],
1557    [enable_benchmarks=no])
1558 AC_MSG_RESULT($enable_benchmarks)
1559 AM_CONDITIONAL([HAVE_BENCHMARKS], [test "x$enable_benchmarks" = "xyes"])
1560
1561 # should gnunet-testing be compiled
1562 AC_MSG_CHECKING(wether to compile gnunet-testing)
1563 AC_ARG_ENABLE([testing],
1564    [AS_HELP_STRING([--disable-testing], [do not build gnunet-testing])],
1565    [enable_testing=${enableval}],
1566    [enable_testing=yes])
1567 AC_MSG_RESULT($enable_testing)
1568 AM_CONDITIONAL([HAVE_TESTING], [test "x$enable_testing" = "xyes"])
1569
1570 # should experimental code be compiled (code that may not yet compile)?
1571 AC_MSG_CHECKING(whether to compile experimental code)
1572 AC_ARG_ENABLE([experimental],
1573    [AS_HELP_STRING([--enable-experimental], [enable compiling experimental code])],
1574    [enable_experimental=${enableval}],
1575    [enable_experimental=no])
1576 AC_MSG_RESULT($enable_experimental)
1577 AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"])
1578
1579 # should malicious code be compiled (should only be used for testing)?
1580 AC_MSG_CHECKING(whether to compile malicious code)
1581 AC_ARG_ENABLE([malicious],
1582    [AS_HELP_STRING([--enable-malicious], [enable compiling malicious code])],
1583    [if test "x$enableval" = "xno"
1584      then
1585        malicious=0
1586      else
1587        malicious=1
1588      fi],
1589    [malicious=0
1590     enable_malicious=no])
1591 AC_MSG_RESULT($enable_malicious)
1592 AM_CONDITIONAL([ENABLE_MALICIOUS], [test 1=$malicious])
1593 AC_DEFINE_UNQUOTED([ENABLE_MALICIOUS], [$malicious],
1594                    [enable compilation of malicious code])
1595
1596 # should services be started on demand when needed?  Some services may choose to
1597 # never start by default and it is up to the service/module developer to decide
1598 # by having "START_ON_DEMAND = NO" instead of "START_ON_DEMAND = @START_ON_DEMAND@"
1599 # in the service/module's conf.in file.
1600 # See also IMMEDIATE_START for an unconditional immediate start.
1601 START_ON_DEMAND="YES"
1602 AC_MSG_CHECKING(whether to start peer's services on demand by default)
1603 AC_ARG_ENABLE([autostart],
1604    [AS_HELP_STRING([--disable-autostart], [do not start peer's services by default])],
1605    [enable_autostart=${enableval}
1606     if test "x$enable_autostart" = "xno"
1607     then
1608         START_ON_DEMAND="NO"
1609     fi
1610    ],
1611    [enable_autostart=yes])
1612 AC_MSG_RESULT($enable_autostart)
1613 #AM_CONDITIONAL([HAVE_START_ON_DEMAND], [test "x$enable_autostart" = "xyes"])
1614 AC_SUBST(START_ON_DEMAND)
1615
1616 # should memory statistics be kept (very expensive CPU-wise!)
1617 AC_MSG_CHECKING(whether to create expensive statistics on memory use)
1618 AC_ARG_ENABLE([heapstats],
1619    [AS_HELP_STRING([--enable-heapstats], [enable expensive heap statistics])],
1620    [enable_heapstats=1],
1621    [enable_heapstats=0])
1622 AC_MSG_RESULT($enable_heapstats)
1623 AC_DEFINE_UNQUOTED([ENABLE_HEAP_STATISTICS],$enable_heapstats,[enable expensive heap statistics])
1624
1625 # should code be enabled that works around missing OS functionality on Windows?
1626 # used for test cases
1627 if test $build_target = "mingw"
1628 then
1629         workarounds=1
1630
1631 AC_LINK_IFELSE(
1632  [AC_LANG_PROGRAM(
1633   [#include <ws2tcpip.h>
1634   ],[
1635   int s = socket (0, 0, 0);])
1636  ],[
1637   AC_DEFINE_UNQUOTED([HAVE_SOCKET],1,[Define this if socket() is available])
1638  ],[
1639   AC_DEFINE_UNQUOTED([HAVE_SOCKET],0,[Define this if socket() is available])
1640  ])
1641
1642 AC_LINK_IFELSE(
1643  [AC_LANG_PROGRAM(
1644   [#include <ws2tcpip.h>
1645   ],[
1646   int s = select (0, NULL, NULL, NULL, NULL);])
1647  ],[
1648   AC_DEFINE_UNQUOTED([HAVE_SELECT],1,[Define this if select() is available])
1649  ],[
1650   AC_DEFINE_UNQUOTED([HAVE_SELECT],0,[Define this if select() is available])
1651  ])
1652
1653 AC_LINK_IFELSE(
1654  [AC_LANG_PROGRAM(
1655   [#include <ws2tcpip.h>
1656   ],[
1657   struct in_addr i;
1658   char *s = inet_ntoa (i);])
1659  ],[
1660   AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],1,[Define this if inet_ntoa() is available])
1661  ],[
1662   AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],0,[Define this if inet_ntoa() is available])
1663  ])
1664
1665 AC_LINK_IFELSE(
1666  [AC_LANG_PROGRAM(
1667   [#include <ws2tcpip.h>
1668   ],[
1669   int s = getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);])
1670  ],[
1671   AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],1,[Define this if getnameinfo() is available])
1672  ],[
1673   AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],0,[Define this if getnameinfo() is available])
1674  ])
1675
1676 AC_LINK_IFELSE(
1677  [AC_LANG_PROGRAM(
1678   [#include <ws2tcpip.h>
1679   ],[
1680   int s = gethostname (NULL, 0);])
1681  ],[
1682   AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],1,[Define this if gethostname() is available])
1683  ],[
1684   AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],0,[Define this if gethostname() is available])
1685  ])
1686
1687 AC_LINK_IFELSE(
1688  [AC_LANG_PROGRAM(
1689   [#include <ws2tcpip.h>
1690   ],[
1691   void *s = gethostbyname (NULL);])
1692  ],[
1693   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],1,[Define this if gethostbyname() is available])
1694  ],[
1695   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],0,[Define this if gethostbyname() is available])
1696  ])
1697
1698 AC_LINK_IFELSE(
1699  [AC_LANG_PROGRAM(
1700   [#include <ws2tcpip.h>
1701   ],[
1702   void *s = gethostbyaddr (NULL, 0, 0);])
1703  ],[
1704   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],1,[Define this if gethostbyaddr() is available])
1705  ],[
1706   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],0,[Define this if gethostbyaddr() is available])
1707  ])
1708
1709 AC_LINK_IFELSE(
1710  [AC_LANG_PROGRAM(
1711   [#include <ws2tcpip.h>
1712   ],[
1713   int s = getaddrinfo (NULL, NULL, NULL, NULL);])
1714  ],[
1715   AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],1,[Define this if getaddrinfo() is available])
1716  ],[
1717   AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],0,[Define this if getaddrinfo() is available])
1718  ])
1719
1720 else
1721   AC_MSG_CHECKING(whether to enable windows workarounds)
1722   AC_ARG_ENABLE([windows_workarounds],
1723      [AS_HELP_STRING([--enable-windows_workarounds], [enable workarounds used on Windows (only useful for test cases)])],
1724      [enable_workarounds=${enableval}],
1725      [enable_workarounds=no])
1726   AC_MSG_RESULT($enable_workarounds)
1727   if test x$enable_windows_workarounds = "xyes"
1728   then
1729      workarounds=1
1730   else
1731      workarounds=0
1732    fi
1733 fi
1734 AC_DEFINE_UNQUOTED([ENABLE_WINDOWS_WORKAROUNDS], $workarounds, [enable workarounds used on Windows (only useful for test cases)])
1735
1736
1737 # Check if the __thread storage class for thread-local storage is available.
1738 AC_MSG_CHECKING(whether __thread is supported)
1739 AC_LINK_IFELSE(
1740  [AC_LANG_PROGRAM([#include <stdlib.h>
1741                    #undef __thread
1742                    static __thread int a = 1;],
1743                   [exit(a-1);])],
1744  [have_thread_local_gcc=1],[have_thread_local_gcc=0])
1745 AC_DEFINE_UNQUOTED([HAVE_THREAD_LOCAL_GCC],$have_thread_local_gcc,[Define this if __thread is supported])
1746 AS_IF([test "x$have_thread_local_gcc" = "x1"],
1747       [AC_MSG_RESULT(yes)],
1748       [AC_MSG_RESULT(no)])
1749
1750 # gcov compilation
1751 AC_MSG_CHECKING(whether to compile with support for code coverage analysis)
1752 AC_ARG_ENABLE([coverage],
1753               AS_HELP_STRING([--enable-coverage],
1754                              [compile the library with code coverage support]),
1755               [use_gcov=${enableval}],
1756               [use_gcov=no])
1757 AC_MSG_RESULT($use_gcov)
1758 AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
1759
1760
1761 # version info
1762 # TODO: git blame says this predates our switch to git. git-svn should be adjusted to simply git, or
1763 # an external script that does the job.
1764 AC_PATH_PROG(svnversioncommand, svnversion)
1765 AC_PATH_PROG(gitcommand, git)
1766 AC_MSG_CHECKING(for source being under a VCS)
1767
1768
1769 # version info
1770 AC_PATH_PROG(gitcommand, git)
1771 AC_MSG_CHECKING(for source being under a VCS)
1772 git_version=
1773 AS_IF([test ! "X$gitcommand" = "X"],
1774 [
1775   git_version=$(cd $srcdir ; git rev-list --full-history --all --abbrev-commit | head -n 1 2>/dev/null)
1776 ])
1777 AS_IF([test "X$git_version" = "X"],
1778   [
1779     vcs_name="no"
1780     vcs_version="\"release\""
1781   ],
1782   [
1783     vcs_name="yes, git-svn"
1784     vcs_version="\"git-$git_version\""
1785   ])
1786 AC_MSG_RESULT($vcs_name)
1787
1788 AC_MSG_CHECKING(VCS version)
1789 AC_MSG_RESULT($vcs_version)
1790 AC_DEFINE_UNQUOTED(VCS_VERSION, [$vcs_version], [VCS revision/hash or tarball version])
1791
1792 AC_CONFIG_FILES([
1793 Makefile
1794 contrib/Makefile
1795 contrib/hellos/Makefile
1796 contrib/services/Makefile
1797 contrib/services/openrc/Makefile
1798 contrib/services/systemd/Makefile
1799 contrib/scripts/Makefile
1800 contrib/scripts/gnunet-logread/Makefile
1801 doc/Makefile
1802 doc/man/Makefile
1803 doc/doxygen/Makefile
1804 doc/handbook/Makefile
1805 doc/tutorial/Makefile
1806 lint/Makefile
1807 m4/Makefile
1808 po/Makefile.in
1809 src/Makefile
1810 src/arm/Makefile
1811 src/arm/arm.conf
1812 src/ats/Makefile
1813 src/ats/ats.conf
1814 src/ats-tool/Makefile
1815 src/ats-tests/Makefile
1816 src/auction/Makefile
1817 src/block/Makefile
1818 src/cadet/Makefile
1819 src/cadet/cadet.conf
1820 src/core/Makefile
1821 src/core/core.conf
1822 src/consensus/Makefile
1823 src/consensus/consensus.conf
1824 src/conversation/Makefile
1825 src/conversation/conversation.conf
1826 src/curl/Makefile
1827 src/datacache/Makefile
1828 src/datastore/Makefile
1829 src/datastore/datastore.conf
1830 src/dht/Makefile
1831 src/dht/dht.conf
1832 src/dns/Makefile
1833 src/dns/dns.conf
1834 src/exit/Makefile
1835 src/fragmentation/Makefile
1836 src/fs/Makefile
1837 src/fs/fs.conf
1838 src/gns/Makefile
1839 src/gns/gns.conf
1840 src/gns/nss/Makefile
1841 src/gnsrecord/Makefile
1842 src/hello/Makefile
1843 src/identity/Makefile
1844 src/identity/identity.conf
1845 src/credential/Makefile
1846 src/credential/credential.conf
1847 src/include/Makefile
1848 src/integration-tests/Makefile
1849 src/json/Makefile
1850 src/hostlist/Makefile
1851 src/my/Makefile
1852 src/mysql/Makefile
1853 src/namecache/Makefile
1854 src/namecache/namecache.conf
1855 src/namestore/Makefile
1856 src/namestore/namestore.conf
1857 src/nat/Makefile
1858 src/nat/nat.conf
1859 src/nat-auto/Makefile
1860 src/nat-auto/nat-auto.conf
1861 src/nse/Makefile
1862 src/nse/nse.conf
1863 src/nt/Makefile
1864 src/peerinfo/Makefile
1865 src/peerinfo/peerinfo.conf
1866 src/peerinfo-tool/Makefile
1867 src/peerstore/Makefile
1868 src/peerstore/peerstore.conf
1869 src/pq/Makefile
1870 src/pt/Makefile
1871 src/regex/Makefile
1872 src/regex/regex.conf
1873 src/revocation/Makefile
1874 src/revocation/revocation.conf
1875 src/rps/Makefile
1876 src/rps/rps.conf
1877 src/secretsharing/Makefile
1878 src/secretsharing/secretsharing.conf
1879 src/scalarproduct/Makefile
1880 src/scalarproduct/scalarproduct.conf
1881 src/set/Makefile
1882 src/set/set.conf
1883 src/sq/Makefile
1884 src/statistics/Makefile
1885 src/statistics/statistics.conf
1886 src/template/Makefile
1887 src/testbed/Makefile
1888 src/testbed/testbed.conf
1889 src/testbed-logger/Makefile
1890 src/testbed-logger/testbed-logger.conf
1891 src/testing/Makefile
1892 src/topology/Makefile
1893 src/transport/Makefile
1894 src/transport/transport.conf
1895 src/util/Makefile
1896 src/util/resolver.conf
1897 src/vpn/Makefile
1898 src/vpn/vpn.conf
1899 src/zonemaster/Makefile
1900 src/zonemaster/zonemaster.conf
1901 src/rest/Makefile
1902 src/abe/Makefile
1903 src/reclaim-attribute/Makefile
1904 src/reclaim/Makefile
1905 pkgconfig/Makefile
1906 pkgconfig/gnunetarm.pc
1907 pkgconfig/gnunetats.pc
1908 pkgconfig/gnunetblock.pc
1909 pkgconfig/gnunetcadet.pc
1910 pkgconfig/gnunetconsensus.pc
1911 pkgconfig/gnunetconversation.pc
1912 pkgconfig/gnunetcore.pc
1913 pkgconfig/gnunetdatacache.pc
1914 pkgconfig/gnunetdatastore.pc
1915 pkgconfig/gnunetdht.pc
1916 pkgconfig/gnunetdns.pc
1917 pkgconfig/gnunetenv.pc
1918 pkgconfig/gnunetfragmentation.pc
1919 pkgconfig/gnunetfs.pc
1920 pkgconfig/gnunetgns.pc
1921 pkgconfig/gnunethello.pc
1922 pkgconfig/gnunetidentity.pc
1923 pkgconfig/gnunetmicrophone.pc
1924 pkgconfig/gnunetmysql.pc
1925 pkgconfig/gnunetnamestore.pc
1926 pkgconfig/gnunetnat.pc
1927 pkgconfig/gnunetnse.pc
1928 pkgconfig/gnunetpeerinfo.pc
1929 pkgconfig/gnunetpq.pc
1930 pkgconfig/gnunetregex.pc
1931 pkgconfig/gnunetrevocation.pc
1932 pkgconfig/gnunetrps.pc
1933 pkgconfig/gnunetscalarproduct.pc
1934 pkgconfig/gnunetset.pc
1935 pkgconfig/gnunetspeaker.pc
1936 pkgconfig/gnunetstatistics.pc
1937 pkgconfig/gnunettestbed.pc
1938 pkgconfig/gnunettesting.pc
1939 pkgconfig/gnunettransport.pc
1940 pkgconfig/gnunetutil.pc
1941 pkgconfig/gnunetvpn.pc
1942 ])
1943 AC_OUTPUT
1944
1945 # Finally: summary!
1946
1947 # warn user if mysql found but not used due to version
1948 AS_IF([test "$mysqlfail" = "true"]
1949       [AC_MSG_NOTICE([WARNING: optional MySQL not found (or too old)])])
1950
1951 # sqlite
1952 AS_IF([test "x$sqlite" = "x0"],
1953       [AC_MSG_ERROR([ERROR: sqlite3 not found, but sqlite3 is required.])])
1954
1955 # libgnurl
1956 AS_IF([test "$gnurl" = "0"],
1957   [AS_IF([test "x$curl" = "xfalse"],
1958     [AC_MSG_NOTICE([WARNING: libgnurl not found.  http client support will not be compiled.])
1959      AC_MSG_WARN([ERROR: libgnurl not found.  hostlist daemon will not be compiled, and you probably WANT the hostlist daemon])],
1960     [AC_MSG_NOTICE([WARNING: libgnurl not found, trying to use libcurl-gnutls instead.])])])
1961
1962 # bluetooth
1963 AS_IF([test "x$bluetooth" = "x0"],
1964       [AC_MSG_NOTICE([WARNING: optional bluetooth library not found.])])
1965
1966
1967 # jansson
1968 AS_IF([test "x$jansson" = "x0"],
1969       [AC_MSG_NOTICE([WARNING: optional jansson library not found.])])
1970
1971 #
1972 # FIXME: `some modules' -> be more specific which exact modules.
1973 #
1974
1975 # warn user if iptables is not found
1976 AS_IF([test "$VAR_IPTABLES_BINARY" = "false"],
1977  [AC_MSG_NOTICE([WARNING: optional iptables not found])])
1978
1979 # warn user if ifconfig is not found
1980 AS_IF([test "$VAR_IFCONFIG_BINARY" = "false"],
1981  [AC_MSG_NOTICE([WARNING: optional ifconfig not found])])
1982
1983 # warn user if upnpc binary is not found
1984 AS_IF([test "$VAR_UPNPC_BINARY" = "false"],
1985   [AC_MSG_NOTICE([WARNING: optional upnpc binary not found])])
1986
1987 #gnutls
1988 AS_IF([test x$gnutls != xtrue],
1989  [AC_MSG_NOTICE([WARNING: GnuTLS not found, gnunet-gns-proxy will not be built])],
1990  [AS_IF([test "x$gnutls_dane" != "x1"],
1991   [AC_MSG_NOTICE([WARNING: GnuTLS has no DANE support, DANE validation will not be possible])])])
1992
1993 # warn user if libzbar is not found
1994 AS_IF([test "$have_zbar" = 0],
1995       [AC_MSG_NOTICE([WARNING: zbar not found, gnunet-qr will not be built.])])
1996
1997 # java ports
1998 AS_IF([test "x$enable_java_ports" = "xyes"],
1999       [AC_MSG_NOTICE([NOTICE: Opening ports for gnunet-java bindings by default.])])
2000
2001 # MHD
2002 AS_IF([test "x$lmhd" != "x1"],
2003       [AC_MSG_NOTICE([WARNING: optional libmicrohttpd not found])])
2004
2005 # conversation
2006 AS_IF([test "x$conversation_backend" = "xnone"],
2007  [AS_IF([test "x$pulse" != "x1"],
2008    [AC_MSG_NOTICE([WARNING: libpulse(audio) not found, conversation will not be built.])])
2009   AS_IF([test "x$opus" != "x1"],
2010    [AC_MSG_NOTICE([WARNING: libopus not found, conversation will not be built.])])
2011   AS_IF([test "x$gst" != "x1"],
2012    [AC_MSG_NOTICE([WARNING: GStreamer not found, conversation will not be built.])])])
2013
2014 AS_IF([test "$extractor" != 1],
2015       [AC_MSG_WARN([ERROR: libextractor not found, but various file-sharing functions require it])])
2016
2017 AS_IF([test "x$working_libidn2" = x1],
2018       [AC_MSG_NOTICE([INFO: Using libidn2])])
2019 AS_IF([test "x$working_libidn1" = x1],
2020       [AC_MSG_NOTICE([INFO: Using libidn1])])
2021
2022 AC_MSG_NOTICE([NOTICE: Database support is set to MySQL: $mysql, SQLite: $sqlite, Postgres: $postgres])
2023
2024 AS_IF([test "$enable_framework_build" = "yes"],
2025       [AC_MSG_NOTICE([Mac OS X framework build enabled.])])
2026
2027 AC_MSG_NOTICE([********************************************
2028 Please make sure NOW that you have created a user and group 'gnunet'
2029 and additionally a group 'gnunetdns'. On Debian and Ubuntu GNU/Linux, type:
2030         addgroup gnunetdns
2031         adduser --system --group --disabled-login --home /var/lib/gnunet gnunet
2032
2033 Make sure that '/var/lib/gnunet' is owned (and writable) by user
2034 'gnunet'.  Then, you can compile GNUnet with
2035         make
2036
2037 After that, run (if necessary as 'root')
2038         make install
2039 to install everything.
2040
2041 Each GNUnet user should be added to the 'gnunet' group (may
2042 require fresh login to come into effect):
2043         adduser USERNAME gnunet
2044 (run the above command as root once for each of your users, replacing
2045 "USERNAME" with the respective login names).  If you have a global IP
2046 address, no further configuration is required.
2047
2048 For more detailed setup instructions, see https://docs.gnunet.org/
2049
2050 Optionally, download and compile gnunet-gtk to get a GUI for
2051 file-sharing and configuration.  This is particularly recommended
2052 if your network setup is non-trivial, as gnunet-setup can be
2053 used to test in the GUI if your network configuration is working.
2054 gnunet-setup should be run as the "gnunet" user under X.  As it
2055 does very little with the network, running it as "root" is likely
2056 also harmless.  You can also run it as a normal user, but then
2057 you have to copy ~/.gnunet/gnunet.conf" over to the "gnunet" user's
2058 home directory in the end.
2059
2060 Once you have configured your peer, run (as the 'gnunet' user)
2061         gnunet-arm -s
2062 to start the peer.  You can then run the various GNUnet-tools as
2063 your "normal" user (who should only be in the group 'gnunet').
2064 ********************************************])