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