1 # This file is part of GNUnet.
2 # (C) 2001--2018 GNUnet e.V.
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.
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.
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/>.
18 # Process this file with autoconf to produce a configure script.
22 # Checks for programs.
23 AC_INIT([gnunet], [0.11.0pre66], [bug-gnunet@gnu.org])
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])
43 LT_INIT([disable-static dlopen win32-dll])
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;
55 CFLAGS="-fno-strict-aliasing $CFLAGS"
58 # Use Linux interface name unless the OS has a different preference
59 DEFAULT_INTERFACE="\"eth0\""
61 funcstocheck="getnameinfo gethostname gethostbyname gethostbyaddr getaddrinfo getaddrinfo_a"
63 # Srcdir in a form that native compiler understands (i.e. DOS path on W32)
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])
74 DEFAULT_INTERFACE="\"en0\""
80 AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux kernel])
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"
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"
106 AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
107 AC_DEFINE_UNQUOTED(NETBSD,1,[This is a NetBSD system])
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"
123 AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux kernel])
124 CFLAGS="-D_REENTRANT -fPIC -pipe $CFLAGS"
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"
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"
156 native_srcdir=$(cd $srcdir; pwd -W)
159 AC_DEFINE_UNQUOTED(GNU,1,[This is a GNU system])
164 AC_MSG_RESULT(Unrecognised OS $host_os)
165 AC_DEFINE_UNQUOTED(OTHEROS,1,[Some strange OS])
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)
172 # Disable TCP-based IPC on systems that support UNIX domain
173 # sockets in default configuratin:
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")
187 AC_MSG_RESULT([$build_target])
188 AC_SUBST(build_target)
189 AM_CONDITIONAL([am__fastdepOBJC], false)
190 AC_UNALIGNED_64_ACCESS
192 # some other checks for standard libs
193 AC_SEARCH_LIBS([gethostbyname], [nsl ws2_32])
194 AC_CHECK_LIB(socket, socket)
196 AC_CHECK_LIB(c, getloadavg, AC_DEFINE(HAVE_GETLOADAVG,1,[getloadavg supported]))
198 AC_CHECK_PROG(VAR_GETOPT_BINARY, getopt, true, false)
199 AM_CONDITIONAL(HAVE_GETOPT_BINARY, $VAR_GETOPT_BINARY)
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
206 # iptables is a soft requirement to run tests
207 AC_PATH_TARGET_TOOL(VAR_IPTABLES_BINARY, iptables, false)
209 if test x"$VAR_IPTABLES_BINARY" != x"false"
211 if test -x "/sbin/iptables"
213 VAR_IPTABLES_BINARY="/sbin/iptables"
214 elif test -x "/usr/sbin/iptables"
216 VAR_IPTABLES_BINARY="/usr/sbin/iptables"
220 if test x"$VAR_IPTABLES_BINARY" != x"false"
222 AC_DEFINE_UNQUOTED([IPTABLES], "$VAR_IPTABLES_BINARY", [Path to iptables])
224 AC_MSG_WARN([warning: 'iptables' not found.])
227 AC_PATH_TARGET_TOOL(VAR_IFCONFIG_BINARY, ifconfig, false)
229 AC_CHECK_PROG(VAR_IFCONFIG_BINARY, ifconfig, true, false)
230 if test x"$VAR_IFCONFIG_BINARY" != x"false"
232 if test -x "/sbin/ifconfig"
234 VAR_IFCONFIG_BINARY="/sbin/ifconfig"
235 elif test -x "/usr/sbin/ifconfig"
237 VAR_IFCONFIG_BINARY="/usr/sbin/ifconfig"
240 if test x"$VAR_IFCONFIG_BINARY" != x"false"
242 AC_DEFINE_UNQUOTED([IFCONFIG], "$VAR_IFCONFIG_BINARY", [Path to ifconfig])
244 AC_MSG_WARN([warning: 'ifconfig' not found.])
248 # miniupnpc / upnpc binary is a soft runtime requirement
249 AC_PATH_TARGET_TOOL(VAR_UPNPC_BINARY, upnpc, false)
251 if test x"$VAR_UPNPC_BINARY" != x"false"
253 AC_DEFINE_UNQUOTED([UPNPC], "$VAR_UPNPC_BINARY", [Path to upnpc binary])
255 AC_MSG_WARN([warning: 'upnpc' binary not found.])
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.])],
264 AC_CHECK_DECLS([_stati64])
266 # 'save' libs; only those libs found so far will be
267 # linked against _everywhere_. For the others, we
268 # will be more selective!
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])
275 # tests only run on Windows
276 if test "x$build_target" = "xmingw"
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])])
285 NEED_LIBGCRYPT_VERSION=1.6.0
288 AM_PATH_LIBGCRYPT("$NEED_LIBGCRYPT_API:$NEED_LIBGCRYPT_VERSION", gcrypt=1)
289 AC_CHECK_DECLS([gcry_mpi_set_opaque_copy], [], [], [[#include <gcrypt.h>]])
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)
302 AC_DEFINE_UNQUOTED([NEED_LIBGCRYPT_VERSION], "$NEED_LIBGCRYPT_VERSION", [required libgcrypt version])
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])
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"
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"
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"
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\)])
345 AC_DEFINE_UNQUOTED([GNUNET_EXTRA_LOGGING],[$extra_logging],[1 if extra logging is enabled, 2 for very verbose extra logging, 0 otherwise])
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}],
353 if test "x$extra_logging" != "xGNUNET_NO"; then
354 enable_poisoning="defaults to yes (extra logging is enabled)"
359 AC_MSG_RESULT($enable_poisoning)
360 if test ! "x$enable_poisoning" = "xno"; then
365 AC_DEFINE_UNQUOTED([ENABLE_POISONING],[$enable_poisoning],[1 if freed memory should be poisoned, 0 otherwise])
367 if test $build = $target
369 AC_MSG_CHECKING([for working HMAC])
371 LIBS="$LIBS $LIBGCRYPT_LIBS"
372 CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
374 [AC_LANG_PROGRAM([#include <gcrypt.h>
375 #include <stdio.h>], [[
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};
389 if (!gcry_check_version (GCRYPT_VERSION))
391 fprintf (stderr, "Version mismatch %s <-> %s \n", gcry_check_version (NULL), GCRYPT_VERSION);
395 gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
396 gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
398 if (gcry_md_open(&mac, GCRY_MD_SHA512, GCRY_MD_FLAG_HMAC) != GPG_ERR_NO_ERROR)
400 fprintf (stderr, "gcry_md_open error\n");
404 gcry_md_setkey (mac, key, sizeof (key));
405 gcry_md_write (mac, data, sizeof (data));
407 if (memcmp(gcry_md_read (mac, 0), result, gcry_md_get_algo_dlen (gcry_md_get_algo (mac))) != 0)
409 fprintf (stderr, "memcmp error\n");
417 [AC_MSG_RESULT([yes])],
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.])
426 AC_MSG_FAILURE([HMAC test failed])
430 AC_MSG_FAILURE([libgcrypt header version does not match library version])
433 [AC_MSG_RESULT([cross compiling, test skipped])])
435 fi # $build = $target
437 # check for bluetooth library
439 AC_CHECK_LIB(bluetooth, ba2str,[AC_CHECK_HEADER([bluetooth/bluetooth.h],bluetooth=1)])
440 if test "$build_target" = "mingw"
444 AM_CONDITIONAL(HAVE_LIBBLUETOOTH, [test "$bluetooth" = 1])
445 if test "$bluetooth" = 1
447 AC_DEFINE([HAVE_LIBBLUETOOTH],[1],[Have bluetooth library])
449 AC_DEFINE([HAVE_LIBBLUETOOTH],[0],[Lacking bluetooth library])
452 # check for jansson library
454 AC_MSG_CHECKING(for libjansson)
456 [ --with-jansson=PFX base of libjansson installation],
457 [AC_MSG_RESULT([$with_jansson])
458 case $with_jansson in
462 AC_CHECK_HEADERS(jansson.h,
463 AC_CHECK_LIB([jansson], [json_loads],
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"
476 [AC_MSG_RESULT([--with-jansson not specified])
477 AC_CHECK_HEADERS(jansson.h,
478 AC_CHECK_LIB([jansson], [json_loads],
480 AM_CONDITIONAL(HAVE_JANSSON, [test "$jansson" = 1])
481 if test "x$jansson" = x1
483 AC_DEFINE([HAVE_JANSSON],[1],[Have jansson library])
485 AC_DEFINE([HAVE_JANSSON],[0],[Lacking jansson library])
489 # check for libpulse(audio) library
491 AC_CHECK_LIB(pulse,pa_stream_peek,
492 [AC_CHECK_HEADER([pulse/simple.h],pulse=1)])
493 if test "$build_target" = "mingw"
499 AC_DEFINE([HAVE_PULSE],[1],[Have libpulse(audio) library])
502 # check for libopus(audio) library
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>]]
512 AC_DEFINE([HAVE_OPUS],[1],[Have libopus library])
516 AC_CHECK_LIB(ogg, ogg_stream_flush_fill,
517 [AC_CHECK_HEADERS([ogg/ogg.h],
518 AM_CONDITIONAL(HAVE_OGG, true)
520 AC_DEFINE(HAVE_OGG,1,[Have ogg]),
521 AM_CONDITIONAL(HAVE_OGG, false)
523 AC_DEFINE(HAVE_OGG,0,[lacking ogg]))],
524 AM_CONDITIONAL(HAVE_OGG, false)
528 PKG_CHECK_MODULES([GLIB], [glib-2.0],
529 # check for pbc library
531 AC_CHECK_HEADER([pbc/pbc.h],pbc=1)
532 AC_CHECK_HEADER([gabe.h],abe=1)
533 AM_CONDITIONAL(HAVE_PBC, [test "$pbc" = 1])
534 AM_CONDITIONAL(HAVE_ABE, [test "$abe" = 1])
537 AC_DEFINE([HAVE_PBC],[1],[Have pbc library])
539 AC_DEFINE([HAVE_PBC],[0],[Lacking pbc library])
543 AC_DEFINE([HAVE_ABE],[1],[Have ABE library])
545 AC_DEFINE([HAVE_ABE],[0],[Lacking ABE library])
549 AM_CONDITIONAL(HAVE_PBC, [0])
550 AM_CONDITIONAL(HAVE_ABE, [0])
551 AC_DEFINE([HAVE_PBC],[0],[Lacking glib library])
557 [glib-2.0 gobject-2.0 gstreamer-1.0 gstreamer-app-1.0 gstreamer-audio-1.0],
563 AC_MSG_RESULT(not found)
567 if test "x$pulse" != "x1" -o "x$opus" != "x1" -o "x$ogg" != "x1"
569 if test "x$gst" != "x1"
571 conversation_backend=none
572 AM_CONDITIONAL(BUILD_PULSE_HELPERS, false)
573 AM_CONDITIONAL(BUILD_GST_HELPERS, false)
574 AM_CONDITIONAL(BUILD_EXPERIMENTAL_HELPERS, false)
576 conversation_backend=gst
577 AM_CONDITIONAL(BUILD_PULSE_HELPERS, false)
578 AM_CONDITIONAL(BUILD_GST_HELPERS, true)
579 AM_CONDITIONAL(BUILD_EXPERIMENTAL_HELPERS, false)
583 conversation_backend=pulse
584 AM_CONDITIONAL(BUILD_PULSE_HELPERS, true)
585 AM_CONDITIONAL(BUILD_GST_HELPERS, false)
586 AM_CONDITIONAL(BUILD_EXPERIMENTAL_HELPERS, false)
590 LIBGNURL_CHECK_CONFIG(,7.34.0,gnurl=1,gnurl=0)
593 AM_CONDITIONAL(HAVE_LIBGNURL, true)
594 AC_DEFINE([HAVE_LIBGNURL],[1],[Have libgnurl])
596 AM_CONDITIONAL(HAVE_LIBGNURL, false)
597 AC_DEFINE([HAVE_LIBGNURL],[0],[Lacking libgnurl])
600 SAVE_CPPFLAGS=$CPPFLAGS
601 CPPFLAGS="$LIBGNURL_CPPFLAGS $LIBCURL_CPPFLAGS $CPPFLAGS"
602 LIBS="$LIBGNURL $LIBCURL $LIBS"
605 LIBCURL_CHECK_CONFIG(,7.34.0,[curl=true],[curl=false])
606 if test "x$curl" = xtrue
609 AC_CHECK_HEADERS([curl/curl.h],
610 AC_CHECK_DECLS(CURLINFO_TLS_SESSION,[curl=true],[curl=false],[[#include <curl/curl.h>]]),
612 AC_CHECK_HEADERS([gnurl/curl.h],
613 AC_CHECK_DECLS(CURLINFO_TLS_SESSION,[curl=true],,[[#include <gnurl/curl.h>]]))
614 # need libcurl-gnutls.so, everything else is not acceptable
615 AC_CHECK_LIB([curl-gnutls],[curl_easy_getinfo],,[curl=false])
616 # cURL must support CURLINFO_TLS_SESSION, version >= 7.34
619 # Check for curl/curl.h and gnurl/curl.h so we can use #ifdef
620 # HAVE_CURL_CURL_H later (the above LIBCURL_CHECK_CONFIG accepted
621 # *either* header set).
622 AC_CHECK_HEADERS([curl/curl.h],,
624 AC_CHECK_HEADERS([gnurl/curl.h],,
629 if test x$curl = xfalse
631 AM_CONDITIONAL(HAVE_LIBCURL, false)
634 AC_MSG_WARN([ERROR: GNUnet requires libcurl-gnutls or gnurl >= 7.34])
637 AM_CONDITIONAL(HAVE_LIBCURL, true)
638 AC_DEFINE([HAVE_LIBCURL],[1],[Have CURL])
642 # restore LIBS & CPPFLAGS
644 CPPFLAGS=$SAVE_CPPFLAGS
646 AC_CHECK_HEADERS([glpk.h],[glpk=true],[gplk=false])
647 # GLPK must support glpk_init_env, version >= 4.43
648 AC_CHECK_LIB([glpk],[glp_init_env],,[gplk=false])
649 # GLPK must support atm MLP presolving, version >= 4.32
650 AC_CHECK_MEMBERS(glp_iocp.presolve,,[gplk=false],[[#include <glpk.h>]])
651 if test x$gplk = xfalse
653 AM_CONDITIONAL(HAVE_LIBGLPK, false)
654 AC_MSG_WARN([ERROR: GNUnet requires GLPK >= 4.32])
656 AM_CONDITIONAL(HAVE_LIBGLPK, true)
657 AC_DEFINE([HAVE_LIBGLPK],[1],[Have GLPK])
661 AC_CHECK_HEADERS([nss.h],[nss=true],[nss=false])
662 if test x$nss = xfalse
664 AM_CONDITIONAL(HAVE_GLIBCNSS, false)
665 AC_MSG_WARN([ERROR: No GNU libc nss header, will not build NSS plugin])
667 AM_CONDITIONAL(HAVE_GLIBCNSS, true)
672 # test for kvm and kstat (for CPU stats under BSD/Solaris)
673 AC_CHECK_LIB([kvm],[kvm_open])
674 AC_CHECK_LIB([kstat],[kstat_open])
677 # should the build process be building the documentation?
678 AC_MSG_CHECKING(whether to build documentation)
679 AC_ARG_ENABLE([documentation],
680 [AS_HELP_STRING([--enable-documentation], [build the documentation])],
681 [documentation=${enableval}],
683 AC_MSG_RESULT($documentation)
684 if test "x$documentation" = "xyes"
686 AM_CONDITIONAL([DOCUMENTATION],true)
687 AC_DEFINE([DOCUMENTATION],[1],[Building the documentation])
689 AM_CONDITIONAL([DOCUMENTATION],false)
690 AC_DEFINE([DOCUMENTATION],[0],[Not building the documentation])
693 # should the build process be building only the documentation?
694 AC_MSG_CHECKING(whether to build only documentation)
695 AC_ARG_ENABLE([documentation-only],
696 [AS_HELP_STRING([--enable-documentation-only], [build only the documentation])],
697 [documentation_only=${enableval}],
698 [documentation_only=no])
699 AC_MSG_RESULT($documentation_only)
700 if test "x$documentation_only" = "xyes"
702 AM_CONDITIONAL([DOCUMENTATION_ONLY],true)
703 AC_DEFINE([DOCUMENTATION_ONLY],[1],[Building only the documentation])
705 AM_CONDITIONAL([DOCUMENTATION_ONLY],false)
706 AC_DEFINE([DOCUMENTATION_ONLY],[0],[Not building only the documentation])
709 # should the build process be restricted to the code required
710 # for GNU Taler wallets?
711 AC_MSG_CHECKING(whether to compile GNU Taler Wallet library ONLY)
712 AC_ARG_ENABLE([taler-wallet],
713 [AS_HELP_STRING([--enable-taler-wallet], [only compile for Taler wallet])],
714 [taler_only=${enableval}],
716 AC_MSG_RESULT($taler_only)
717 if test "x$taler_only" = "xyes"
719 AM_CONDITIONAL([TALER_ONLY],true)
720 AC_DEFINE([TALER_WALLET_ONLY],[1],[Compiling for Taler wallet])
722 AM_CONDITIONAL([TALER_ONLY],false)
723 AC_DEFINE([TALER_WALLET_ONLY],[0],[Canonical compilation])
726 # test for libextractor
728 AC_MSG_CHECKING(for libextractor)
729 AC_ARG_WITH(extractor,
730 [ --with-extractor=PFX base of libextractor installation],
731 [AC_MSG_RESULT([$with_extractor])
732 case $with_extractor in
736 AC_CHECK_HEADERS(extractor.h,
737 AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
741 LDFLAGS="-L$with_extractor/lib $LDFLAGS"
742 CPPFLAGS="-I$with_extractor/include $CPPFLAGS"
743 AC_CHECK_HEADERS(extractor.h,
744 AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
745 EXT_LIB_PATH="-L$with_extractor/lib $EXT_LIB_PATH"
750 [AC_MSG_RESULT([--with-extractor not specified])
751 AC_CHECK_HEADERS(extractor.h,
752 AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
757 if test "$extractor" != 1
759 AM_CONDITIONAL(HAVE_LIBEXTRACTOR, false)
760 AC_DEFINE([HAVE_LIBEXTRACTOR],[0],[Lacking libextractor])
762 AM_CONDITIONAL(HAVE_LIBEXTRACTOR, true)
763 AC_DEFINE([HAVE_LIBEXTRACTOR],[1],[Have libextractor])
767 if test "$taler_only" != yes
770 # Check for libltdl header (#2999)
772 AC_MSG_CHECKING(for libltdl)
774 [ --with-ltdl=PFX base of libltdl installation],
775 [AC_MSG_RESULT([$with_ltdl])
780 AC_CHECK_HEADERS(ltdl.h,
781 AC_CHECK_LIB([ltdl], [lt_dlopenext],
785 LDFLAGS="-L$with_ltdl/lib $LDFLAGS"
786 CPPFLAGS="-I$with_ltdl/include $CPPFLAGS"
787 AC_CHECK_HEADERS(ltdl.h,
788 AC_CHECK_LIB([ltdl], [lt_dlopenext],
789 EXT_LIB_PATH="-L$with_ltdl/lib $EXT_LIB_PATH"
794 [AC_MSG_RESULT([--with-ltdl not specified])
795 AC_CHECK_HEADERS(ltdl.h,
796 AC_CHECK_LIB([ltdl], [lt_dlopenext],
800 AC_MSG_RESULT([libltdl found])
802 AC_MSG_ERROR([GNUnet requires libltdl (from GNU libtool), try installing libltdl-dev])
809 AC_MSG_CHECKING([if Libidn can be used])
810 AC_ARG_WITH(libidn, AC_HELP_STRING([--with-libidn=[DIR]],
811 [Support IDN (needs GNU Libidn)]),
812 libidn=$withval, libidn=yes)
813 if test "$libidn" != "no"; then
814 if test "$libidn" != "yes"; then
815 LDFLAGS="${LDFLAGS} -L$libidn/lib"
816 CPPFLAGS="${CPPFLAGS} -I$libidn/include"
820 AC_CHECK_HEADER(idna.h,
821 AC_CHECK_LIB(idn, stringprep_check_version,
822 [libidn=yes LIBS="${LIBS} -lidn"], []), [])
823 if test "$libidn" != "yes"; then
824 AC_MSG_FAILURE([GNUnet requires libidn.
825 libidn-1.13 should be sufficient, newer versions work too.])
827 AC_MSG_RESULT($libidn)
831 SAVE_LDFLAGS=$LDFLAGS
832 SAVE_CPPFLAGS=$CPPFLAGS
834 [ --with-zlib[[=DIR]] use libz in DIR],
835 [AS_IF([test "$withval" = "no"],
836 [AC_MSG_ERROR([GNUnet requires zlib])],
837 [test "$withval" != "yes"],
840 CPPFLAGS="${CPPFLAGS} -I$withval/include"
841 LDFLAGS="${LDFLAGS} -L$withval/lib"
844 AC_CHECK_HEADER(zlib.h,
846 [AC_MSG_ERROR([GNUnet requires zlib])])
847 AC_CHECK_LIB(z, compress2,
849 AC_DEFINE([HAVE_ZLIB], [], [Have compression library])
850 if test "x${Z_DIR}" != "x"; then
851 Z_CFLAGS="-I${Z_DIR}/include"
852 Z_LIBS="-L${Z_DIR}/lib -lz"
856 [AC_MSG_ERROR([GNUnet requires zlib])])
860 if test "$enable_shared" = "no"
862 AC_MSG_ERROR([GNUnet only works with shared libraries. Sorry.])
876 # test for libunistring
878 if test $HAVE_LIBUNISTRING != yes; then
879 AC_MSG_ERROR([GNUnet requires libunistring])
881 # under emscripten, $gl_libunistring_hexversion is undefined
882 if test "$taler_only" != yes; then
883 if test "x$gl_libunistring_hexversion" = "x" || test "$gl_libunistring_hexversion" -le 2305; then
884 AC_MSG_ERROR([GNUnet requires libunistring >= 0.9.1.1])
887 AC_CHECK_HEADERS([unistr.h],,AC_MSG_ERROR([Compiling GNUnet requires unistr.h (from libunistring) to be installed]))
894 # Checks for standard header files.
898 # Check for headers that are ALWAYS required
899 AC_CHECK_HEADERS([fcntl.h math.h errno.h ctype.h limits.h stdio.h stdlib.h string.h unistd.h stdarg.h signal.h locale.h sys/stat.h sys/types.h],,AC_MSG_ERROR([Compiling GNUnet requires standard UNIX headers files]))
903 # Checks for headers that are only required on some systems or opional (and where we do NOT abort if they are not there)
904 AC_CHECK_HEADERS([malloc.h malloc/malloc.h malloc/malloc_np.h langinfo.h sys/param.h sys/mount.h sys/statvfs.h sys/select.h sockLib.h sys/mman.h sys/msg.h sys/vfs.h arpa/inet.h fcntl.h libintl.h netdb.h netinet/in.h sys/ioctl.h sys/socket.h sys/time.h unistd.h kstat.h sys/sysinfo.h kvm.h sys/file.h sys/resource.h ifaddrs.h mach/mach.h stddef.h sys/timeb.h terminos.h argz.h ucred.h sys/ucred.h endian.h sys/endian.h execinfo.h byteswap.h])
906 # FreeBSD requires something more funky for netinet/in_systm.h and netinet/ip.h...
907 AC_CHECK_HEADERS([sys/types.h netinet/in_systm.h netinet/in.h netinet/ip.h],,,
908 [#ifdef HAVE_SYS_TYPES_H
909 #include <sys/types.h>
911 #ifdef HAVE_NETINET_IN_SYSTM_H
912 #include <netinet/in_systm.h>
914 #ifdef HAVE_NETINET_IN_H
915 #include <netinet/in.h>
919 SAVE_LDFLAGS=$LDFLAGS
920 SAVE_CPPFLAGS=$CPPFLAGS
924 AC_MSG_CHECKING(for SQLite)
926 [ --with-sqlite=PFX base of SQLite installation],
927 [AC_MSG_RESULT("$with_sqlite")
932 AC_CHECK_HEADERS(sqlite3.h,
936 LDFLAGS="-L$with_sqlite/lib $LDFLAGS"
937 CPPFLAGS="-I$with_sqlite/include $CPPFLAGS"
938 AC_CHECK_HEADERS(sqlite3.h,
939 EXT_LIB_PATH="-L$with_sqlite/lib $EXT_LIB_PATH"
940 SQLITE_LDFLAGS="-L$with_sqlite/lib"
941 SQLITE_CPPFLAGS="-I$with_sqlite/include"
943 LDFLAGS=$SAVE_LDFLAGS
944 CPPFLAGS=$SAVE_CPPFLAGS
948 [AC_MSG_RESULT([--with-sqlite not specified])
949 AC_CHECK_HEADERS(sqlite3.h, sqlite=true)])
950 AM_CONDITIONAL(HAVE_SQLITE, test x$sqlite = xtrue)
951 AC_SUBST(SQLITE_CPPFLAGS)
952 AC_SUBST(SQLITE_LDFLAGS)
954 LDFLAGS=$SAVE_LDFLAGS
955 CPPFLAGS=$SAVE_CPPFLAGS
959 # even running the check for postgres breaks emscripten ...
960 if test "$taler_only" != yes; then
961 AX_LIB_POSTGRESQL([9.5])
962 if test "x$found_postgresql" = "xyes"; then
963 CPPFLAGS="$CPPFLAGS $POSTGRESQL_CPPFLAGS"
964 AC_CHECK_HEADERS([libpq-fe.h],
968 AM_CONDITIONAL(HAVE_POSTGRESQL, test x$postgres = xtrue)
971 LDFLAGS=$SAVE_LDFLAGS
972 CPPFLAGS=$SAVE_CPPFLAGS
975 AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include <sys/types.h>])
976 AC_CHECK_TYPES([size_t], [], [], [#include <stdio.h>])
978 if test "$build_target" = "mingw"
980 CYGWIN_MYSQL_MAGIC="#include <mysql/my_global.h>"
986 SAVE_LDFLAGS=$LDFLAGS
987 SAVE_CPPFLAGS=$CPPFLAGS
988 AC_MSG_CHECKING(for mysql)
990 [ --with-mysql=PFX base of MySQL installation],
991 [AC_MSG_RESULT([$with_mysql])
996 AC_CHECK_HEADERS(mysql/mysql.h,
997 AC_CHECK_LIB(mysqlclient, mysql_init,
999 mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
1002 LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql $LDFLAGS $ZLIBS"
1003 CPPFLAGS="-I$with_mysql/include $CPPFLAGS"
1004 AC_CHECK_HEADERS(mysql/mysql.h,
1005 AC_CHECK_LIB(mysqlclient, mysql_init,
1006 MYSQL_LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql"
1007 MYSQL_CPPFLAGS="-I$with_mysql/include"
1009 mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
1013 [AC_MSG_RESULT([--with-mysql not specified])
1014 if test -d "/usr/lib64/mysql"; then
1015 MYSQL_LIBDIR="/usr/lib64/mysql"
1016 elif test -d "/usr/lib/mysql"; then
1017 MYSQL_LIBDIR="/usr/lib/mysql"
1019 MYSQL_LIBDIR="/usr/lib"
1021 LDFLAGS="-L$MYSQL_LIBDIR $LDFLAGS $ZLIBS"
1022 AC_CHECK_LIB(mysqlclient, mysql_init,
1023 [AC_CHECK_HEADERS(mysql/mysql.h,
1024 MYSQL_LDFLAGS="-L$MYSQL_LIBDIR"
1027 , [], [$CYGWIN_MYSQL_MAGIC])])
1030 AC_SUBST(MYSQL_LDFLAGS)
1031 AC_SUBST(MYSQL_CPPFLAGS)
1033 # additional version check for mysql
1034 AC_ARG_ENABLE(mysql-version-check, [ --disable-mysql-version-check do not check MySQL version],, enable_mysql_version_check=yes)
1035 if test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes"
1037 AC_MSG_CHECKING(mysql version)
1038 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1039 [[$CYGWIN_MYSQL_MAGIC
1040 #include <mysql/mysql.h>]],
1042 #if (MYSQL_VERSION_ID < 40100)
1043 #error needs at least version >= 4.1
1045 int main () { return 0; }
1047 ],mysql=true,mysql=false)
1048 if test "$mysql" = "false"
1051 AC_MSG_RESULT([fail, >= 4.1 required])
1056 AM_CONDITIONAL(HAVE_MYSQL, test x$mysql = xtrue)
1057 AM_CONDITIONAL(HAVE_MYSQLE, test "0" = "1")
1060 LDFLAGS=$SAVE_LDFLAGS
1061 CPPFLAGS=$SAVE_CPPFLAGS
1063 if test "$sqlite" = 0 -a "$mysql" = 0
1065 AC_MSG_ERROR([GNUnet requires SQLite or MySQL])
1070 AC_MSG_CHECKING([for libmicrohttpd])
1071 AC_ARG_WITH(microhttpd,
1072 [ --with-microhttpd=PFX base of libmicrohttpd installation],
1073 [AC_MSG_RESULT([$with_microhttpd])
1074 case $with_microhttpd in
1078 AC_CHECK_HEADERS([microhttpd.h],
1079 AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
1080 AC_CHECK_LIB([microhttpd], [MHD_get_fdset2],
1081 [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.42])
1082 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1083 #include "$native_srcdir/src/include/platform.h"
1084 #include <microhttpd.h>
1085 #if (MHD_VERSION < 0x0094200)
1086 #error needs at least version 0.9.42
1088 int main () { return 0; }
1092 [AC_MSG_RESULT(failed)])]),
1093 [],[#include "$native_srcdir/src/include/platform.h"
1094 #include <microhttpd.h>]),,
1095 [#include "$native_srcdir/src/include/platform.h"])
1098 LDFLAGS="-L$with_microhttpd/lib $LDFLAGS"
1099 CPPFLAGS="-I$with_microhttpd/include $CPPFLAGS"
1100 AC_CHECK_HEADERS(microhttpd.h,
1101 AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
1102 AC_CHECK_LIB([microhttpd], [MHD_get_fdset2],
1103 EXT_LIB_PATH="-L$with_microhttpd/lib $EXT_LIB_PATH"
1104 [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.42])
1105 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1106 #include "$native_srcdir/src/include/platform.h"
1107 #include <microhttpd.h>
1108 #if (MHD_VERSION < 0x0094200)
1109 #error needs at least version 0.9.42
1111 int main () { return 0; }
1115 [AC_MSG_RESULT(failed)])]),
1116 [],[#include "$native_srcdir/src/include/platform.h"
1117 #include <microhttpd.h>]),,
1118 [#include "$native_srcdir/src/include/platform.h"])
1122 [AC_MSG_RESULT([--with-microhttpd not specified])
1123 AC_CHECK_HEADERS([microhttpd.h],
1124 AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
1125 AC_CHECK_LIB([microhttpd], [MHD_get_fdset2],
1126 [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.42])
1127 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1128 #include "$native_srcdir/src/include/platform.h"
1129 #include <microhttpd.h>
1130 #if (MHD_VERSION < 0x0094200)
1131 #error needs at least version 0.9.42
1136 [AC_MSG_RESULT(failed)])]),
1137 [],[#include "$native_srcdir/src/include/platform.h"
1138 #include <microhttpd.h>]),,
1139 [#include "$native_srcdir/src/include/platform.h"])])
1140 AM_CONDITIONAL(HAVE_MHD, test x$lmhd = x1)
1141 AC_DEFINE_UNQUOTED([HAVE_MHD], $lmhd, [We have libmicrohttpd])
1143 AM_CONDITIONAL(HAVE_JSON, [test x$jansson = x1])
1148 # check for python & pexpect (used for some testcases only)
1149 AM_PATH_PYTHON([2.6],, [:])
1150 AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
1153 AM_GNU_GETTEXT([external])
1154 AM_GNU_GETTEXT_VERSION([0.18.1])
1156 # Checks for standard typedefs, structures, and compiler characteristics.
1165 AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
1166 [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
1170 #include <sys/types.h>
1171 #include <sys/socket.h>
1172 #include <netinet/in.h>
1175 AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
1176 [ AC_DEFINE(HAVE_SOCKADDR_UN_SUN_LEN, 1, [Do we have sockaddr_un.sun_len?])
1180 #include <sys/types.h>
1181 #include <sys/socket.h>
1187 # Checks for library functions.
1188 AC_FUNC_CLOSEDIR_VOID
1190 AC_PROG_GCC_TRADITIONAL
1192 AC_FUNC_SELECT_ARGTYPES
1202 AC_CHECK_FUNCS([atoll stat64 strnlen mremap getrlimit setrlimit sysconf initgroups strndup gethostbyname2 getpeerucred getpeereid setresuid $funcstocheck getifaddrs freeifaddrs getresgid mallinfo malloc_size malloc_usable_size getrusage random srandom stat statfs statvfs wait4])
1208 GN_LIBINTL="$LTLIBINTL"
1209 AC_ARG_ENABLE(framework, [ --enable-framework enable Mac OS X framework build helpers],enable_framework_build=$enableval)
1210 AM_CONDITIONAL(WANT_FRAMEWORK, test x$enable_framework_build = xyes)
1211 if test x$enable_framework_build = xyes
1213 AC_DEFINE([FRAMEWORK_BUILD], 1, [Build a Mac OS X Framework])
1214 GN_INTLINCL='-I$(top_srcdir)/src/intlemu'
1215 GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation'
1216 AC_LIB_APPENDTOVAR([CPPFLAGS], [$GN_INTLINCL])
1219 GN_LIB_LDFLAGS="-export-dynamic -no-undefined"
1220 GN_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined"
1222 AC_SUBST(GN_LIB_LDFLAGS)
1223 AC_SUBST(GN_PLUGIN_LDFLAGS)
1224 AC_SUBST(GN_INTLINCL)
1225 AC_SUBST(GN_LIBINTL)
1230 AC_SUBST(EXT_LIB_PATH)
1235 AC_SUBST(EXT_LIB_PATH)
1239 AC_MSG_CHECKING(for sudo)
1241 [ --with-sudo=PATH path to sudo binary (or just yes)],
1242 [AC_MSG_RESULT("$with_sudo")
1251 SUDO_BINARY=$with_sudo
1255 [AC_MSG_RESULT([no])])
1256 AC_SUBST(SUDO_BINARY)
1257 AM_CONDITIONAL([HAVE_SUDO], [test "x$SUDO_BINARY" != "x" -o -w /])
1260 # test for gnunetdns group name
1261 GNUNETDNS_GROUP=gnunetdns
1262 AC_MSG_CHECKING(for gnunetdns group name)
1263 AC_ARG_WITH(gnunetdns,
1264 [ --with-gnunetdns=GRPNAME name for gnunetdns group],
1265 [AC_MSG_RESULT("$with_gnunetdns")
1266 case $with_gnunetdns in
1268 GNUNETDNS_GROUP=gnunet
1271 GNUNETDNS_GROUP=gnunetdns
1274 GNUNETDNS_GROUP=$with_gnunetdns
1278 [AC_MSG_RESULT([gnunetdns])])
1279 AC_SUBST(GNUNETDNS_GROUP)
1286 AC_MSG_CHECKING(for gnutls)
1288 [ --with-gnutls=PFX base of gnutls installation],
1289 [AC_MSG_RESULT([$with_gnutls])
1290 case $with_gnutls in
1294 AC_CHECK_HEADERS([gnutls/abstract.h],
1295 AC_CHECK_LIB([gnutls], [gnutls_priority_set],
1297 AC_CHECK_HEADERS([gnutls/dane.h],
1298 AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
1302 LDFLAGS="-L$with_gnutls/lib $LDFLAGS"
1303 CPPFLAGS="-I$with_gnutls/include $CPPFLAGS"
1304 AC_CHECK_HEADERS([gnutls/abstract.h],
1305 AC_CHECK_LIB([gnutls], [gnutls_priority_set],
1306 EXT_LIB_PATH="-L$with_gnutls/lib $EXT_LIB_PATH"
1308 AC_CHECK_HEADERS([gnutls/dane.h],
1309 AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
1314 [AC_MSG_RESULT([--with-gnutls not specified])
1315 AC_CHECK_HEADERS([gnutls/abstract.h],
1316 AC_CHECK_LIB([gnutls], [gnutls_priority_set],
1318 AC_CHECK_HEADERS([gnutls/dane.h],
1319 AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
1322 AM_CONDITIONAL(HAVE_GNUTLS, test x$gnutls = xtrue)
1323 AC_DEFINE_UNQUOTED([HAVE_GNUTLS], $gnutls, [We have GnuTLS])
1324 AM_CONDITIONAL(HAVE_GNUTLS_DANE, test x$gnutls_dane = x1)
1325 AC_DEFINE_UNQUOTED([HAVE_GNUTLS_DANE], $gnutls_dane, [We have GnuTLS with DANE support])
1328 # Test if we are building for superMUC
1329 AC_MSG_CHECKING(if GNUnet is being configured to run on the SuperMUC)
1330 AC_ARG_ENABLE([supermuc],
1331 [AS_HELP_STRING([--enable-supermuc],
1332 [build GNUnet with support to run on the SuperMUC (default is NO)])],
1333 [if test "x$enable_supermuc" = "xno"
1340 enable_supermuc=no])
1341 AC_MSG_RESULT($enable_SUPERMUC)
1342 AM_CONDITIONAL([ENABLE_SUPERMUC], [test "x$supermuc" = "x1"])
1343 AC_DEFINE_UNQUOTED([ENABLE_SUPERMUC], [$supermuc], [Build with support for SuperMUC])
1345 # Check if NSE has to send timestamp information to testbed logger for
1346 # generating histogram of messages received
1347 AC_MSG_CHECKING(if NSE has to send timestamp information to testbed logger)
1348 AC_ARG_ENABLE([nse-histogram],
1349 [AS_HELP_STRING([--enable-nse-histogram],
1350 [have NSE send timestamp information to testbed logger for generating
1351 histogram of received messages. NOT useful for production (default is
1353 [if test "x$enableval" = "xno"
1360 enable_nse_histogram=no])
1361 AC_MSG_RESULT($enable_nse_histogram)
1362 AM_CONDITIONAL([ENABLE_NSE_HISTOGRAM], [test "x$nse_histogram" = "x1"])
1363 AC_DEFINE_UNQUOTED([ENABLE_NSE_HISTOGRAM], [$nse_histogram],
1364 [have NSE send timestamp information to testbed logger])
1366 # should 'make check' run tests?
1367 AC_MSG_CHECKING(whether to run tests)
1368 AC_ARG_ENABLE([testruns],
1369 [AS_HELP_STRING([--disable-testruns], [disable running tests on make check (default is YES)])],
1370 [enable_tests_run=${enableval}],
1371 [enable_tests_run=yes])
1372 AC_MSG_RESULT($enable_test_run)
1373 AM_CONDITIONAL([ENABLE_TEST_RUN], [test "x$enable_tests_run" = "xyes"])
1376 # should monkey be used when running (certain) services?
1377 AC_MSG_CHECKING(whether to run with monkey)
1378 AC_ARG_ENABLE([monkey],
1379 [AS_HELP_STRING([--enable-monkey], [enable running with monkey])],
1380 [enable_monkey=${enableval}],
1382 AC_MSG_RESULT($enable_monkey)
1383 AM_CONDITIONAL([ENABLE_MONKEY], [test "x$enable_monkey" = "xyes"])
1384 if test "x$enable_monkey" = "xyes"
1386 MONKEYPREFIX="pathologist -d $(eval echo ${datarootdir}/gnunet/gnunet.sqlite) -p 30 --"
1390 AC_SUBST(MONKEYPREFIX)
1393 # should expensive tests be run?
1394 AC_MSG_CHECKING(whether to run expensive tests)
1395 AC_ARG_ENABLE([expensivetests],
1396 [AS_HELP_STRING([--enable-expensivetests], [enable running expensive testcases])],
1397 [enable_expensive=${enableval}],
1398 [enable_expensive=no])
1399 AC_MSG_RESULT($enable_expensive)
1400 AM_CONDITIONAL([HAVE_EXPENSIVE_TESTS], [test "x$enable_expensive" = "xyes"])
1402 # should ports be open for Java services?
1403 AC_MSG_CHECKING(whether to enable ports for gnunet-java)
1404 AC_ARG_ENABLE([javaports],
1405 [AS_HELP_STRING([--enable-javaports], [use non-zero ports for services with Java bindings (default is NO)])],
1406 [enable_java_ports=${enableval}],
1407 [enable_java_ports=no])
1408 AC_MSG_RESULT($enable_java_ports)
1409 if test "x$enable_java_ports" = "xyes"
1413 JAVAPORT="$UNIXONLY"
1417 # should benchmarks be run?
1418 AC_MSG_CHECKING(whether to run benchmarks during make check)
1419 AC_ARG_ENABLE([benchmarks],
1420 [AS_HELP_STRING([--enable-benchmarks], [enable running benchmarks during make check])],
1421 [enable_benchmarks=${enableval}],
1422 [enable_benchmarks=no])
1423 AC_MSG_RESULT($enable_benchmarks)
1424 AM_CONDITIONAL([HAVE_BENCHMARKS], [test "x$enable_benchmarks" = "xyes"])
1426 # should gnunet-testing be compiled
1427 AC_MSG_CHECKING(wether to compile gnunet-testing)
1428 AC_ARG_ENABLE([testing],
1429 [AS_HELP_STRING([--disable-testing], [do not build gnunet-testing])],
1430 [enable_testing=${enableval}],
1431 [enable_testing=yes])
1432 AC_MSG_RESULT($enable_testing)
1433 AM_CONDITIONAL([HAVE_TESTING], [test "x$enable_testing" = "xyes"])
1435 # should experimental code be compiled (code that may not yet compile)?
1436 AC_MSG_CHECKING(whether to compile experimental code)
1437 AC_ARG_ENABLE([experimental],
1438 [AS_HELP_STRING([--enable-experimental], [enable compiling experimental code])],
1439 [enable_experimental=${enableval}],
1440 [enable_experimental=no])
1441 AC_MSG_RESULT($enable_experimental)
1442 AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"])
1444 # should malicious code be compiled (should only be used for testing)?
1445 AC_MSG_CHECKING(whether to compile malicious code)
1446 AC_ARG_ENABLE([malicious],
1447 [AS_HELP_STRING([--enable-malicious], [enable compiling malicious code])],
1448 [if test "x$enableval" = "xno"
1455 enable_malicious=no])
1456 AC_MSG_RESULT($enable_malicious)
1457 AM_CONDITIONAL([ENABLE_MALICIOUS], [test 1=$malicious])
1458 AC_DEFINE_UNQUOTED([ENABLE_MALICIOUS], [$malicious],
1459 [enable compilation of malicious code])
1461 # should services be started on demand when needed? Some services may choose to
1462 # never start by default and it is up to the service/module developer to decide
1463 # by having "START_ON_DEMAND = NO" instead of "START_ON_DEMAND = @START_ON_DEMAND@"
1464 # in the service/module's conf.in file.
1465 # See also IMMEDIATE_START for an unconditional immediate start.
1466 START_ON_DEMAND="YES"
1467 AC_MSG_CHECKING(whether to start peer's services on demand by default)
1468 AC_ARG_ENABLE([autostart],
1469 [AS_HELP_STRING([--disable-autostart], [do not start peer's services by default])],
1470 [enable_autostart=${enableval}
1471 if test "x$enable_autostart" == "xno"
1473 START_ON_DEMAND="NO"
1476 [enable_autostart=yes])
1477 AC_MSG_RESULT($enable_autostart)
1478 #AM_CONDITIONAL([HAVE_START_ON_DEMAND], [test "x$enable_autostart" = "xyes"])
1479 AC_SUBST(START_ON_DEMAND)
1481 # should memory statistics be kept (very expensive CPU-wise!)
1482 AC_MSG_CHECKING(whether to create expensive statistics on memory use)
1483 AC_ARG_ENABLE([heapstats],
1484 [AS_HELP_STRING([--enable-heapstats], [enable expensive heap statistics])],
1485 [enable_heapstats=1],
1486 [enable_heapstats=0])
1487 AC_MSG_RESULT($enable_heapstats)
1488 AC_DEFINE_UNQUOTED([ENABLE_HEAP_STATISTICS],$enable_heapstats,[enable expensive heap statistics])
1490 # should code be enabled that works around missing OS functionality on Windows?
1491 # used for test cases
1492 if test $build_target = "mingw"
1498 [#include <ws2tcpip.h>
1500 int s = socket (0, 0, 0);])
1502 AC_DEFINE_UNQUOTED([HAVE_SOCKET],1,[Define this if socket() is available])
1504 AC_DEFINE_UNQUOTED([HAVE_SOCKET],0,[Define this if socket() is available])
1509 [#include <ws2tcpip.h>
1511 int s = select (0, NULL, NULL, NULL, NULL);])
1513 AC_DEFINE_UNQUOTED([HAVE_SELECT],1,[Define this if select() is available])
1515 AC_DEFINE_UNQUOTED([HAVE_SELECT],0,[Define this if select() is available])
1520 [#include <ws2tcpip.h>
1523 char *s = inet_ntoa (i);])
1525 AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],1,[Define this if inet_ntoa() is available])
1527 AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],0,[Define this if inet_ntoa() is available])
1532 [#include <ws2tcpip.h>
1534 int s = getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);])
1536 AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],1,[Define this if getnameinfo() is available])
1538 AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],0,[Define this if getnameinfo() is available])
1543 [#include <ws2tcpip.h>
1545 int s = gethostname (NULL, 0);])
1547 AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],1,[Define this if gethostname() is available])
1549 AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],0,[Define this if gethostname() is available])
1554 [#include <ws2tcpip.h>
1556 void *s = gethostbyname (NULL);])
1558 AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],1,[Define this if gethostbyname() is available])
1560 AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],0,[Define this if gethostbyname() is available])
1565 [#include <ws2tcpip.h>
1567 void *s = gethostbyaddr (NULL, 0, 0);])
1569 AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],1,[Define this if gethostbyaddr() is available])
1571 AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],0,[Define this if gethostbyaddr() is available])
1576 [#include <ws2tcpip.h>
1578 int s = getaddrinfo (NULL, NULL, NULL, NULL);])
1580 AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],1,[Define this if getaddrinfo() is available])
1582 AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],0,[Define this if getaddrinfo() is available])
1586 AC_MSG_CHECKING(whether to enable windows workarounds)
1587 AC_ARG_ENABLE([windows_workarounds],
1588 [AS_HELP_STRING([--enable-windows_workarounds], [enable workarounds used on Windows (only useful for test cases)])],
1589 [enable_workarounds=${enableval}],
1590 [enable_workarounds=no])
1591 AC_MSG_RESULT($enable_workarounds)
1592 if test x$enable_windows_workarounds = "xyes"
1599 AC_DEFINE_UNQUOTED([ENABLE_WINDOWS_WORKAROUNDS], $workarounds, [enable workarounds used on Windows (only useful for test cases)])
1602 AC_MSG_CHECKING(whether to compile with support for code coverage analysis)
1603 AC_ARG_ENABLE([coverage],
1604 AS_HELP_STRING([--enable-coverage],
1605 [compile the library with code coverage support]),
1606 [use_gcov=${enableval}],
1608 AC_MSG_RESULT($use_gcov)
1609 AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
1613 # TODO: git blame says this predates our switch to git. git-svn should be adjusted to simply git, or
1614 # an external script that does the job.
1615 AC_PATH_PROG(svnversioncommand, svnversion)
1616 AC_PATH_PROG(gitcommand, git)
1617 AC_MSG_CHECKING(for source being under a VCS)
1620 AS_IF([test ! "X$svnversioncommand" = "X"],
1622 svn_version=$(cd $srcdir ; $svnversioncommand -n 2>/dev/null)
1624 AS_IF([test ! "X$gitcommand" = "X"],
1626 gitsvn_version=$(cd $srcdir ; git log -1 2>/dev/null | grep "git-svn-id" | sed -e 's/.*@\([[0-9]]\+\) .*/\1/')
1628 AS_IF([test "X$svn_version" = "X" -o "X$svn_version" = "Xexported" -o "X$svn_version" = "XUnversioned directory"],
1630 AS_IF([test "X$gitsvn_version" = "X"],
1633 vcs_version="\"release\""
1636 vcs_name="yes, git-svn"
1637 vcs_version="\"svn-r$gitsvn_version\""
1642 vcs_version="\"svn-r$svn_version\""
1644 AC_MSG_RESULT($vcs_name)
1646 AC_MSG_CHECKING(VCS version)
1647 AC_MSG_RESULT($vcs_version)
1648 AC_DEFINE_UNQUOTED(VCS_VERSION, [$vcs_version], [VCS revision/hash or tarball version])
1655 doc/doxygen/Makefile
1656 doc/documentation/Makefile
1664 src/ats-tool/Makefile
1665 src/ats-tests/Makefile
1666 src/auction/Makefile
1669 src/cadet/cadet.conf
1672 src/consensus/Makefile
1673 src/consensus/consensus.conf
1674 src/conversation/Makefile
1675 src/conversation/conversation.conf
1677 src/datacache/Makefile
1678 src/datastore/Makefile
1679 src/datastore/datastore.conf
1685 src/fragmentation/Makefile
1690 src/gns/nss/Makefile
1691 src/gnsrecord/Makefile
1693 src/identity/Makefile
1694 src/identity/identity.conf
1695 src/credential/Makefile
1696 src/credential/credential.conf
1697 src/include/Makefile
1698 src/integration-tests/Makefile
1700 src/jsonapi/Makefile
1701 src/hostlist/Makefile
1702 src/multicast/Makefile
1703 src/multicast/multicast.conf
1706 src/namecache/Makefile
1707 src/namecache/namecache.conf
1708 src/namestore/Makefile
1709 src/namestore/namestore.conf
1712 src/nat-auto/Makefile
1713 src/nat-auto/nat-auto.conf
1716 src/peerinfo/Makefile
1717 src/peerinfo/peerinfo.conf
1718 src/peerinfo-tool/Makefile
1719 src/peerstore/Makefile
1720 src/peerstore/peerstore.conf
1722 src/psycutil/Makefile
1725 src/psycstore/Makefile
1726 src/psycstore/psycstore.conf
1729 src/regex/regex.conf
1730 src/revocation/Makefile
1731 src/revocation/revocation.conf
1734 src/secretsharing/Makefile
1735 src/secretsharing/secretsharing.conf
1736 src/scalarproduct/Makefile
1737 src/scalarproduct/scalarproduct.conf
1741 src/social/social.conf
1743 src/statistics/Makefile
1744 src/statistics/statistics.conf
1745 src/template/Makefile
1746 src/testbed/Makefile
1747 src/testbed/testbed.conf
1748 src/testbed-logger/Makefile
1749 src/testbed-logger/testbed-logger.conf
1750 src/testing/Makefile
1751 src/topology/Makefile
1752 src/transport/Makefile
1753 src/transport/transport.conf
1755 src/util/resolver.conf
1758 src/zonemaster/Makefile
1759 src/zonemaster/zonemaster.conf
1762 src/identity-attribute/Makefile
1763 src/identity-provider/Makefile
1765 pkgconfig/gnunetarm.pc
1766 pkgconfig/gnunetats.pc
1767 pkgconfig/gnunetblock.pc
1768 pkgconfig/gnunetcadet.pc
1769 pkgconfig/gnunetconsensus.pc
1770 pkgconfig/gnunetconversation.pc
1771 pkgconfig/gnunetcore.pc
1772 pkgconfig/gnunetdatacache.pc
1773 pkgconfig/gnunetdatastore.pc
1774 pkgconfig/gnunetdht.pc
1775 pkgconfig/gnunetdns.pc
1776 pkgconfig/gnunetdv.pc
1777 pkgconfig/gnunetenv.pc
1778 pkgconfig/gnunetfragmentation.pc
1779 pkgconfig/gnunetfs.pc
1780 pkgconfig/gnunetgns.pc
1781 pkgconfig/gnunethello.pc
1782 pkgconfig/gnunetidentity.pc
1783 pkgconfig/gnunetmicrophone.pc
1784 pkgconfig/gnunetmulticast.pc
1785 pkgconfig/gnunetmysql.pc
1786 pkgconfig/gnunetnamestore.pc
1787 pkgconfig/gnunetnat.pc
1788 pkgconfig/gnunetnse.pc
1789 pkgconfig/gnunetpeerinfo.pc
1790 pkgconfig/gnunetpq.pc
1791 pkgconfig/gnunetpsyc.pc
1792 pkgconfig/gnunetpsycstore.pc
1793 pkgconfig/gnunetregex.pc
1794 pkgconfig/gnunetrevocation.pc
1795 pkgconfig/gnunetrps.pc
1796 pkgconfig/gnunetscalarproduct.pc
1797 pkgconfig/gnunetset.pc
1798 pkgconfig/gnunetsocial.pc
1799 pkgconfig/gnunetspeaker.pc
1800 pkgconfig/gnunetstatistics.pc
1801 pkgconfig/gnunettestbed.pc
1802 pkgconfig/gnunettesting.pc
1803 pkgconfig/gnunettransport.pc
1804 pkgconfig/gnunetutil.pc
1805 pkgconfig/gnunetvpn.pc
1811 # warn user if mysql found but not used due to version
1812 if test "$mysqlfail" = "true"
1814 AC_MSG_NOTICE([WARNING: MySQL found, but too old. MySQL support will not be compiled.])
1818 if test "x$sqlite" = "x0"
1820 AC_MSG_ERROR([ERROR: sqlite3 not found, but sqlite3 is required.])
1824 if test "$gnurl" = "0"
1826 if test "x$curl" = "xfalse"
1828 AC_MSG_NOTICE([WARNING: libgnurl not found. http client support will not be compiled.])
1829 AC_MSG_WARN([ERROR: libgnurl not found. hostlist daemon will not be compiled, and you probably WANT the hostlist daemon])
1831 AC_MSG_NOTICE([WARNING: libgnurl not found, trying to use libcurl-gnutls instead.])
1837 if test "x$bluetooth" = "x0"
1839 AC_MSG_NOTICE([WARNING: bluetooth library not found. bluetooth support will not be compiled.])
1843 if test "x$jansson" = "x0"
1845 AC_MSG_NOTICE([WARNING: jansson library not found. json support will not be compiled.])
1849 # FIXME: `some modules' -> be more specific which exact modules.
1852 # warn user if iptables is not found
1853 if test "$VAR_IPTABLES_BINARY" = "false"
1855 AC_MSG_NOTICE([WARNING: iptables not found. some modules may not have full functionality.])
1858 # warn user if ifconfig is not found
1859 if test "$VAR_IFCONFIG_BINARY" = "false"
1861 AC_MSG_NOTICE([WARNING: ifconfig not found. some modules may not have full functionality.])
1864 # warn user if upnpc binary is not found
1865 if test "$VAR_UPNPC_BINARY" = "false"
1867 AC_MSG_NOTICE([WARNING: upnpc binary not found. some modules may not have full functionality.])
1871 if test x$gnutls != xtrue
1873 AC_MSG_NOTICE([WARNING: GnuTLS not found, gnunet-gns-proxy will not be built])
1875 if test "x$gnutls_dane" != "x1"
1877 AC_MSG_NOTICE([WARNING: GnuTLS has no DANE support, DANE validation will not be possible])
1882 if test "x$enable_java_ports" = "xyes"
1884 AC_MSG_NOTICE([NOTICE: Opening ports for gnunet-java bindings by default.])
1888 if test "x$lmhd" != "x1"
1890 AC_MSG_NOTICE([WARNING: libmicrohttpd not found, http transport will not be installed.])
1894 if test "x$conversation_backend" = "xnone"
1896 if test "x$pulse" != "x1"
1898 AC_MSG_NOTICE([WARNING: libpulse(audio) not found, conversation will not be built.])
1900 if test "x$opus" != "x1"
1902 AC_MSG_NOTICE([WARNING: libopus not found, conversation will not be built.])
1904 if test "x$gst" != "x1"
1906 AC_MSG_NOTICE([WARNING: GStreamer not found, conversation will not be built.])
1910 if test "$extractor" != 1
1912 AC_MSG_WARN([ERROR: libextractor not found, but various file-sharing functions require it])
1915 AC_MSG_NOTICE([NOTICE: Database support is set to MySQL: $mysql, SQLite: $sqlite, Postgres: $postgres])
1917 if test "$enable_framework_build" = "yes"
1919 AC_MSG_NOTICE([Mac OS X framework build enabled.])
1922 AC_MSG_NOTICE([********************************************
1923 Please make sure NOW that you have created a user and group 'gnunet'
1924 and additionally a group 'gnunetdns'. On Debian and Ubuntu GNU/Linux, type:
1926 adduser --system --group --disabled-login --home /var/lib/gnunet gnunet
1928 Make sure that '/var/lib/gnunet' is owned (and writable) by user
1929 'gnunet'. Then, you can compile GNUnet with
1932 After that, run (if necessary as 'root')
1934 to install everything.
1936 Each GNUnet user should be added to the 'gnunet' group (may
1937 require fresh login to come into effect):
1938 adduser USERNAME gnunet
1939 (run the above command as root once for each of your users, replacing
1940 "USERNAME" with the respective login names). If you have a global IP
1941 address, no further configuration is required.
1943 For more detailed setup instructions, see https://gnunet.org/installation
1945 Optionally, download and compile gnunet-gtk to get a GUI for
1946 file-sharing and configuration. This is particularly recommended
1947 if your network setup is non-trivial, as gnunet-setup can be
1948 used to test in the GUI if your network configuration is working.
1949 gnunet-setup should be run as the "gnunet" user under X. As it
1950 does very little with the network, running it as "root" is likely
1951 also harmless. You can also run it as a normal user, but then
1952 you have to copy ~/.gnunet/gnunet.conf" over to the "gnunet" user's
1953 home directory in the end.
1955 Once you have configured your peer, run (as the 'gnunet' user)
1957 to start the peer. You can then run the various GNUnet-tools as
1958 your "normal" user (who should only be in the group 'gnunet').
1959 ********************************************])