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