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