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