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