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