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