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