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