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