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