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