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