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