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