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