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