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