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