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