fix configure check to test for MHD 0.9.52:
[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 # 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 "$working_libidn1" = 0 -a "$working_libidn2" = 0],
909       [AC_MSG_ERROR([GNUnet requires libidn (or libidn2)])])
910
911 AS_IF([test x$there_can_only_be_one = x0],
912       [AC_MSG_FAILURE([Missing dependencies: $MISSING_DEPS])])
913
914 # test for zlib
915 SAVE_LDFLAGS=$LDFLAGS
916 SAVE_CPPFLAGS=$CPPFLAGS
917 AC_ARG_WITH(zlib,
918             [  --with-zlib[[=DIR]]       use libz in DIR],
919             [AS_IF([test "$withval" = "no"],
920                    [AC_MSG_ERROR([GNUnet requires zlib])],
921                    [test "$withval" != "yes"],
922                    [
923                      Z_DIR=$withval
924                      CPPFLAGS="${CPPFLAGS} -I$withval/include"
925                      LDFLAGS="${LDFLAGS} -L$withval/lib"
926                    ])
927             ])
928 AC_CHECK_HEADER(zlib.h,
929                 [],
930                 [AC_MSG_ERROR([GNUnet requires zlib])])
931 AC_CHECK_LIB(z, compress2,
932              [
933               AC_DEFINE([HAVE_ZLIB], [], [Have compression library])
934               if test "x${Z_DIR}" != "x"; then
935                       Z_CFLAGS="-I${Z_DIR}/include"
936                       Z_LIBS="-L${Z_DIR}/lib -lz"
937               else
938                       Z_LIBS="-lz"
939               fi],
940               [AC_MSG_ERROR([GNUnet requires zlib])])
941 AC_SUBST(Z_CFLAGS)
942 AC_SUBST(Z_LIBS)
943
944 if test "$enable_shared" = "no"
945 then
946  AC_MSG_ERROR([GNUnet only works with shared libraries. Sorry.])
947 fi
948
949
950
951 # restore LIBS
952 LIBS=$SAVE_LIBS
953
954
955 fi
956
957 # check for iconv
958 AM_ICONV
959
960 # test for libunistring
961 gl_LIBUNISTRING
962 if test $HAVE_LIBUNISTRING != yes; then
963  AC_MSG_ERROR([GNUnet requires libunistring])
964 fi
965 # under emscripten, $gl_libunistring_hexversion is undefined
966 if test "$taler_only" != yes; then
967 if test "x$gl_libunistring_hexversion" = "x" || test "$gl_libunistring_hexversion" -le 2305; then
968  AC_MSG_ERROR([GNUnet requires libunistring >= 0.9.1.1])
969 fi
970 fi
971 AC_CHECK_HEADERS([unistr.h],,AC_MSG_ERROR([Compiling GNUnet requires unistr.h (from libunistring) to be installed]))
972
973 # restore LIBS
974 LIBS=$SAVE_LIBS
975
976
977
978 # Checks for standard header files.
979 AC_HEADER_DIRENT
980 AC_HEADER_STDC
981
982 # Check for headers that are ALWAYS required
983 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]))
984
985
986
987 # Checks for headers that are only required on some systems or opional (and where we do NOT abort if they are not there)
988 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])
989
990 # FreeBSD requires something more funky for netinet/in_systm.h and netinet/ip.h...
991 AC_CHECK_HEADERS([sys/types.h netinet/in_systm.h netinet/in.h netinet/ip.h],,,
992 [#ifdef HAVE_SYS_TYPES_H
993 #include <sys/types.h>
994 #endif
995 #ifdef HAVE_NETINET_IN_SYSTM_H
996 #include <netinet/in_systm.h>
997 #endif
998 #ifdef HAVE_NETINET_IN_H
999 #include <netinet/in.h>
1000 #endif
1001 ])
1002
1003 SAVE_LDFLAGS=$LDFLAGS
1004 SAVE_CPPFLAGS=$CPPFLAGS
1005
1006 # test for sqlite
1007 sqlite=false
1008 AC_MSG_CHECKING(for SQLite)
1009 AC_ARG_WITH(sqlite,
1010   [  --with-sqlite=PFX       base of SQLite installation],
1011   [AC_MSG_RESULT("$with_sqlite")
1012    case $with_sqlite in
1013    no)
1014      ;;
1015    yes)
1016     AC_CHECK_HEADERS(sqlite3.h,
1017      sqlite=true)
1018      ;;
1019    *)
1020     LDFLAGS="-L$with_sqlite/lib $LDFLAGS"
1021     CPPFLAGS="-I$with_sqlite/include $CPPFLAGS"
1022     AC_CHECK_HEADERS(sqlite3.h,
1023      EXT_LIB_PATH="-L$with_sqlite/lib $EXT_LIB_PATH"
1024      SQLITE_LDFLAGS="-L$with_sqlite/lib"
1025      SQLITE_CPPFLAGS="-I$with_sqlite/include"
1026      sqlite=true)
1027     LDFLAGS=$SAVE_LDFLAGS
1028     CPPFLAGS=$SAVE_CPPFLAGS
1029     ;;
1030    esac
1031   ],
1032   [AC_MSG_RESULT([--with-sqlite not specified])
1033     AC_CHECK_HEADERS(sqlite3.h, sqlite=true)])
1034 AM_CONDITIONAL(HAVE_SQLITE, test x$sqlite = xtrue)
1035 AC_SUBST(SQLITE_CPPFLAGS)
1036 AC_SUBST(SQLITE_LDFLAGS)
1037
1038 LDFLAGS=$SAVE_LDFLAGS
1039 CPPFLAGS=$SAVE_CPPFLAGS
1040
1041 # test for postgres
1042 postgres=false
1043 # even running the check for postgres breaks emscripten ...
1044 AS_IF([test "$taler_only" != yes],
1045       [AX_LIB_POSTGRESQL([9.5],
1046         [CPPFLAGS="$CPPFLAGS $POSTGRESQL_CPPFLAGS"
1047          AC_CHECK_HEADERS([libpq-fe.h],
1048          postgres=true)
1049         ],
1050         [AC_MSG_RESULT([no postgres])])])
1051 AM_CONDITIONAL(HAVE_POSTGRESQL, test x$postgres = xtrue)
1052
1053
1054 LDFLAGS=$SAVE_LDFLAGS
1055 CPPFLAGS=$SAVE_CPPFLAGS
1056
1057 # mysql & windows
1058 AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include <sys/types.h>])
1059 AC_CHECK_TYPES([size_t], [], [], [#include <stdio.h>])
1060
1061 if test "$build_target" = "mingw"
1062 then
1063   CYGWIN_MYSQL_MAGIC="#include <mysql/my_global.h>"
1064 fi
1065
1066 # test for mysql
1067 mysql=false
1068 mysqlfail=false
1069 SAVE_LDFLAGS=$LDFLAGS
1070 SAVE_CPPFLAGS=$CPPFLAGS
1071 AC_MSG_CHECKING(for mysql)
1072 AC_ARG_WITH(mysql,
1073   [  --with-mysql=PFX        base of MySQL installation],
1074   [AC_MSG_RESULT([$with_mysql])
1075    case $with_mysql in
1076    no)
1077       ;;
1078    yes|"")
1079       AC_CHECK_HEADERS(mysql/mysql.h,
1080        AC_CHECK_LIB(mysqlclient, mysql_init,
1081
1082        mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
1083       ;;
1084    *)
1085       LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql $LDFLAGS $ZLIBS"
1086       CPPFLAGS="-I$with_mysql/include $CPPFLAGS"
1087       AC_CHECK_HEADERS(mysql/mysql.h,
1088        AC_CHECK_LIB(mysqlclient, mysql_init,
1089         MYSQL_LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql"
1090         MYSQL_CPPFLAGS="-I$with_mysql/include"
1091
1092         mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
1093       ;;
1094    esac
1095   ],
1096   [AC_MSG_RESULT([--with-mysql not specified])
1097    if test -d "/usr/lib64/mysql"; then
1098     MYSQL_LIBDIR="/usr/lib64/mysql"
1099    elif test -d "/usr/lib/mysql"; then
1100     MYSQL_LIBDIR="/usr/lib/mysql"
1101    else
1102     MYSQL_LIBDIR="/usr/lib"
1103    fi
1104    LDFLAGS="-L$MYSQL_LIBDIR $LDFLAGS $ZLIBS"
1105    AC_CHECK_LIB(mysqlclient, mysql_init,
1106     [AC_CHECK_HEADERS(mysql/mysql.h,
1107       MYSQL_LDFLAGS="-L$MYSQL_LIBDIR"
1108       mysql=true
1109
1110      , [], [$CYGWIN_MYSQL_MAGIC])])
1111   ])
1112
1113 AC_SUBST(MYSQL_LDFLAGS)
1114 AC_SUBST(MYSQL_CPPFLAGS)
1115
1116 # additional version check for mysql
1117 AC_ARG_ENABLE(mysql-version-check, [  --disable-mysql-version-check  do not check MySQL version],, enable_mysql_version_check=yes)
1118 if test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes"
1119 then
1120   AC_MSG_CHECKING(mysql version)
1121   AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1122     [[$CYGWIN_MYSQL_MAGIC
1123       #include <mysql/mysql.h>]],
1124     [[
1125       #if (MYSQL_VERSION_ID < 40100)
1126       #error needs at least version >= 4.1
1127       #endif
1128       int main () { return 0; }
1129     ]])
1130     ],mysql=true,mysql=false)
1131   if test "$mysql" = "false"
1132   then
1133     mysqlfail=true
1134     AC_MSG_RESULT([fail, >= 4.1 required])
1135   else
1136     AC_MSG_RESULT(ok)
1137   fi
1138 fi
1139 AM_CONDITIONAL(HAVE_MYSQL, test x$mysql = xtrue)
1140 AM_CONDITIONAL(HAVE_MYSQLE, false)
1141 # restore LIBS
1142 LIBS=$SAVE_LIBS
1143 LDFLAGS=$SAVE_LDFLAGS
1144 CPPFLAGS=$SAVE_CPPFLAGS
1145
1146 if test "$sqlite" = 0 -a "$mysql" = 0
1147 then
1148  AC_MSG_ERROR([GNUnet requires SQLite or MySQL])
1149 fi
1150
1151 # libmicrohttpd
1152 lmhd=0
1153 AC_MSG_CHECKING([for libmicrohttpd])
1154 AC_ARG_WITH(microhttpd,
1155    [  --with-microhttpd=PFX   base of libmicrohttpd installation],
1156    [AC_MSG_RESULT([$with_microhttpd])
1157     case $with_microhttpd in
1158       no)
1159         ;;
1160       yes|"")
1161         AC_CHECK_HEADERS([microhttpd.h],
1162           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
1163             AC_CHECK_LIB([microhttpd], [MHD_get_fdset2],
1164               [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.52])
1165               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1166                 #include "$native_srcdir/src/include/platform.h"
1167                 #include <microhttpd.h>
1168                 #if (MHD_VERSION < 0x0094200)
1169                 #error needs at least version 0.9.42
1170                 #endif
1171                 int main () { return 0; }
1172                ])],
1173                [AC_MSG_RESULT(ok)
1174                 lmhd=1],
1175                [AC_MSG_RESULT(failed)])]),
1176             [],[#include "$native_srcdir/src/include/platform.h"
1177                 #include <microhttpd.h>]),,
1178             [#include "$native_srcdir/src/include/platform.h"])
1179         ;;
1180       *)
1181         LDFLAGS="-L$with_microhttpd/lib $LDFLAGS"
1182         CPPFLAGS="-I$with_microhttpd/include $CPPFLAGS"
1183         AC_CHECK_HEADERS(microhttpd.h,
1184           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
1185             AC_CHECK_LIB([microhttpd], [MHD_get_fdset2],
1186               EXT_LIB_PATH="-L$with_microhttpd/lib $EXT_LIB_PATH"
1187               [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.52])
1188                AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1189                 #include "$native_srcdir/src/include/platform.h"
1190                 #include <microhttpd.h>
1191                 #if (MHD_VERSION < 0x0094200)
1192                 #error needs at least version 0.9.42
1193                 #endif
1194                 int main () { return 0; }
1195                ])],
1196                [AC_MSG_RESULT(ok)
1197                 lmhd=1],
1198                [AC_MSG_RESULT(failed)])]),
1199             [],[#include "$native_srcdir/src/include/platform.h"
1200                 #include <microhttpd.h>]),,
1201             [#include "$native_srcdir/src/include/platform.h"])
1202         ;;
1203     esac
1204    ],
1205    [AC_MSG_RESULT([--with-microhttpd not specified])
1206     AC_CHECK_HEADERS([microhttpd.h],
1207       AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
1208         AC_CHECK_LIB([microhttpd], [MHD_get_fdset2],
1209           [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.52])
1210               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1211                 #include "$native_srcdir/src/include/platform.h"
1212                 #include <microhttpd.h>
1213                 #if (MHD_VERSION < 0x0094200)
1214                 #error needs at least version 0.9.52
1215                 #endif
1216                ])],
1217                [AC_MSG_RESULT(ok)
1218                 lmhd=1],
1219                [AC_MSG_RESULT(failed)])]),
1220         [],[#include "$native_srcdir/src/include/platform.h"
1221             #include <microhttpd.h>]),,
1222        [#include "$native_srcdir/src/include/platform.h"])])
1223 AM_CONDITIONAL(HAVE_MHD, test x$lmhd = x1)
1224 AC_DEFINE_UNQUOTED([HAVE_MHD], $lmhd, [We have libmicrohttpd])
1225
1226 AM_CONDITIONAL(HAVE_JSON, [test x$jansson = x1])
1227
1228 # restore LIBS
1229 LIBS=$SAVE_LIBS
1230
1231 # check for gettext
1232 AM_GNU_GETTEXT([external])
1233 AM_GNU_GETTEXT_VERSION([0.18.1])
1234
1235 # Checks for standard typedefs, structures, and compiler characteristics.
1236 AC_TYPE_PID_T
1237 AC_TYPE_SIZE_T
1238 AC_TYPE_MODE_T
1239 AC_HEADER_TIME
1240 AC_HEADER_STAT
1241 AC_HEADER_STDBOOL
1242 AC_STRUCT_TM
1243
1244 AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
1245    [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
1246    ],
1247    [],
1248    [
1249       #include <sys/types.h>
1250       #include <sys/socket.h>
1251       #include <netinet/in.h>
1252    ])
1253
1254 AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
1255    [ AC_DEFINE(HAVE_SOCKADDR_UN_SUN_LEN, 1, [Do we have sockaddr_un.sun_len?])
1256    ],
1257    [],
1258    [
1259       #include <sys/types.h>
1260       #include <sys/socket.h>
1261       #include <sys/un.h>
1262    ])
1263
1264
1265
1266 # Checks for library functions.
1267 AC_FUNC_CLOSEDIR_VOID
1268 AC_FUNC_FORK
1269 AC_PROG_GCC_TRADITIONAL
1270 AC_FUNC_MEMCMP
1271 AC_FUNC_SELECT_ARGTYPES
1272 AC_FUNC_CHOWN
1273
1274 AC_TYPE_SIGNAL
1275 AC_FUNC_STAT
1276 AC_FUNC_STRFTIME
1277 AC_FUNC_VPRINTF
1278 AC_HEADER_SYS_WAIT
1279 AC_TYPE_OFF_T
1280 AC_TYPE_UID_T
1281 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])
1282
1283 # restore LIBS
1284 LIBS=$SAVE_LIBS
1285
1286 GN_INTLINCL=""
1287 GN_LIBINTL="$LTLIBINTL"
1288 AC_ARG_ENABLE(framework, [  --enable-framework      enable Mac OS X framework build helpers],enable_framework_build=$enableval)
1289 AM_CONDITIONAL(WANT_FRAMEWORK, test x$enable_framework_build = xyes)
1290 if test x$enable_framework_build = xyes
1291 then
1292   AC_DEFINE([FRAMEWORK_BUILD], 1, [Build a Mac OS X Framework])
1293   GN_INTLINCL='-I$(top_srcdir)/src/intlemu'
1294   GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation'
1295   AC_LIB_APPENDTOVAR([CPPFLAGS], [$GN_INTLINCL])
1296 fi
1297
1298 GN_LIB_LDFLAGS="-export-dynamic -no-undefined"
1299 GN_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined"
1300
1301 AC_SUBST(GN_LIB_LDFLAGS)
1302 AC_SUBST(GN_PLUGIN_LDFLAGS)
1303 AC_SUBST(GN_INTLINCL)
1304 AC_SUBST(GN_LIBINTL)
1305
1306 AC_SUBST(CPPFLAGS)
1307 AC_SUBST(LIBS)
1308 AC_SUBST(LDFLAGS)
1309 AC_SUBST(EXT_LIB_PATH)
1310 AC_SUBST(EXT_LIBS)
1311
1312 AC_SUBST(LIBPREFIX)
1313 AC_SUBST(DLLDIR)
1314 AC_SUBST(EXT_LIB_PATH)
1315
1316 DATAROOTDIR=$datarootdir
1317 AC_SUBST(DATAROOTDIR)
1318
1319 # test for sudo
1320 AC_MSG_CHECKING(for sudo)
1321 AC_ARG_WITH(sudo,
1322   [  --with-sudo=PATH       path to sudo binary (or just yes)],
1323   [AC_MSG_RESULT("$with_sudo")
1324    case $with_sudo in
1325    no)
1326      SUDO_BINARY=
1327      ;;
1328    yes)
1329      SUDO_BINARY=sudo
1330      ;;
1331    *)
1332      SUDO_BINARY=$with_sudo
1333     ;;
1334    esac
1335   ],
1336   [AC_MSG_RESULT([no])])
1337 AC_SUBST(SUDO_BINARY)
1338 AM_CONDITIONAL([HAVE_SUDO], [test "x$SUDO_BINARY" != "x" -o -w /])
1339
1340
1341 # test for gnunetdns group name
1342 GNUNETDNS_GROUP=gnunetdns
1343 AC_MSG_CHECKING(for gnunetdns group name)
1344 AC_ARG_WITH(gnunetdns,
1345   [  --with-gnunetdns=GRPNAME       name for gnunetdns group],
1346   [AC_MSG_RESULT("$with_gnunetdns")
1347    case $with_gnunetdns in
1348    no)
1349      GNUNETDNS_GROUP=gnunet
1350      ;;
1351    yes)
1352      GNUNETDNS_GROUP=gnunetdns
1353      ;;
1354    *)
1355      GNUNETDNS_GROUP=$with_gnunetdns
1356     ;;
1357    esac
1358   ],
1359   [AC_MSG_RESULT([gnunetdns])])
1360 AC_SUBST(GNUNETDNS_GROUP)
1361
1362
1363
1364 # gnutls
1365 gnutls=0
1366 gnutls_dane=0
1367 AC_MSG_CHECKING(for gnutls)
1368 AC_ARG_WITH(gnutls,
1369    [  --with-gnutls=PFX   base of gnutls installation],
1370    [AC_MSG_RESULT([$with_gnutls])
1371     case $with_gnutls in
1372       no)
1373         ;;
1374       yes)
1375         AC_CHECK_HEADERS([gnutls/abstract.h],
1376             AC_CHECK_LIB([gnutls], [gnutls_priority_set],
1377              gnutls=true))
1378         AC_CHECK_HEADERS([gnutls/dane.h],
1379             AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
1380               gnutls_dane=1))
1381         ;;
1382       *)
1383         LDFLAGS="-L$with_gnutls/lib $LDFLAGS"
1384         CPPFLAGS="-I$with_gnutls/include $CPPFLAGS"
1385         AC_CHECK_HEADERS([gnutls/abstract.h],
1386             AC_CHECK_LIB([gnutls], [gnutls_priority_set],
1387               EXT_LIB_PATH="-L$with_gnutls/lib $EXT_LIB_PATH"
1388               gnutls=true))
1389         AC_CHECK_HEADERS([gnutls/dane.h],
1390             AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
1391               gnutls_dane=1))
1392         ;;
1393     esac
1394    ],
1395    [AC_MSG_RESULT([--with-gnutls not specified])
1396     AC_CHECK_HEADERS([gnutls/abstract.h],
1397         AC_CHECK_LIB([gnutls], [gnutls_priority_set],
1398           gnutls=true))
1399     AC_CHECK_HEADERS([gnutls/dane.h],
1400         AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
1401                      gnutls_dane=1))
1402    ])
1403 AM_CONDITIONAL(HAVE_GNUTLS, test x$gnutls = xtrue)
1404 AC_DEFINE_UNQUOTED([HAVE_GNUTLS], $gnutls, [We have GnuTLS])
1405 AM_CONDITIONAL(HAVE_GNUTLS_DANE, test x$gnutls_dane = x1)
1406 AC_DEFINE_UNQUOTED([HAVE_GNUTLS_DANE], $gnutls_dane, [We have GnuTLS with DANE support])
1407
1408
1409 # Test if we are building for superMUC
1410 AC_MSG_CHECKING(if GNUnet is being configured to run on the SuperMUC)
1411 AC_ARG_ENABLE([supermuc],
1412     [AS_HELP_STRING([--enable-supermuc],
1413        [build GNUnet with support to run on the SuperMUC (default is NO)])],
1414     [if test "x$enable_supermuc" = "xno"
1415      then
1416        supermuc=0
1417      else
1418        supermuc=1
1419      fi],
1420     [supermuc=0
1421      enable_supermuc=no])
1422 AC_MSG_RESULT($enable_SUPERMUC)
1423 AM_CONDITIONAL([ENABLE_SUPERMUC], [test "x$supermuc" = "x1"])
1424 AC_DEFINE_UNQUOTED([ENABLE_SUPERMUC], [$supermuc], [Build with support for SuperMUC])
1425
1426 # Check if NSE has to send timestamp information to testbed logger for
1427 # generating histogram of messages received
1428 AC_MSG_CHECKING(if NSE has to send timestamp information to testbed logger)
1429 AC_ARG_ENABLE([nse-histogram],
1430     [AS_HELP_STRING([--enable-nse-histogram],
1431        [have NSE send timestamp information to testbed logger for generating
1432        histogram of received messages.  NOT useful for production (default is
1433        NO)])],
1434     [if test "x$enableval" = "xno"
1435      then
1436        nse_histogram=0
1437      else
1438        nse_histogram=1
1439      fi],
1440     [nse_histogram=0
1441      enable_nse_histogram=no])
1442 AC_MSG_RESULT($enable_nse_histogram)
1443 AM_CONDITIONAL([ENABLE_NSE_HISTOGRAM], [test "x$nse_histogram" = "x1"])
1444 AC_DEFINE_UNQUOTED([ENABLE_NSE_HISTOGRAM], [$nse_histogram],
1445                    [have NSE send timestamp information to testbed logger])
1446
1447 # should 'make check' run tests?
1448 AC_MSG_CHECKING(whether to run tests)
1449 AC_ARG_ENABLE([testruns],
1450    [AS_HELP_STRING([--disable-testruns], [disable running tests on make check (default is YES)])],
1451    [enable_tests_run=${enableval}],
1452    [enable_tests_run=yes])
1453 AC_MSG_RESULT($enable_test_run)
1454 AM_CONDITIONAL([ENABLE_TEST_RUN], [test "x$enable_tests_run" = "xyes"])
1455
1456
1457 AC_MSG_CHECKING([whether to compile in benchmarks (currently for http and crypto)])
1458 AC_ARG_ENABLE([benchmark],
1459    [AS_HELP_STRING([--enable-benchmark], [enable benchmarking])],
1460    [enable_benchmark=${enableval}],
1461    [enable_benchmark=no])
1462 AC_MSG_RESULT($enable_benchmark)
1463 AS_IF([test "x$enable_benchmark" = "xyes"],
1464       [AC_DEFINE_UNQUOTED(ENABLE_BENCHMARK,1,[Benchmarks are enabled])])
1465 AM_CONDITIONAL([ENABLE_BENCHMARK], [test "x$enable_benchmark" = "xyes"])
1466
1467
1468 # should expensive tests be run?
1469 AC_MSG_CHECKING(whether to run expensive tests)
1470 AC_ARG_ENABLE([expensivetests],
1471    [AS_HELP_STRING([--enable-expensivetests], [enable running expensive testcases])],
1472    [enable_expensive=${enableval}],
1473    [enable_expensive=no])
1474 AC_MSG_RESULT($enable_expensive)
1475 AM_CONDITIONAL([HAVE_EXPENSIVE_TESTS], [test "x$enable_expensive" = "xyes"])
1476
1477 # should ports be open for Java services?
1478 AC_MSG_CHECKING(whether to enable ports for gnunet-java)
1479 AC_ARG_ENABLE([javaports],
1480    [AS_HELP_STRING([--enable-javaports], [use non-zero ports for services with Java bindings (default is NO)])],
1481    [enable_java_ports=${enableval}],
1482    [enable_java_ports=no])
1483 AC_MSG_RESULT($enable_java_ports)
1484 if test "x$enable_java_ports" = "xyes"
1485 then
1486   JAVAPORT=""
1487 else
1488   JAVAPORT="$UNIXONLY"
1489 fi
1490 AC_SUBST(JAVAPORT)
1491
1492 # should benchmarks be run?
1493 AC_MSG_CHECKING(whether to run benchmarks during make check)
1494 AC_ARG_ENABLE([benchmarks],
1495    [AS_HELP_STRING([--enable-benchmarks], [enable running benchmarks during make check])],
1496    [enable_benchmarks=${enableval}],
1497    [enable_benchmarks=no])
1498 AC_MSG_RESULT($enable_benchmarks)
1499 AM_CONDITIONAL([HAVE_BENCHMARKS], [test "x$enable_benchmarks" = "xyes"])
1500
1501 # should gnunet-testing be compiled
1502 AC_MSG_CHECKING(wether to compile gnunet-testing)
1503 AC_ARG_ENABLE([testing],
1504    [AS_HELP_STRING([--disable-testing], [do not build gnunet-testing])],
1505    [enable_testing=${enableval}],
1506    [enable_testing=yes])
1507 AC_MSG_RESULT($enable_testing)
1508 AM_CONDITIONAL([HAVE_TESTING], [test "x$enable_testing" = "xyes"])
1509
1510 # should experimental code be compiled (code that may not yet compile)?
1511 AC_MSG_CHECKING(whether to compile experimental code)
1512 AC_ARG_ENABLE([experimental],
1513    [AS_HELP_STRING([--enable-experimental], [enable compiling experimental code])],
1514    [enable_experimental=${enableval}],
1515    [enable_experimental=no])
1516 AC_MSG_RESULT($enable_experimental)
1517 AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"])
1518
1519 # should malicious code be compiled (should only be used for testing)?
1520 AC_MSG_CHECKING(whether to compile malicious code)
1521 AC_ARG_ENABLE([malicious],
1522    [AS_HELP_STRING([--enable-malicious], [enable compiling malicious code])],
1523    [if test "x$enableval" = "xno"
1524      then
1525        malicious=0
1526      else
1527        malicious=1
1528      fi],
1529    [malicious=0
1530     enable_malicious=no])
1531 AC_MSG_RESULT($enable_malicious)
1532 AM_CONDITIONAL([ENABLE_MALICIOUS], [test 1=$malicious])
1533 AC_DEFINE_UNQUOTED([ENABLE_MALICIOUS], [$malicious],
1534                    [enable compilation of malicious code])
1535
1536 # should services be started on demand when needed?  Some services may choose to
1537 # never start by default and it is up to the service/module developer to decide
1538 # by having "START_ON_DEMAND = NO" instead of "START_ON_DEMAND = @START_ON_DEMAND@"
1539 # in the service/module's conf.in file.
1540 # See also IMMEDIATE_START for an unconditional immediate start.
1541 START_ON_DEMAND="YES"
1542 AC_MSG_CHECKING(whether to start peer's services on demand by default)
1543 AC_ARG_ENABLE([autostart],
1544    [AS_HELP_STRING([--disable-autostart], [do not start peer's services by default])],
1545    [enable_autostart=${enableval}
1546     if test "x$enable_autostart" = "xno"
1547     then
1548         START_ON_DEMAND="NO"
1549     fi
1550    ],
1551    [enable_autostart=yes])
1552 AC_MSG_RESULT($enable_autostart)
1553 #AM_CONDITIONAL([HAVE_START_ON_DEMAND], [test "x$enable_autostart" = "xyes"])
1554 AC_SUBST(START_ON_DEMAND)
1555
1556 # should memory statistics be kept (very expensive CPU-wise!)
1557 AC_MSG_CHECKING(whether to create expensive statistics on memory use)
1558 AC_ARG_ENABLE([heapstats],
1559    [AS_HELP_STRING([--enable-heapstats], [enable expensive heap statistics])],
1560    [enable_heapstats=1],
1561    [enable_heapstats=0])
1562 AC_MSG_RESULT($enable_heapstats)
1563 AC_DEFINE_UNQUOTED([ENABLE_HEAP_STATISTICS],$enable_heapstats,[enable expensive heap statistics])
1564
1565 # should code be enabled that works around missing OS functionality on Windows?
1566 # used for test cases
1567 if test $build_target = "mingw"
1568 then
1569         workarounds=1
1570
1571 AC_LINK_IFELSE(
1572  [AC_LANG_PROGRAM(
1573   [#include <ws2tcpip.h>
1574   ],[
1575   int s = socket (0, 0, 0);])
1576  ],[
1577   AC_DEFINE_UNQUOTED([HAVE_SOCKET],1,[Define this if socket() is available])
1578  ],[
1579   AC_DEFINE_UNQUOTED([HAVE_SOCKET],0,[Define this if socket() is available])
1580  ])
1581
1582 AC_LINK_IFELSE(
1583  [AC_LANG_PROGRAM(
1584   [#include <ws2tcpip.h>
1585   ],[
1586   int s = select (0, NULL, NULL, NULL, NULL);])
1587  ],[
1588   AC_DEFINE_UNQUOTED([HAVE_SELECT],1,[Define this if select() is available])
1589  ],[
1590   AC_DEFINE_UNQUOTED([HAVE_SELECT],0,[Define this if select() is available])
1591  ])
1592
1593 AC_LINK_IFELSE(
1594  [AC_LANG_PROGRAM(
1595   [#include <ws2tcpip.h>
1596   ],[
1597   struct in_addr i;
1598   char *s = inet_ntoa (i);])
1599  ],[
1600   AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],1,[Define this if inet_ntoa() is available])
1601  ],[
1602   AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],0,[Define this if inet_ntoa() is available])
1603  ])
1604
1605 AC_LINK_IFELSE(
1606  [AC_LANG_PROGRAM(
1607   [#include <ws2tcpip.h>
1608   ],[
1609   int s = getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);])
1610  ],[
1611   AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],1,[Define this if getnameinfo() is available])
1612  ],[
1613   AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],0,[Define this if getnameinfo() is available])
1614  ])
1615
1616 AC_LINK_IFELSE(
1617  [AC_LANG_PROGRAM(
1618   [#include <ws2tcpip.h>
1619   ],[
1620   int s = gethostname (NULL, 0);])
1621  ],[
1622   AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],1,[Define this if gethostname() is available])
1623  ],[
1624   AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],0,[Define this if gethostname() is available])
1625  ])
1626
1627 AC_LINK_IFELSE(
1628  [AC_LANG_PROGRAM(
1629   [#include <ws2tcpip.h>
1630   ],[
1631   void *s = gethostbyname (NULL);])
1632  ],[
1633   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],1,[Define this if gethostbyname() is available])
1634  ],[
1635   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],0,[Define this if gethostbyname() is available])
1636  ])
1637
1638 AC_LINK_IFELSE(
1639  [AC_LANG_PROGRAM(
1640   [#include <ws2tcpip.h>
1641   ],[
1642   void *s = gethostbyaddr (NULL, 0, 0);])
1643  ],[
1644   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],1,[Define this if gethostbyaddr() is available])
1645  ],[
1646   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],0,[Define this if gethostbyaddr() is available])
1647  ])
1648
1649 AC_LINK_IFELSE(
1650  [AC_LANG_PROGRAM(
1651   [#include <ws2tcpip.h>
1652   ],[
1653   int s = getaddrinfo (NULL, NULL, NULL, NULL);])
1654  ],[
1655   AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],1,[Define this if getaddrinfo() is available])
1656  ],[
1657   AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],0,[Define this if getaddrinfo() is available])
1658  ])
1659
1660 else
1661   AC_MSG_CHECKING(whether to enable windows workarounds)
1662   AC_ARG_ENABLE([windows_workarounds],
1663      [AS_HELP_STRING([--enable-windows_workarounds], [enable workarounds used on Windows (only useful for test cases)])],
1664      [enable_workarounds=${enableval}],
1665      [enable_workarounds=no])
1666   AC_MSG_RESULT($enable_workarounds)
1667   if test x$enable_windows_workarounds = "xyes"
1668   then
1669      workarounds=1
1670   else
1671      workarounds=0
1672    fi
1673 fi
1674 AC_DEFINE_UNQUOTED([ENABLE_WINDOWS_WORKAROUNDS], $workarounds, [enable workarounds used on Windows (only useful for test cases)])
1675
1676 # gcov compilation
1677 AC_MSG_CHECKING(whether to compile with support for code coverage analysis)
1678 AC_ARG_ENABLE([coverage],
1679               AS_HELP_STRING([--enable-coverage],
1680                              [compile the library with code coverage support]),
1681               [use_gcov=${enableval}],
1682               [use_gcov=no])
1683 AC_MSG_RESULT($use_gcov)
1684 AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
1685
1686
1687 # version info
1688 # TODO: git blame says this predates our switch to git. git-svn should be adjusted to simply git, or
1689 # an external script that does the job.
1690 AC_PATH_PROG(svnversioncommand, svnversion)
1691 AC_PATH_PROG(gitcommand, git)
1692 AC_MSG_CHECKING(for source being under a VCS)
1693
1694
1695 # version info
1696 AC_PATH_PROG(gitcommand, git)
1697 AC_MSG_CHECKING(for source being under a VCS)
1698 git_version=
1699 AS_IF([test ! "X$gitcommand" = "X"],
1700 [
1701   git_version=$(cd $srcdir ; git rev-list --full-history --all --abbrev-commit | head -n 1 2>/dev/null)
1702 ])
1703 AS_IF([test "X$git_version" = "X"],
1704   [
1705     vcs_name="no"
1706     vcs_version="\"release\""
1707   ],
1708   [
1709     vcs_name="yes, git-svn"
1710     vcs_version="\"git-$git_version\""
1711   ])
1712 AC_MSG_RESULT($vcs_name)
1713
1714 AC_MSG_CHECKING(VCS version)
1715 AC_MSG_RESULT($vcs_version)
1716 AC_DEFINE_UNQUOTED(VCS_VERSION, [$vcs_version], [VCS revision/hash or tarball version])
1717
1718 AC_CONFIG_FILES([
1719 Makefile
1720 contrib/Makefile
1721 doc/Makefile
1722 doc/man/Makefile
1723 doc/doxygen/Makefile
1724 doc/handbook/Makefile
1725 doc/tutorial/Makefile
1726 lint/Makefile
1727 m4/Makefile
1728 po/Makefile.in
1729 src/Makefile
1730 src/arm/Makefile
1731 src/arm/arm.conf
1732 src/ats/Makefile
1733 src/ats/ats.conf
1734 src/ats-tool/Makefile
1735 src/ats-tests/Makefile
1736 src/auction/Makefile
1737 src/block/Makefile
1738 src/cadet/Makefile
1739 src/cadet/cadet.conf
1740 src/core/Makefile
1741 src/core/core.conf
1742 src/consensus/Makefile
1743 src/consensus/consensus.conf
1744 src/conversation/Makefile
1745 src/conversation/conversation.conf
1746 src/curl/Makefile
1747 src/datacache/Makefile
1748 src/datastore/Makefile
1749 src/datastore/datastore.conf
1750 src/dht/Makefile
1751 src/dht/dht.conf
1752 src/dns/Makefile
1753 src/dns/dns.conf
1754 src/exit/Makefile
1755 src/fragmentation/Makefile
1756 src/fs/Makefile
1757 src/fs/fs.conf
1758 src/gns/Makefile
1759 src/gns/gns.conf
1760 src/gns/nss/Makefile
1761 src/gnsrecord/Makefile
1762 src/hello/Makefile
1763 src/identity/Makefile
1764 src/identity/identity.conf
1765 src/credential/Makefile
1766 src/credential/credential.conf
1767 src/include/Makefile
1768 src/integration-tests/Makefile
1769 src/json/Makefile
1770 src/hostlist/Makefile
1771 src/my/Makefile
1772 src/mysql/Makefile
1773 src/namecache/Makefile
1774 src/namecache/namecache.conf
1775 src/namestore/Makefile
1776 src/namestore/namestore.conf
1777 src/nat/Makefile
1778 src/nat/nat.conf
1779 src/nat-auto/Makefile
1780 src/nat-auto/nat-auto.conf
1781 src/nse/Makefile
1782 src/nse/nse.conf
1783 src/nt/Makefile
1784 src/peerinfo/Makefile
1785 src/peerinfo/peerinfo.conf
1786 src/peerinfo-tool/Makefile
1787 src/peerstore/Makefile
1788 src/peerstore/peerstore.conf
1789 src/pq/Makefile
1790 src/pt/Makefile
1791 src/regex/Makefile
1792 src/regex/regex.conf
1793 src/revocation/Makefile
1794 src/revocation/revocation.conf
1795 src/rps/Makefile
1796 src/rps/rps.conf
1797 src/secretsharing/Makefile
1798 src/secretsharing/secretsharing.conf
1799 src/scalarproduct/Makefile
1800 src/scalarproduct/scalarproduct.conf
1801 src/set/Makefile
1802 src/set/set.conf
1803 src/sq/Makefile
1804 src/statistics/Makefile
1805 src/statistics/statistics.conf
1806 src/template/Makefile
1807 src/testbed/Makefile
1808 src/testbed/testbed.conf
1809 src/testbed-logger/Makefile
1810 src/testbed-logger/testbed-logger.conf
1811 src/testing/Makefile
1812 src/topology/Makefile
1813 src/transport/Makefile
1814 src/transport/transport.conf
1815 src/util/Makefile
1816 src/util/resolver.conf
1817 src/vpn/Makefile
1818 src/vpn/vpn.conf
1819 src/zonemaster/Makefile
1820 src/zonemaster/zonemaster.conf
1821 src/rest/Makefile
1822 src/rest-plugins/Makefile
1823 src/abe/Makefile
1824 src/reclaim-attribute/Makefile
1825 src/reclaim/Makefile
1826 pkgconfig/Makefile
1827 pkgconfig/gnunetarm.pc
1828 pkgconfig/gnunetats.pc
1829 pkgconfig/gnunetblock.pc
1830 pkgconfig/gnunetcadet.pc
1831 pkgconfig/gnunetconsensus.pc
1832 pkgconfig/gnunetconversation.pc
1833 pkgconfig/gnunetcore.pc
1834 pkgconfig/gnunetdatacache.pc
1835 pkgconfig/gnunetdatastore.pc
1836 pkgconfig/gnunetdht.pc
1837 pkgconfig/gnunetdns.pc
1838 pkgconfig/gnunetenv.pc
1839 pkgconfig/gnunetfragmentation.pc
1840 pkgconfig/gnunetfs.pc
1841 pkgconfig/gnunetgns.pc
1842 pkgconfig/gnunethello.pc
1843 pkgconfig/gnunetidentity.pc
1844 pkgconfig/gnunetmicrophone.pc
1845 pkgconfig/gnunetmysql.pc
1846 pkgconfig/gnunetnamestore.pc
1847 pkgconfig/gnunetnat.pc
1848 pkgconfig/gnunetnse.pc
1849 pkgconfig/gnunetpeerinfo.pc
1850 pkgconfig/gnunetpq.pc
1851 pkgconfig/gnunetregex.pc
1852 pkgconfig/gnunetrevocation.pc
1853 pkgconfig/gnunetrps.pc
1854 pkgconfig/gnunetscalarproduct.pc
1855 pkgconfig/gnunetset.pc
1856 pkgconfig/gnunetspeaker.pc
1857 pkgconfig/gnunetstatistics.pc
1858 pkgconfig/gnunettestbed.pc
1859 pkgconfig/gnunettesting.pc
1860 pkgconfig/gnunettransport.pc
1861 pkgconfig/gnunetutil.pc
1862 pkgconfig/gnunetvpn.pc
1863 ])
1864 AC_OUTPUT
1865
1866 # Finally: summary!
1867
1868 # warn user if mysql found but not used due to version
1869 AS_IF([test "$mysqlfail" = "true"]
1870       [AC_MSG_NOTICE([WARNING: optional MySQL not found (or too old)])])
1871
1872 # sqlite
1873 AS_IF([test "x$sqlite" = "x0"],
1874       [AC_MSG_ERROR([ERROR: sqlite3 not found, but sqlite3 is required.])])
1875
1876 # libgnurl
1877 AS_IF([test "$gnurl" = "0"],
1878   [AS_IF([test "x$curl" = "xfalse"],
1879     [AC_MSG_NOTICE([WARNING: libgnurl not found.  http client support will not be compiled.])
1880      AC_MSG_WARN([ERROR: libgnurl not found.  hostlist daemon will not be compiled, and you probably WANT the hostlist daemon])],
1881     [AC_MSG_NOTICE([WARNING: libgnurl not found, trying to use libcurl-gnutls instead.])])])
1882
1883 # bluetooth
1884 AS_IF([test "x$bluetooth" = "x0"],
1885       [AC_MSG_NOTICE([WARNING: optional bluetooth library not found.])])
1886
1887
1888 # jansson
1889 AS_IF([test "x$jansson" = "x0"],
1890       [AC_MSG_NOTICE([WARNING: optional jansson library not found.])])
1891
1892 #
1893 # FIXME: `some modules' -> be more specific which exact modules.
1894 #
1895
1896 # warn user if iptables is not found
1897 AS_IF([test "$VAR_IPTABLES_BINARY" = "false"],
1898  [AC_MSG_NOTICE([WARNING: optional iptables not found])])
1899
1900 # warn user if ifconfig is not found
1901 AS_IF([test "$VAR_IFCONFIG_BINARY" = "false"],
1902  [AC_MSG_NOTICE([WARNING: optional ifconfig not found])])
1903
1904 # warn user if upnpc binary is not found
1905 AS_IF([test "$VAR_UPNPC_BINARY" = "false"],
1906   [AC_MSG_NOTICE([WARNING: optional upnpc binary not found])])
1907
1908 #gnutls
1909 AS_IF([test x$gnutls != xtrue],
1910  [AC_MSG_NOTICE([WARNING: GnuTLS not found, gnunet-gns-proxy will not be built])],
1911  [AS_IF([test "x$gnutls_dane" != "x1"],
1912   [AC_MSG_NOTICE([WARNING: GnuTLS has no DANE support, DANE validation will not be possible])])])
1913
1914 # java ports
1915 AS_IF([test "x$enable_java_ports" = "xyes"],
1916       [AC_MSG_NOTICE([NOTICE: Opening ports for gnunet-java bindings by default.])])
1917
1918 # MHD
1919 AS_IF([test "x$lmhd" != "x1"],
1920       [AC_MSG_NOTICE([WARNING: optional libmicrohttpd not found])])
1921
1922 # conversation
1923 AS_IF([test "x$conversation_backend" = "xnone"],
1924  [AS_IF([test "x$pulse" != "x1"],
1925    [AC_MSG_NOTICE([WARNING: libpulse(audio) not found, conversation will not be built.])])
1926   AS_IF([test "x$opus" != "x1"],
1927    [AC_MSG_NOTICE([WARNING: libopus not found, conversation will not be built.])])
1928   AS_IF([test "x$gst" != "x1"],
1929    [AC_MSG_NOTICE([WARNING: GStreamer not found, conversation will not be built.])])])
1930
1931 AS_IF([test "$extractor" != 1],
1932       [AC_MSG_WARN([ERROR: libextractor not found, but various file-sharing functions require it])])
1933
1934 AS_IF([test "x$working_libidn2" = x1],
1935       [AC_MSG_NOTICE([INFO: Using libidn2])])
1936 AS_IF([test "x$working_libidn1" = x1],
1937       [AC_MSG_NOTICE([INFO: Using libidn1])])
1938
1939 AC_MSG_NOTICE([NOTICE: Database support is set to MySQL: $mysql, SQLite: $sqlite, Postgres: $postgres])
1940
1941 AS_IF([test "$enable_framework_build" = "yes"],
1942       [AC_MSG_NOTICE([Mac OS X framework build enabled.])])
1943
1944 AC_MSG_NOTICE([********************************************
1945 Please make sure NOW that you have created a user and group 'gnunet'
1946 and additionally a group 'gnunetdns'. On Debian and Ubuntu GNU/Linux, type:
1947         addgroup gnunetdns
1948         adduser --system --group --disabled-login --home /var/lib/gnunet gnunet
1949
1950 Make sure that '/var/lib/gnunet' is owned (and writable) by user
1951 'gnunet'.  Then, you can compile GNUnet with
1952         make
1953
1954 After that, run (if necessary as 'root')
1955         make install
1956 to install everything.
1957
1958 Each GNUnet user should be added to the 'gnunet' group (may
1959 require fresh login to come into effect):
1960         adduser USERNAME gnunet
1961 (run the above command as root once for each of your users, replacing
1962 "USERNAME" with the respective login names).  If you have a global IP
1963 address, no further configuration is required.
1964
1965 For more detailed setup instructions, see https://docs.gnunet.org/
1966
1967 Optionally, download and compile gnunet-gtk to get a GUI for
1968 file-sharing and configuration.  This is particularly recommended
1969 if your network setup is non-trivial, as gnunet-setup can be
1970 used to test in the GUI if your network configuration is working.
1971 gnunet-setup should be run as the "gnunet" user under X.  As it
1972 does very little with the network, running it as "root" is likely
1973 also harmless.  You can also run it as a normal user, but then
1974 you have to copy ~/.gnunet/gnunet.conf" over to the "gnunet" user's
1975 home directory in the end.
1976
1977 Once you have configured your peer, run (as the 'gnunet' user)
1978         gnunet-arm -s
1979 to start the peer.  You can then run the various GNUnet-tools as
1980 your "normal" user (who should only be in the group 'gnunet').
1981 ********************************************])