X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=configure.ac;h=53db0bfaf457bccc203c66c0df75b9cfa30573f6;hb=3ad52c948d69799351c4a98cd04294d470c49e66;hp=c23845b97bde5e61e859f6aa924d8f654df1d664;hpb=9662ba32e6b383fc7033f5aceb070ee49ec39d09;p=oweals%2Fgnunet.git diff --git a/configure.ac b/configure.ac index c23845b97..53db0bfaf 100644 --- a/configure.ac +++ b/configure.ac @@ -21,40 +21,81 @@ # AC_PREREQ(2.61) # Checks for programs. -AC_INIT([gnunet], [0.11.0], [bug-gnunet@gnu.org]) +AC_INIT([gnunet], [0.11.8], [bug-gnunet@gnu.org]) AC_CONFIG_AUX_DIR([build-aux]) +# check for legacy option that is no longer supported (#5627) and fail hard +AC_ARG_WITH(nssdir, + [ --with-nssdir=DIR legacy switch, no longer supported, do not use], + [AC_MSG_RESULT([$with_nssdir]) + AS_CASE([$with_nssdir], + [no],[], + [AC_MSG_ERROR([--with-nssdir is no longer supported])]) + ]) + AC_CANONICAL_TARGET AC_CANONICAL_HOST AC_CANONICAL_SYSTEM AM_INIT_AUTOMAKE -m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], [AM_DEFAULT_VERBOSITY=1 AC_SUBST(AM_DEFAULT_VERBOSITY)]) AC_CONFIG_HEADERS([gnunet_config.h]) AH_TOP([#define _GNU_SOURCE 1]) AC_CONFIG_MACRO_DIR([m4]) AC_PROG_AWK AC_PROG_CC_C99 -AC_PROG_CPP -AC_PROG_CXX AC_PROG_OBJC AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET AM_PROG_CC_C_O -LT_INIT([disable-static dlopen win32-dll]) +LT_INIT([disable-static dlopen]) AC_SUBST(MKDIR_P) +# allow for different autotools +AS_AUTOTOOLS_ALTERNATE + # large file support AC_SYS_LARGEFILE AC_FUNC_FSEEKO CFLAGS="-Wall $CFLAGS" +AC_MSG_CHECKING(whether cc can use -fno-strict-aliasing) # use '-fno-strict-aliasing', but only if the compiler can take it -if gcc -fno-strict-aliasing -S -o /dev/null -xc /dev/null >/dev/null 2>&1; -then - CFLAGS="-fno-strict-aliasing $CFLAGS" -fi +AS_IF([$CC -fno-strict-aliasing -S -o /dev/null -xc /dev/null >/dev/null 2>&1], + [CFLAGS="-fno-strict-aliasing $CFLAGS"]) + +# A helper which allows us to check cflags if compiler +AC_DEFUN([CC_CHECK_CFLAGS_SILENT], [ + AC_CACHE_VAL(AS_TR_SH([cc_cv_cflags_$1]), + [ac_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $1 -Werror" + AC_LINK_IFELSE([AC_LANG_SOURCE([int main() { return 0; }])], + [eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"], + [eval "AS_TR_SH([cc_cv_cflags_$1])='no'"]) + CFLAGS="$ac_save_CFLAGS" + ]) + + AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], + [$2], [$3]) +]) + + +# CC_CHECK_CFLAG_APPEND(FLAG, [action-if-found], [action-if-not-found]) +# Check for CFLAG and appends them to CFLAGS if supported +AC_DEFUN([CC_CHECK_CFLAG_APPEND], [ + AC_CACHE_CHECK([if $CC supports -Wno-$1 flag], + AS_TR_SH([cc_cv_cflags_-W$1]), + CC_CHECK_CFLAGS_SILENT([-W$1]) #gcc is stupid. It does not fail with the -W-no option for backwards compat but then shows the error "in case something goes wrong". + ) + + AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_-W$1])[ = xyes], + [CFLAGS="$CFLAGS -Wno-$1"; $2], [$3]) +]) + + +# We make heavy use of this, llvm/gcc and gcc-9 give warnings so disable. +CC_CHECK_CFLAG_APPEND([address-of-packed-member]) # Use Linux interface name unless the OS has a different preference DEFAULT_INTERFACE="\"eth0\"" @@ -64,12 +105,16 @@ funcstocheck="getnameinfo gethostname gethostbyname gethostbyaddr getaddrinfo ge # Srcdir in a form that native compiler understands (i.e. DOS path on W32) native_srcdir=$srcdir +OLD_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS -Wl,--unresolved-symbols=report-all" + # Check system type -case "$host_os" in -*darwin* | *rhapsody* | *macosx*) +AS_CASE(["$host_os"], + [*darwin* | *rhapsody* | *macosx*],[ AC_DEFINE_UNQUOTED(DARWIN,1,[This is an Apple Darwin system]) CPPFLAGS="-D_APPLE_C_SOURCE $CPPFLAGS" CFLAGS="-fno-common $CFLAGS" + LDFLAGS="$OLD_LDFLAGS" AC_MSG_WARN([WARNING: The VPN application cannot be compiled on your OS]) AC_CHECK_LIB(intl, gettext) build_target="darwin" @@ -77,41 +122,37 @@ case "$host_os" in LIBPREFIX= DLLDIR=lib UNIXONLY="#" - ;; -linux*) + ], + [linux*],[ AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux kernel]) build_target="linux" LIBPREFIX= DLLDIR=lib UNIXONLY="#" AC_PATH_XTRA - ;; -*freebsd*) - AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system]) - AC_DEFINE_UNQUOTED(FREEBSD,1,[This is a FreeBSD system]) + ], + [*freebsd*],[ CFLAGS="-D_THREAD_SAFE $CFLAGS" build_target="freebsd" LIBPREFIX= DLLDIR=lib UNIXONLY="#" - ;; -*openbsd*) - AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system]) - AC_DEFINE_UNQUOTED(OPENBSD,1,[This is an OpenBSD system]) + ], + [*openbsd*],[ LIBS=`echo $LIBS | sed -e "s/-ldl//"` build_target="openbsd" + use_openbsd_libtool=true LIBPREFIX= DLLDIR=lib UNIXONLY="#" - ;; -*netbsd*) - AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system]) - AC_DEFINE_UNQUOTED(NETBSD,1,[This is a NetBSD system]) + ], + [*netbsd*],[ + build_target="netbsd" LIBPREFIX= DLLDIR=lib UNIXONLY="#" - ;; -*solaris*) + ], + [*solaris*],[ AC_DEFINE_UNQUOTED(SOLARIS,1,[This is a Solaris system]) AC_DEFINE_UNQUOTED(_REENTRANT,1,[Need with solaris or errno doesnt work]) AC_CHECK_LIB(resolv, res_init) @@ -120,54 +161,25 @@ linux*) LIBPREFIX= DLLDIR=lib UNIXONLY="#" - ;; -*arm-linux*) + ], + [*arm-linux*],[ AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux kernel]) CFLAGS="-D_REENTRANT -fPIC -pipe $CFLAGS" build_target="linux" LIBPREFIX= DLLDIR=lib UNIXONLY="#" - ;; -*cygwin*) - AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system]) - AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system]) - AC_CHECK_LIB(intl, gettext) - CFLAGS="-mms-bitfields $CFLAGS" - build_target="cygwin" - LIBPREFIX=lib - DLLDIR=bin - AC_PROG_CXX - UNIXONLY="" - ;; -*mingw*) - AC_DEFINE_UNQUOTED(MINGW,1,[This is a MinGW system]) - AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system]) - AC_DEFINE_UNQUOTED(_WIN32,1,[This is a Windows system]) - AC_CHECK_LIB(intl, gettext) - LDFLAGS="$LDFLAGS -Wl,--export-all-symbols" - LIBS="$LIBS -lws2_32 -lplibc -lgnurx -lole32" - CFLAGS="-mms-bitfields $CFLAGS" - CPPFLAGS="-D_WIN32_WINNT=0x0501 -DHAVE_STAT64=1 -D__USE_MINGW_ANSI_STDIO=1 $CPPFLAGS" - build_target="mingw" - AC_PROG_CXX - LIBPREFIX=lib - DLLDIR=bin - UNIXONLY="" - funcstocheck="" - native_srcdir=$(cd $srcdir; pwd -W) - ;; -gnu*) + ], + [gnu*],[ AC_DEFINE_UNQUOTED(GNU,1,[This is a GNU system]) build_target="gnu" UNIXONLY="#" - ;; -*) + ], + [ AC_MSG_RESULT(Unrecognised OS $host_os) AC_DEFINE_UNQUOTED(OTHEROS,1,[Some strange OS]) UNIXONLY="" -;; -esac +]) AC_DEFINE_UNQUOTED([GNUNET_DEFAULT_INTERFACE], $DEFAULT_INTERFACE, [This should be the default choice for the name of the first network interface]) AC_SUBST(DEFAULT_INTERFACE) @@ -178,11 +190,14 @@ AC_SUBST(UNIXONLY) AC_MSG_CHECKING([for build target]) AM_CONDITIONAL(DARWIN, test "$build_target" = "darwin") -AM_CONDITIONAL(CYGWIN, test "$build_target" = "cygwin") -AM_CONDITIONAL(MINGW, test "$build_target" = "mingw") AM_CONDITIONAL(SOLARIS, test "$build_target" = "solaris") +AM_CONDITIONAL(XNETBSD, test "$build_target" = "netbsd") AM_CONDITIONAL(XFREEBSD, test "$build_target" = "freebsd") AM_CONDITIONAL(OPENBSD, test "$build_target" = "openbsd") +# FIXME: We need a define BSD for some binaries like we +# need define LINUX for some. This does not scale, how +# can we solve this better? +AM_CONDITIONAL(XBSD, test "$build_target" = "netbsd" -o "$build_target" = "freebsd" -o "$build_target" = "openbsd") AM_CONDITIONAL(LINUX, test "$build_target" = "linux") AM_CONDITIONAL(GNU, test "$build_target" = "gnu") @@ -195,6 +210,10 @@ AC_UNALIGNED_64_ACCESS AC_SEARCH_LIBS([gethostbyname], [nsl ws2_32]) AC_SEARCH_LIBS([memrchr], [], AC_DEFINE(HAVE_MEMRCHR,1,[memrchr supported]), []) +AC_SEARCH_LIBS([memset_s], [], + AC_DEFINE(HAVE_MEMSET_S,1,[memset_s supported]), []) +AC_SEARCH_LIBS([memset_s], [], + AC_DEFINE(HAVE_EXPLICIT_BZERO,1,[explicit_bzero supported]), []) AC_CHECK_LIB(socket, socket) AC_CHECK_LIB(m, log) AC_CHECK_LIB(c, getloadavg, AC_DEFINE(HAVE_GETLOADAVG,1,[getloadavg supported])) @@ -202,15 +221,24 @@ AC_CHECK_LIB(c, getloadavg, AC_DEFINE(HAVE_GETLOADAVG,1,[getloadavg supported])) AC_CHECK_PROG(VAR_GETOPT_BINARY, getopt, true, false) AM_CONDITIONAL(HAVE_GETOPT_BINARY, $VAR_GETOPT_BINARY) +AC_CHECK_PROGS(PKG_CONFIG, [pkgconf, pkg-config], false) +AM_CONDITIONAL(HAVE_PKG_CONFIG, test x$PKG_CONFIG != xfalse) + AC_CHECK_PROG(VAR_SSH_BINARY, ssh, true, false) AM_CONDITIONAL(HAVE_SSH_BINARY, $VAR_SSH_BINARY) -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) -rm -f /tmp/gnunet_test_cosks_ssh_garbage +AC_MSG_CHECKING(for SSH key) + 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) + if test -f /tmp/gnunet_test_cosks_ssh_garbage; then + rm -f /tmp/gnunet_test_cosks_ssh_garbage + fi + # autotools' m4 for python has no maximum version! -# python3.7 for tests -m4_define_default([_AM_PYTHON_INTERPRETER_LIST],[python3 python3.7 python]) -AM_PATH_PYTHON([3.7],, [:]) +# python3.4 - python3.8 for tests (3.8 unchecked) +# TODO: document how to override the lowest version +# TODO: found by this. +m4_define_default([_AM_PYTHON_INTERPRETER_LIST],[python3 python3.4 python3.5 python3.6 python3.7 python3.8 python]) +AM_PATH_PYTHON([3.4],, [:]) AC_SUBST([PYTHON]) AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :]) @@ -222,53 +250,92 @@ AC_SUBST([PERL]) # iptables is a soft requirement to run tests AC_PATH_TARGET_TOOL(VAR_IPTABLES_BINARY, iptables, false) -if test x"$VAR_IPTABLES_BINARY" = x"false" -then - if test -x "/sbin/iptables" - then - VAR_IPTABLES_BINARY="/sbin/iptables" - elif test -x "/usr/sbin/iptables" - then - VAR_IPTABLES_BINARY="/usr/sbin/iptables" - fi -fi +AS_IF([test x"$VAR_IPTABLES_BINARY" = x"false"], + [AS_IF([test -x "/sbin/iptables"], + [VAR_IPTABLES_BINARY="/sbin/iptables"], + [AS_IF([test -x "/usr/sbin/iptables"], + [VAR_IPTABLES_BINARY="/usr/sbin/iptables"])])]) -if test x"$VAR_IPTABLES_BINARY" != x"false" -then -AC_DEFINE_UNQUOTED([IPTABLES], "$VAR_IPTABLES_BINARY", [Path to iptables]) -else -AC_MSG_WARN([warning: 'iptables' not found.]) -fi +AS_IF([test x"$VAR_IPTABLES_BINARY" != x"false"], + [AC_DEFINE_UNQUOTED([IPTABLES], "$VAR_IPTABLES_BINARY", [Path to iptables])], + [AC_MSG_WARN([warning: 'iptables' not found.])]) + +# ip6tables is a soft requirement for some features +AC_PATH_TARGET_TOOL(VAR_IP6TABLES_BINARY, ip6tables, false) +AS_IF([test x"$VAR_IP6TABLES_BINARY" = x"false"], + [AS_IF([test -x "/sbin/ip6tables"], + [VAR_IP6TABLES_BINARY="/sbin/ip6tables"], + [AS_IF([test -x "/usr/sbin/ip6tables"], + [VAR_IP6TABLES_BINARY="/usr/sbin/ip6tables"])])]) + + +AS_IF([test x"$VAR_IP6TABLES_BINARY" != x"false"], + [AC_DEFINE_UNQUOTED([IP6TABLES], "$VAR_IP6TABLES_BINARY", [Path to ip6tables])], + [AC_MSG_WARN([warning: 'ip6tables' not found.])]) + +# ip is a soft requirement for some features +AC_PATH_TARGET_TOOL(VAR_IP_BINARY, ip, false) + +AS_IF([test x"$VAR_IP_BINARY" = x"false"], + [AS_IF([test -x "/sbin/ip"], + [VAR_IP_BINARY="/sbin/ip"], + [AS_IF([test -x "/usr/sbin/ip"], + [VAR_IP_BINARY="/usr/sbin/ip"])])]) + +AS_IF([test x"$VAR_IP_BINARY" != x"false"], + [AC_DEFINE_UNQUOTED([PATH_TO_IP], "$VAR_IP_BINARY", [Path to ip])], + [AC_MSG_WARN([warning: 'ip' not found.])]) + +# locate 'ifconfig' AC_PATH_TARGET_TOOL(VAR_IFCONFIG_BINARY, ifconfig, false) AC_CHECK_PROG(VAR_IFCONFIG_BINARY, ifconfig, true, false) -if test x"$VAR_IFCONFIG_BINARY" = x"false" -then - if test -x "/sbin/ifconfig" - then - VAR_IFCONFIG_BINARY="/sbin/ifconfig" - elif test -x "/usr/sbin/ifconfig" - then - VAR_IFCONFIG_BINARY="/usr/sbin/ifconfig" - fi -fi -if test x"$VAR_IFCONFIG_BINARY" != x"false" -then -AC_DEFINE_UNQUOTED([IFCONFIG], "$VAR_IFCONFIG_BINARY", [Path to ifconfig]) -else -AC_MSG_WARN(['ifconfig' not found.]) -fi +AS_IF([test x"$VAR_IFCONFIG_BINARY" = x"false"], + [AS_IF([test -x "/sbin/ifconfig"], + [VAR_IFCONFIG_BINARY="/sbin/ifconfig"], + [AS_IF([test -x "/usr/sbin/ifconfig"], + [VAR_IFCONFIG_BINARY="/usr/sbin/ifconfig"])])]) + +AS_IF([test x"$VAR_IFCONFIG_BINARY" != x"false"], + [AC_DEFINE_UNQUOTED([IFCONFIG], "$VAR_IFCONFIG_BINARY", [Path to ifconfig])], + [AC_MSG_WARN(['ifconfig' not found.])]) + + +AC_PATH_TARGET_TOOL(VAR_SYSCTL_BINARY, sysctl, false) + +AC_CHECK_PROG(VAR_SYSCTL_BINARY, sysctl, true, false) +AS_IF([test x"$VAR_SYSCTL_BINARY" = x"false"], + [AS_IF([test -x "/sbin/sysctl"], + [VAR_SYSCTL_BINARY="/sbin/sysctl"], + [AS_IF([test -x "/usr/sbin/sysctl"], + [VAR_SYSCTL_BINARY="/usr/sbin/sysctl"])])]) +AS_IF([test x"$VAR_SYSCTL_BINARY" != x"false"], + [AC_DEFINE_UNQUOTED([SYSCTL], "$VAR_SYSCTL_BINARY", [Path to sysctl])], + [AC_MSG_WARN(['sysctl' not found.])]) # miniupnpc / upnpc binary is a soft runtime requirement AC_PATH_TARGET_TOOL(VAR_UPNPC_BINARY, upnpc, false) -if test x"$VAR_UPNPC_BINARY" != x"false" -then -AC_DEFINE_UNQUOTED([UPNPC], "$VAR_UPNPC_BINARY", [Path to upnpc binary]) -else -AC_MSG_WARN([warning: 'upnpc' binary not found.]) -fi +AS_IF([test x"$VAR_UPNPC_BINARY" != x"false"], + [AC_DEFINE_UNQUOTED([UPNPC], "$VAR_UPNPC_BINARY", [Path to upnpc binary])], + [AC_MSG_WARN([warning: 'upnpc' binary not found.])]) + + +# checkbashisms +AC_CHECK_PROGS(CHECKBASHISMS_BINARY, [checkbashisms checkbashisms.pl], false) +AM_CONDITIONAL(HAVE_CHECKBASHISMS, test x$CHECKBASHISMS_BINARY != xfalse) + +# uncrustify +# TODO: maybe add flag to pass location +AC_CHECK_PROG(UNCRUSTIFY_BINARY, uncrustify, true) +AM_CONDITIONAL(HAVE_UNCRUSTIFY_BINARY, $UNCRUSTIFY_BINARY) + +# yapf +# TODO: less repetition, add flag to pass name +AC_CHECK_PROGS(YAPF_BINARY, [yapf yapf3.0 yapf3.1 yapf3.2 yapf3.3 yapf3.4 yapf3.5 yapf3.6 yapf3.7 yapf3.8 yapf3.9 yapf4.0], false) +AM_CONDITIONAL(HAVE_YAPF_BINARY, test x$YAPF_BINARY != xfalse) + AC_CHECK_MEMBER(struct tm.tm_gmtoff, [AC_DEFINE(HAVE_TM_GMTOFF, 1, @@ -276,24 +343,19 @@ AC_CHECK_MEMBER(struct tm.tm_gmtoff, , [#include ]) -AC_CHECK_DECLS([_stati64]) - # 'save' libs; only those libs found so far will be # linked against _everywhere_. For the others, we # will be more selective! SAVE_LIBS=$LIBS have_addrinfo_a=0 -AC_CHECK_LIB(anl, getaddrinfo_a, [have_addrinfo_a=1 AC_DEFINE(HAVE_GETADDRINFO_A,1,[getaddrinfo_a supported])]) -AM_CONDITIONAL(HAVE_GETADDRINFO_A, [test "$have_addrinfo_a" = 1]) - - -# tests only run on Windows -if test "x$build_target" = "xmingw" -then - AC_CHECK_LIB(plibc, plibc_init, [], [AC_MSG_ERROR([GNUnet requires PlibC on Windows])]) - AC_CHECK_LIB(gnurx, regexec, [], [AC_MSG_ERROR([GNUnet requires libgnurx on Windows])]) -fi +AC_CHECK_LIB(anl, + getaddrinfo_a, + [have_addrinfo_a=1 AC_DEFINE(HAVE_GETADDRINFO_A, + 1, + [getaddrinfo_a supported])]) +AM_CONDITIONAL(HAVE_GETADDRINFO_A, + [test "$have_addrinfo_a" = 1]) # libgcrypt gcrypt=0 @@ -304,104 +366,184 @@ NEED_LIBGCRYPT_VERSION=1.6.0 AM_PATH_LIBGCRYPT("$NEED_LIBGCRYPT_API:$NEED_LIBGCRYPT_VERSION", gcrypt=1) AC_CHECK_DECLS([gcry_mpi_set_opaque_copy], [], [], [[#include ]]) -if test $gcrypt = 0 -then +AS_IF([test $gcrypt = 0], + [ AC_MSG_ERROR([[ *** *** You need libgcrypt to build this program. -** This library is for example available at -*** ftp://ftp.gnupg.org/gcrypt/libgcrypt/ -*** (at least version $NEED_LIBGCRYPT_VERSION (API $NEED_LIBGCRYPT_API) -*** is required.) +*** This library is for example available at +*** ftp://ftp.gnupg.org/gcrypt/libgcrypt/. +*** At least version $NEED_LIBGCRYPT_VERSION (API $NEED_LIBGCRYPT_API) +*** is required. ***]]) -fi +]) AC_DEFINE_UNQUOTED([NEED_LIBGCRYPT_VERSION], "$NEED_LIBGCRYPT_VERSION", [required libgcrypt version]) AC_CHECK_DECLS([struct in6_ifreq], [], [], [[#include ]]) +AC_CHECK_HEADER([if_tun.h], + [AC_DEFINE([IF_TUN_HDR], ["if_tun.h"], [if_tun.h include path])], + [AC_CHECK_HEADER([linux/if_tun.h], + [AC_DEFINE([IF_TUN_HDR], ["linux/if_tun.h"])], + [AC_CHECK_HEADER([net/if_tun.h], + [AC_DEFINE([IF_TUN_HDR], ["net/if_tun.h"])], + [AC_CHECK_HEADER([net/tun/if_tun.h], + [AC_DEFINE([IF_TUN_HDR], ["net/tun/if_tun.h"])])])])]) # should the build process be building the documentation? AC_MSG_CHECKING(whether to build documentation) AC_ARG_ENABLE([documentation], - [AS_HELP_STRING([--disable-documentation], [do not build the documentation])], - [documentation=${enableval}], - [documentation=yes]) + [AS_HELP_STRING([--disable-documentation], + [do not build the documentation])], + [documentation=${enableval}], + [documentation=yes]) AC_MSG_RESULT($documentation) -if test "x$documentation" = "xyes" -then - AM_CONDITIONAL([DOCUMENTATION],true) - AC_DEFINE([DOCUMENTATION],[1],[Building the documentation]) -else - AM_CONDITIONAL([DOCUMENTATION],false) - AC_DEFINE([DOCUMENTATION],[0],[Not building the documentation]) -fi - -# FIXME: Something is wrong about this in the output of ./configure runs -AC_MSG_CHECKING(wether to include generated texi2mdoc output in installation) +AS_IF([test "x$documentation" = "xyes"], + [AM_CONDITIONAL([DOCUMENTATION], + true) + AC_DEFINE([DOCUMENTATION], + [1], + [Building the documentation])], + [AM_CONDITIONAL([DOCUMENTATION], + false) + AC_DEFINE([DOCUMENTATION], + [0], + [Not building the documentation])]) + +# COMMENT: Check whether to transpile texinfo to mdoc. +# COMMENT: This is TRUE when --enable-texi2mdoc-generation +# COMMENT: but ERRORS when texi2mdoc binary is missing in your $PATH +# COMMENT: and makes the configure fail if it is missing. +# COMMENT: Consequential the DEFINE and CONDITIONAL are set to true. +# COMMENT: This is FALSE when --disable-texi2mdoc-generation was set +# COMMENT: or nothing was set (this is the default). +# COMMENT: There are 2 nested AS_IFs because we need to catch the +# COMMENT: potential non-existence of the texi2mdoc binary. +# COMMENT: Default return value / setting: no +AC_MSG_CHECKING(whether to include generated texi2mdoc output in installation) AC_ARG_ENABLE([texi2mdoc-generation], -[AS_HELP_STRING([--disable-texi2mdoc-generation], [do not include generated texi2mdoc output in installation])], -[texi2mdoc-generation=${enableval}], -[texi2mdoc-generation=yes]) -AC_MSG_RESULT($texi2mdoc-generation) -if test "x$texi2mdoc-generation" = "xyes" -then - if test "$texi2mdoc" = 0 - then - AC_MSG_WARN([ERROR: mdoc output currently requires texi2mdoc.]) - AC_MSG_WARN([ERROR: texi2mdoc can be obtained via your Operating System]) - AC_MSG_WARN([ERROR: package manager or from https://mandoc.bsd.lv/texi2mdoc/]) - else - AM_CONDITIONAL([TEXI2MDOC_GENERATION],true) - AC_DEFINE([TEXI2MDOC_GENERATION],[1],[Building section 7 mdoc output]) - fi -else - AM_CONDITIONAL([TEXI2MDOC_GENERATION],false) - AC_DEFINE([TEXI2MDOC_GENERATION],[0],[Not building section 7 mdoc output]) -fi + [AS_HELP_STRING([--enable-texi2mdoc-generation], + [include generated texi2mdoc output in installation])], + [texi2mdoc_generation=${enableval}], + [texi2mdoc_generation=no]) +AC_MSG_RESULT($texi2mdoc_generation) +AS_IF([test "x$texi2mdoc_generation" = "xyes"], + [AS_IF([test "$texi2mdoc" = 0], + [AC_MSG_WARN([ERROR: transpiled mdoc output requires texi2mdoc.]) + AC_MSG_WARN([ERROR: texi2mdoc can be obtained via your]) + AC_MSG_WARN([ERROR: Operating System package manager or from]) + AC_MSG_WARN([ERROR: https://mandoc.bsd.lv/texi2mdoc/])], + [AM_CONDITIONAL([TEXI2MDOC_GENERATION],true) + AC_DEFINE([TEXI2MDOC_GENERATION], + [1], + [Building section 7 mdoc output])])], + [AM_CONDITIONAL([TEXI2MDOC_GENERATION], + false) + AC_DEFINE([TEXI2MDOC_GENERATION], + [0], + [Not building section 7 mdoc output])]) + +# test for texi2mdoc (the binary, not the script distributed +# with autogen) +# TODO: refactor this and the check above. +AC_MSG_CHECKING(for texi2mdoc binary) +AC_CHECK_PROGS(TEXI2MDOC_BINARY, [texi2mdoc], false) +AM_CONDITIONAL(HAVE_TEXI2MDOC, test x$TEXI2MDOC_BINARY != xfalse) + +# texi2man is a tool which needs to be investigated and +# is probably incompatible to texi2mdoc in invocation. +# Detection at this point only serves as a reminder that +# I will work this into the build-system. +AC_MSG_CHECKING(for texi2man perl script) +AC_CHECK_PROGS(TEXI2MAN_SCRIPT, [texi2man], false) +AM_CONDITIONAL(HAVE_TEXI2MAN, test x$TEXI2MAN_SCRIPT != xfalse) + + +# test for mandoc +AC_MSG_CHECKING(for mandoc binary) +AC_CHECK_PROGS(MANDOC_BINARY, [mandoc], false) +AM_CONDITIONAL(HAVE_MANDOC, test x$MANDOC_BINARY != xfalse) # should the build process be building only the documentation? AC_MSG_CHECKING(whether to build only documentation) AC_ARG_ENABLE([documentation-only], - [AS_HELP_STRING([--enable-documentation-only], [build only the documentation])], + [AS_HELP_STRING([--enable-documentation-only], + [build only the documentation])], [documentation_only=${enableval}], [documentation_only=no]) AC_MSG_RESULT($documentation_only) -if test "x$documentation_only" = "xyes" -then +AS_IF([test "x$documentation_only" = "xyes"], + [ AM_CONDITIONAL([DOCUMENTATION_ONLY],true) AC_DEFINE([DOCUMENTATION_ONLY],[1],[Building only the documentation]) -else + ],[ AM_CONDITIONAL([DOCUMENTATION_ONLY],false) - AC_DEFINE([DOCUMENTATION_ONLY],[0],[Not building only the documentation]) -fi + AC_DEFINE([DOCUMENTATION_ONLY],[0],[Doing a normal build, more than only documentation]) + ]) + +# should the build process be including the manpages? (default: yes) +AC_MSG_CHECKING(whether to include man pages) +AC_ARG_ENABLE([include-manpages], + [AS_HELP_STRING([--disable-include-manpages], + [Do not include the man pages in build and installation])], + [include_manpages=${enableval}], + [include_manpages=yes]) +AC_MSG_RESULT($include_manpages) +AS_IF([test "x$include_manpages" = "xyes"], + [ + AM_CONDITIONAL([INCLUDE_MANPAGES],true) + AC_DEFINE([INCLUDE_MANPAGES],[1],[Including the man pages in the build and installation]) + ],[ + AM_CONDITIONAL([INCLUDE_MANPAGES],false) + AC_DEFINE([INCLUDE_MANPAGES],[0],[Not including the man pages in the build and installation]) + ]) + +# Do we have texinfo4? If yes, it is used to set texinfo4 specific switches +# (not syntax!) to the commandline tools which generate the html. If not, +# texinfo5 switches are used. This comes with no version checks, is +# enabled only at distributors action (ie defaults to "no"). +# Mantis #3914 for more details (https://bugs.gnunet.org/view.php?id=3914) +AC_MSG_CHECKING(whether to enable texinfo4 switches) +AC_ARG_ENABLE([texinfo4], + [AS_HELP_STRING([--enable-texinfo4], [Use texinfo version 4 specific switches])], + [activate_texinfo4=${enableval}], + [activate_texinfo4=no]) +AC_MSG_RESULT($activate_texinfo4) +AS_IF([test "x$activate_texinfo4" = "xyes"], + [ + AM_CONDITIONAL([ACTIVATE_TEXINFO4],true) + AC_DEFINE([ACTIVATE_TEXINFO4],[1],[Using texinfo version 4 specific switches]) + ],[ + AM_CONDITIONAL([ACTIVATE_TEXINFO4],false) + AC_DEFINE([INCLUDE_MANPAGES],[0],[Using texinfo version 5 or later switches]) + ]) # Adam shostack suggests the following for Windows: # -D_FORTIFY_SOURCE=2 -fstack-protector-all AC_ARG_ENABLE(gcc-hardening, AS_HELP_STRING(--enable-gcc-hardening, enable compiler security checks), -[if test x$enableval = xyes; then +[AS_IF([test x$enableval = xyes],[ CFLAGS="$CFLAGS -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-all" CFLAGS="$CFLAGS -fwrapv -fPIE -Wstack-protector" CFLAGS="$CFLAGS --param ssp-buffer-size=1" LDFLAGS="$LDFLAGS -pie" -fi]) + ])]) # Linker hardening options # Currently these options are ELF specific - you can't use this with MacOSX AC_ARG_ENABLE(linker-hardening, AS_HELP_STRING(--enable-linker-hardening, enable linker security fixups), -[if test x$enableval = xyes; then - LDFLAGS="$LDFLAGS -z relro -z now" -fi]) +[AS_IF([test x$enableval = xyes], + [LDFLAGS="$LDFLAGS -z relro -z now"])]) AC_ARG_ENABLE(sanitizer, AS_HELP_STRING(--enable-sanitizer, enable Address Sanitizer and Undefined Behavior Sanitizer), -[if test x$enableval = xyes; then +[AS_IF([test x$enableval = xyes],[ LDFLAGS="$CFLAGS -fsanitize=address,undefined -fno-omit-frame-pointer" -fi]) + ])]) extra_logging=GNUNET_NO @@ -420,22 +562,18 @@ AC_ARG_ENABLE([poisoning], [AS_HELP_STRING([--enable-poisoning], [enable poisoning of freed memory (good for debugging)])], [enable_poisoning=${enableval}], [ - if test "x$extra_logging" != "xGNUNET_NO"; then - enable_poisoning="defaults to yes (extra logging is enabled)" - else - enable_poisoning=no - fi + AS_IF([test "x$extra_logging" != "xGNUNET_NO"], + [enable_poisoning="defaults to yes (extra logging is enabled)"], + [enable_poisoning=no]) ]) AC_MSG_RESULT($enable_poisoning) -if test ! "x$enable_poisoning" = "xno"; then - enable_poisoning=1 -else - enable_poisoning=0 -fi +AS_IF([test ! "x$enable_poisoning" = "xno"], + [enable_poisoning=1], + [enable_poisoning=0]) AC_DEFINE_UNQUOTED([ENABLE_POISONING],[$enable_poisoning],[1 if freed memory should be poisoned, 0 otherwise]) -if test $build = $target -then +AS_IF([test $build = $target], +[ AC_MSG_CHECKING([for working HMAC]) AC_LANG_PUSH(C) LIBS="$LIBS $LIBGCRYPT_LIBS" @@ -502,52 +640,94 @@ AC_RUN_IFELSE( ], [AC_MSG_RESULT([cross compiling, test skipped])]) AC_LANG_POP(C) -fi # $build = $target +]) # $build = $target # check for bluetooth library bluetooth=0 -AC_CHECK_LIB(bluetooth, ba2str,[AC_CHECK_HEADER([bluetooth/bluetooth.h],bluetooth=1)]) -if test "$build_target" = "mingw" -then - bluetooth=1 -fi +AC_MSG_CHECKING(for libbluetooth) +AC_ARG_WITH(libbluetooth, + [ --with-libbluetooth=PREFIX (base of libbluetooth installation)], + [AC_MSG_RESULT([$with_libbluetooth]) + AS_CASE([$with_libbluetooth], + [no],[], + [yes],[ + CHECK_LIBHEADER(BLUETOOTH, + bluetooth, + ba2str, + bluetooth/bluetooth.h, + bluetooth=1,) + ],[ + LDFLAGS="-L$with_libbluetooth/lib $LDFLAGS" + CPPFLAGS="-I$with_libbluetooth/include $CPPFLAGS" + AC_CHECK_HEADERS(bluetooth/bluetooth.h, + AC_CHECK_LIB([bluetooth], + [ba2str], + EXT_LIB_PATH="-L$with_libbluetooth/lib $EXT_LIB_PATH" + bluetooth=1)) + ]) + ], + [AC_MSG_RESULT([--with-libbluetooth not specified]) + CHECK_LIBHEADER(BLUETOOTH, + bluetooth, + ba2str, + bluetooth/bluetooth.h, + bluetooth=1,)]) AM_CONDITIONAL(HAVE_LIBBLUETOOTH, [test "$bluetooth" = 1]) -if test "$bluetooth" = 1 -then - AC_DEFINE([HAVE_LIBBLUETOOTH],[1],[Have bluetooth library]) -else - AC_DEFINE([HAVE_LIBBLUETOOTH],[0],[Lacking bluetooth library]) -fi +AS_IF([test "$bluetooth" = 1], + [AC_DEFINE([HAVE_LIBBLUETOOTH],[1],[Have bluetooth library])], + [AC_DEFINE([HAVE_LIBBLUETOOTH],[0],[Lacking bluetooth library])]) + +# check for zbar library +# NOTE: Do not add checks for: -lSM, -lICE, -lX11, -lXv and -ljpeg +# NOTE: they must be provided by the build environment, not the +# NOTE: build-system of gnunet, as they are 2nd or 3rd level dependencies. +zbar=0 +AC_MSG_CHECKING(for libzbar) +AC_ARG_WITH(zbar, + [ --with-zbar=PREFIX (base of libzbar installation)], + [AC_MSG_RESULT([$with_zbar]) + AS_CASE([$with_zbar], + [no],[], + [yes],[CHECK_LIBHEADER(ZBAR, zbar, zbar_processor_create, zbar.h,zbar=1,,)], + [ + LDFLAGS="-L$with_zbar/lib $LDFLAGS" + CPPFLAGS="-I$with_zbar/include $CPPFLAGS" + AC_CHECK_HEADERS(zbar.h, + AC_CHECK_LIB([zbar], [zbar_processor_create], + EXT_LIB_PATH="-L$with_zbar/lib $EXT_LIB_PATH" + zbar=1)) + ]) + ], + [AC_MSG_RESULT([--with-zbar not specified]) + CHECK_LIBHEADER(ZBAR, zbar, zbar_processor_create, zbar.h,zbar=1,,)]) +AM_CONDITIONAL(HAVE_ZBAR, [test "$zbar" = 1]) +AS_IF([test "x$zbar" = x1], + [AC_DEFINE([HAVE_ZBAR],[1],[Have zbar library])], + [AC_DEFINE([HAVE_ZBAR],[0],[Lacking zbar library])]) # check for jansson library jansson=0 AC_MSG_CHECKING(for libjansson) AC_ARG_WITH(jansson, - [ --with-jansson=PFX base of libjansson installation], + [ --with-jansson=PREFIX (base of libjansson installation)], [AC_MSG_RESULT([$with_jansson]) - case $with_jansson in - no) - ;; - yes) - AC_CHECK_HEADERS(jansson.h, - AC_CHECK_LIB([jansson], [json_loads], - jansson=1)) - ;; - *) + AS_CASE([$with_jansson], + [no],[], + [yes],[ + CHECK_LIBHEADER(JANSSON, jansson, json_loads, jansson.h,jansson=1,) + ],[ LDFLAGS="-L$with_jansson/lib $LDFLAGS" CPPFLAGS="-I$with_jansson/include $CPPFLAGS" AC_CHECK_HEADERS(jansson.h, AC_CHECK_LIB([jansson], [json_loads], EXT_LIB_PATH="-L$with_jansson/lib $EXT_LIB_PATH" jansson=1)) - ;; - esac + ]) ], [AC_MSG_RESULT([--with-jansson not specified]) - AC_CHECK_HEADERS(jansson.h, - AC_CHECK_LIB([jansson], [json_loads], - jansson=1))]) + CHECK_LIBHEADER(JANSSON, jansson, json_loads, jansson.h,jansson=1,)]) AM_CONDITIONAL(HAVE_JANSSON, [test "$jansson" = 1]) +AM_CONDITIONAL(HAVE_JSON, [test x$jansson = x1]) AS_IF([test "x$jansson" = x1], [AC_DEFINE([HAVE_JANSSON],[1],[Have jansson library])], [AC_DEFINE([HAVE_JANSSON],[0],[Lacking jansson library])]) @@ -555,35 +735,125 @@ AS_IF([test "x$jansson" = x1], # check for libpulse(audio) library pulse=0 -AC_CHECK_LIB(pulse,pa_stream_peek, - [AC_CHECK_HEADER([pulse/simple.h],pulse=1)]) -AS_IF([test "$build_target" = "mingw"], - [pulse=0]) -AS_IF([test "$pulse" = 1], - [AC_DEFINE([HAVE_PULSE],[1],[Have libpulse(audio) library])]) +libpulse_msg="no" +AC_MSG_CHECKING(for libpulse) +# TODO: --with-libpulse or --with-pulseaudio? What is more established +# TODO: in this context? +AC_ARG_WITH(libpulse, + [ --with-libpulse=PREFIX (base of libpulse installation)], + [AC_MSG_RESULT([$with_libpulse]) + AS_CASE([$with_libpulse], + [no],[], + [yes],[ + CHECK_LIBHEADER(LIBPULSE, + pulse, + pa_stream_peek, + pulse/simple.h, + pulse=1,) + ],[ + LDFLAGS="-L$with_libpulse/lib $LDFLAGS" + CPPFLAGS="-I$with_libpulse/include $CPPFLAGS" + AC_CHECK_HEADERS(pulse/simple.h, + AC_CHECK_LIB([pulse], + [pa_stream_peek], + EXT_LIB_PATH="-L$with_libpulse/lib $EXT_LIB_PATH" + pulse=1)) + ]) + ], + [AC_MSG_RESULT([--with-libpulse not specified]) + CHECK_LIBHEADER(LIBPULSE, + pulse, + pa_stream_peek, + pulse/simple.h, + pulse=1,)]) +AM_CONDITIONAL(HAVE_PULSE, [test "$pulse" = 1]) +AS_IF([test x"$pulse" = x1], + [AC_DEFINE([HAVE_PULSE],[1],[Have libpulse(audio) library]) + libpulse_msg="yes"], + [AC_DEFINE([HAVE_PULSE],[0],[Lacking libpulse(audio) library]) + libpulse_msg="no"]) # check for libopus(audio) library opus=0 -AC_CHECK_LIB(opus,opus_decode_float, - [AC_CHECK_HEADER([opus/opus.h], - [AC_CHECK_DECL([OPUS_SET_GAIN],[opus=1],[],[[#include ]] - )] - )] -) +libopus_msg="no" +AC_MSG_CHECKING(for libopus) +AC_ARG_WITH(libopus, + [ --with-libopus=PREFIX (base of libopus installation)], + [AC_MSG_RESULT([$with_libopus]) + AS_CASE([$with_libopus], + [no],[], + [yes],[ + CHECK_LIBHEADER(LIBOPUS, + opus, + opus_decode_float, + opus/opus.h, + AC_CHECK_DECL([OPUS_SET_GAIN], + [opus=1], + [], + [[ + #include + ]])) + ],[ + LDFLAGS="-L$with_libopus/lib $LDFLAGS" + CPPFLAGS="-I$with_libopus/include $CPPFLAGS" + AC_CHECK_HEADERS(opus/opus.h, + AC_CHECK_LIB([opus], + [OPUS_SET_GAIN], + EXT_LIB_PATH="-L$with_libopus/lib $EXT_LIB_PATH" + opus=1)) + ]) + ], + [AC_MSG_RESULT([--with-libopus not specified]) + CHECK_LIBHEADER(LIBOPUS, + opus, + opus_decode_float, + opus/opus.h, + AC_CHECK_DECL([OPUS_SET_GAIN], + [opus=1], + [], + [[ + #include + ]]))]) +AM_CONDITIONAL(HAVE_OPUS, [test "$opus" = 1]) AS_IF([test "x$opus" = x1], - [AC_DEFINE([HAVE_OPUS],[1],[Have libopus library])]) + [AC_DEFINE([HAVE_OPUS],[1],[Have libopus library]) + libopus_msg="yes"], + [AC_DEFINE([HAVE_OPUS],[0],[Lacking libopus library]) + libopus_msg="no"]) # libogg -AC_CHECK_LIB(ogg, ogg_stream_flush_fill, - [AC_CHECK_HEADERS([ogg/ogg.h], - AM_CONDITIONAL(HAVE_OGG, true) - ogg=1 - AC_DEFINE(HAVE_OGG,1,[Have ogg]), - AM_CONDITIONAL(HAVE_OGG, false) - ogg=0 - AC_DEFINE(HAVE_OGG,0,[lacking ogg]))], - AM_CONDITIONAL(HAVE_OGG, false) - ogg=0) +AC_MSG_CHECKING(for libogg) +AC_ARG_WITH(libogg, + [ --with-libogg=PREFIX (base of libogg installation)], + [AC_MSG_RESULT([$with_libogg]) + AS_CASE([$with_libogg], + [no],[], + [yes],[ + CHECK_LIBHEADER(LIBOGG, + ogg, + ogg_stream_flush_fill, + ogg/ogg.h, + ogg=1,) + ],[ + LDFLAGS="-L$with_libogg/lib $LDFLAGS" + CPPFLAGS="-I$with_libogg/include $CPPFLAGS" + AC_CHECK_HEADERS(ogg/ogg.h, + AC_CHECK_LIB([ogg], + [ogg_stream_flush_fill], + EXT_LIB_PATH="-L$with_libogg/lib $EXT_LIB_PATH" + ogg=1)) + ]) + ], + [AC_MSG_RESULT([--with-libogg not specified]) + CHECK_LIBHEADER(LIBOGG, + ogg, + ogg_stream_flush_fill, + ogg/ogg.h, + ogg=1,)]) +AM_CONDITIONAL(HAVE_OGG, [test "$ogg" = 1]) +AS_IF([test x"$ogg" = x1], + [AC_DEFINE([HAVE_OGG],[1],[Have ogg])] + [AC_DEFINE([HAVE_OGG],[0],[Lacking ogg])]) PKG_CHECK_MODULES([GLIB], @@ -605,46 +875,44 @@ PKG_CHECK_MODULES([GLIB], AM_CONDITIONAL(HAVE_ABE, [false]) AC_DEFINE([HAVE_PBC],[0],[Lacking glib library])]) + gst=0 +gstreamer_msg="no" +AC_MSG_CHECKING(for gstreamer) PKG_CHECK_MODULES( [GST], [glib-2.0 gobject-2.0 gstreamer-1.0 gstreamer-app-1.0 gstreamer-audio-1.0], - [gst=1], + [gst=1 + gstreamer_msg="yes"], [gst=0]) -# Pulse Audio -if test "x$pulse" != "x1" -o "x$opus" != "x1" -o "x$ogg" != "x1" -then - if test "x$gst" != "x1" - then +# conversation +AC_MSG_CHECKING(conversation feature set to build) +AS_IF([test "x$pulse" != "x1" -o "x$opus" != "x1" -o "x$ogg" != "x1"],[ + AS_IF([test "x$gst" != "x1"],[ conversation_backend=none AM_CONDITIONAL(BUILD_PULSE_HELPERS, false) AM_CONDITIONAL(BUILD_GST_HELPERS, false) AM_CONDITIONAL(BUILD_EXPERIMENTAL_HELPERS, false) - else + ],[ conversation_backend=gst AM_CONDITIONAL(BUILD_PULSE_HELPERS, false) AM_CONDITIONAL(BUILD_GST_HELPERS, true) AM_CONDITIONAL(BUILD_EXPERIMENTAL_HELPERS, false) - fi -else - + ]) +],[ conversation_backend=pulse AM_CONDITIONAL(BUILD_PULSE_HELPERS, true) AM_CONDITIONAL(BUILD_GST_HELPERS, false) AM_CONDITIONAL(BUILD_EXPERIMENTAL_HELPERS, false) -fi +]) + +AS_IF([test "x$conversation_backend" = "xnone"], + AM_CONDITIONAL(BUILD_CONVERSATION, false), + AM_CONDITIONAL(BUILD_CONVERSATION, true)) # libgnurl LIBGNURL_CHECK_CONFIG(,7.34.0,gnurl=1,gnurl=0) -if test "$gnurl" = 1 -then - AM_CONDITIONAL(HAVE_LIBGNURL, true) - AC_DEFINE([HAVE_LIBGNURL],[1],[Have libgnurl]) -else - AM_CONDITIONAL(HAVE_LIBGNURL, false) - AC_DEFINE([HAVE_LIBGNURL],[0],[Lacking libgnurl]) -fi SAVE_CPPFLAGS=$CPPFLAGS CPPFLAGS="$LIBGNURL_CPPFLAGS $LIBCURL_CPPFLAGS $CPPFLAGS" @@ -652,40 +920,31 @@ LIBS="$LIBGNURL $LIBCURL $LIBS" # libcurl-gnutls LIBCURL_CHECK_CONFIG(,7.34.0,[curl=true],[curl=false]) -if test "x$curl" = xtrue -then - - AC_CHECK_HEADERS([curl/curl.h], +AS_IF([test "x$curl" = xtrue],[ + AC_CHECK_HEADER([curl/curl.h], AC_CHECK_DECLS(CURLINFO_TLS_SESSION,[curl=true],[curl=false],[[#include ]]), [curl=false]) - AC_CHECK_HEADERS([gnurl/curl.h], - AC_CHECK_DECLS(CURLINFO_TLS_SESSION,[curl=true],,[[#include ]])) # need libcurl-gnutls.so, everything else is not acceptable AC_CHECK_LIB([curl-gnutls],[curl_easy_getinfo],,[curl=false]) # cURL must support CURLINFO_TLS_SESSION, version >= 7.34 -fi - -# Check for curl/curl.h and gnurl/curl.h so we can use #ifdef -# HAVE_CURL_CURL_H later (the above LIBCURL_CHECK_CONFIG accepted -# *either* header set). -AC_CHECK_HEADERS([curl/curl.h],, - curl=false - AC_CHECK_HEADERS([gnurl/curl.h],, - gnurl=false)) - - +]) -if test x$curl = xfalse -then - AM_CONDITIONAL(HAVE_LIBCURL, false) -if test "$gnurl" = 0 -then - AC_MSG_WARN([ERROR: GNUnet requires libcurl-gnutls or gnurl >= 7.34]) -fi -else - AM_CONDITIONAL(HAVE_LIBCURL, true) - AC_DEFINE([HAVE_LIBCURL],[1],[Have CURL]) -fi +# libcurl and libgnurl should be mutually exclusive +AS_IF([test "$gnurl" = 1], + [AM_CONDITIONAL(HAVE_LIBGNURL, true) + AC_DEFINE([HAVE_LIBGNURL],[1],[Have libgnurl]) + AM_CONDITIONAL(HAVE_LIBCURL, false) + AC_DEFINE([HAVE_LIBCURL],[0],[Lacking libcurl])], + [AS_IF([test "$curl" = true], + [AM_CONDITIONAL(HAVE_LIBGNURL, false) + AC_DEFINE([HAVE_LIBGNURL],[0],[Lacking libgnurl]) + AM_CONDITIONAL(HAVE_LIBCURL, true) + AC_DEFINE([HAVE_LIBCURL],[1],[Have libcurl])], + [AC_MSG_WARN([ERROR: GNUnet requires libcurl-gnutls or gnurl >= 7.34]) + AM_CONDITIONAL(HAVE_LIBGNURL, false) + AC_DEFINE([HAVE_LIBGNURL],[0],[Lacking libgnurl]) + AM_CONDITIONAL(HAVE_LIBCURL, false) + AC_DEFINE([HAVE_LIBCURL],[0],[Lacking libcurl])])]) AC_SEARCH_LIBS(__atomic_load_8, atomic, [have_libatomic=1 AC_DEFINE(HAVE_LIBATOMIC,1,[external libatomic])]) AM_CONDITIONAL(HAVE_LIBATOMIC, [test "$have_libatomic" = 1]) @@ -694,27 +953,13 @@ AM_CONDITIONAL(HAVE_LIBATOMIC, [test "$have_libatomic" = 1]) LIBS=$SAVE_LIBS CPPFLAGS=$SAVE_CPPFLAGS -AC_CHECK_HEADERS([glpk.h],[glpk=true],[glpk=false]) -# GLPK must support glpk_init_env, version >= 4.43 -AC_CHECK_LIB([glpk],[glp_init_env],,[glpk=false]) -# GLPK must support atm MLP presolving, version >= 4.32 -AC_CHECK_MEMBERS(glp_iocp.presolve,,[glpk=false],[[#include ]]) -if test "x$glpk" = xfalse -then - AM_CONDITIONAL(HAVE_LIBGLPK, false) - AC_MSG_WARN([ERROR: GNUnet requires GLPK >= 4.32]) -else - AM_CONDITIONAL(HAVE_LIBGLPK, true) - AC_DEFINE([HAVE_LIBGLPK],[1],[Have GLPK]) -fi - AC_CHECK_HEADERS([nss.h],[nss=true],[nss=false]) -if test x$nss = xfalse -then +AS_IF([test x$nss = xfalse], + [ AM_CONDITIONAL(HAVE_GLIBCNSS, false) AC_MSG_WARN([No GNU libc nss header, will not build NSS plugin]) -else + ],[ NSS_INCLUDES=" #include " @@ -723,7 +968,7 @@ else [AM_CONDITIONAL(HAVE_GLIBCNSS, false) AC_MSG_WARN([No nss header fails to define NSS_STATUS_UNAVAIl, will not build NSS plugin])], [$NSS_INCLUDES]) -fi +]) @@ -740,38 +985,35 @@ AC_ARG_ENABLE([taler-wallet], [taler_only=${enableval}], [taler_only=no]) AC_MSG_RESULT($taler_only) -if test "x$taler_only" = "xyes" -then +AS_IF([test "x$taler_only" = "xyes"], +[ AM_CONDITIONAL([TALER_ONLY],true) AC_DEFINE([TALER_WALLET_ONLY],[1],[Compiling for Taler wallet]) -else +],[ AM_CONDITIONAL([TALER_ONLY],false) AC_DEFINE([TALER_WALLET_ONLY],[0],[Canonical compilation]) -fi +]) # test for libextractor extractor=0 AC_MSG_CHECKING(for libextractor) AC_ARG_WITH(extractor, - [ --with-extractor=PFX base of libextractor installation], + [ --with-extractor=PREFIX (base of libextractor installation)], [AC_MSG_RESULT([$with_extractor]) - case $with_extractor in - no) - ;; - yes) + AS_CASE([$with_extractor], + [no],[], + [yes],[ AC_CHECK_HEADERS([extractor.h], AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults], extractor=1)) - ;; - *) + ],[ LDFLAGS="-L$with_extractor/lib $LDFLAGS" CPPFLAGS="-I$with_extractor/include $CPPFLAGS" AC_CHECK_HEADERS([extractor.h], AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults], EXT_LIB_PATH="-L$with_extractor/lib $EXT_LIB_PATH" extractor=1)) - ;; - esac + ]) ], [AC_MSG_RESULT([--with-extractor not specified]) AC_CHECK_HEADERS([extractor.h], @@ -780,53 +1022,50 @@ AC_ARG_WITH(extractor, # restore LIBS LIBS=$SAVE_LIBS -if test "$extractor" != 1 -then +AS_IF([test "$extractor" != 1], + [ AM_CONDITIONAL(HAVE_LIBEXTRACTOR, false) AC_DEFINE([HAVE_LIBEXTRACTOR],[0],[Lacking libextractor]) -else + ],[ AM_CONDITIONAL(HAVE_LIBEXTRACTOR, true) AC_DEFINE([HAVE_LIBEXTRACTOR],[1],[Have libextractor]) -fi + ]) -if test "$taler_only" != yes -then +AS_IF([test "$taler_only" != yes],[ + # Check for libltdl header (#2999) ltdl=0 AC_MSG_CHECKING(for libltdl) AC_ARG_WITH(ltdl, - [ --with-ltdl=PFX base of libltdl installation], + [AS_HELP_STRING([--with-ltdl=PREFIX],[base of libltdl installation])], [AC_MSG_RESULT([$with_ltdl]) - case $with_ltdl in - no) - ;; - yes) + AS_CASE([$with_ltdl], + [no],[], + [yes],[ AC_CHECK_HEADERS(ltdl.h, AC_CHECK_LIB([ltdl], [lt_dlopenext], ltdl=1)) - ;; - *) + ],[ LDFLAGS="-L$with_ltdl/lib $LDFLAGS" CPPFLAGS="-I$with_ltdl/include $CPPFLAGS" AC_CHECK_HEADERS(ltdl.h, AC_CHECK_LIB([ltdl], [lt_dlopenext], EXT_LIB_PATH="-L$with_ltdl/lib $EXT_LIB_PATH" ltdl=1)) - ;; - esac + ]) ], [AC_MSG_RESULT([--with-ltdl not specified]) AC_CHECK_HEADERS(ltdl.h, AC_CHECK_LIB([ltdl], [lt_dlopenext], ltdl=1))]) -if test x$ltdl = x1 -then +AS_IF([test x$ltdl = x1], +[ AC_MSG_RESULT([libltdl found]) -else - AC_MSG_ERROR([GNUnet requires libltdl (from GNU libtool), try installing libltdl-dev]) -fi +],[ + AC_MSG_ERROR([GNUnet requires libltdl (from GNU libtool).]) +]) # restore LIBS LIBS=$SAVE_LIBS @@ -836,6 +1075,9 @@ LIBS=$SAVE_LIBS # if none exist, fail and message that libidn or libidn2 # is required with a preference for libidn2. # TODO: What we have right here can probably be improved. +AC_MSG_CHECKING(for idn or idn2) + +AC_MSG_CHECKING(for idn) my_with_libidn=1 AC_ARG_WITH(libidn, AS_HELP_STRING([--with-libidn=pathname], @@ -844,19 +1086,20 @@ AC_ARG_WITH(libidn, [withval="yes"]) AS_IF([test x_$withval = x_yes], [AC_CHECK_HEADERS([idna.h], - AC_MSG_NOTICE([Found idna.h]), - AC_CHECK_HEADERS([idn/idna.h], - AC_MSG_NOTICE([Found idn/idna.h]), - my_with_libidn=0))], + AC_MSG_NOTICE([Found idna.h]), + AC_CHECK_HEADERS([idn/idna.h], + AC_MSG_NOTICE([Found idn/idna.h]), + my_with_libidn=0))], [AS_IF([test x_$withval != x_no], [CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" AC_CHECK_HEADERS([idna.h], - AC_MSG_NOTICE([Found idna.h]), - [AC_MSG_NOTICE([Failed to find idna.h]) - my_with_libidn=0])], + AC_MSG_NOTICE([Found idna.h]), + [AC_MSG_NOTICE([Failed to find idna.h]) + my_with_libidn=0])], [my_with_libidn=0])]) +AC_MSG_CHECKING(for idn2) my_with_libidn2=1 AC_ARG_WITH(libidn2, AS_HELP_STRING([--with-libidn2=pathname], @@ -865,15 +1108,15 @@ AC_ARG_WITH(libidn2, [withval="yes"]) AS_IF([test x_$withval = x_yes], [AC_CHECK_HEADERS([idn2.h], - AC_MSG_NOTICE([Found idn2.h]), - AC_CHECK_HEADERS([idn2/idn2.h], - AC_MSG_NOTICE([Found idn2/idn2.h]), - [AC_MSG_NOTICE([Failed to find idn2.h]) - my_with_libidn2=0]))], + AC_MSG_NOTICE([Found idn2.h]), + AC_CHECK_HEADERS([idn2/idn2.h], + AC_MSG_NOTICE([Found idn2/idn2.h]), + [AC_MSG_NOTICE([Failed to find idn2.h]) + my_with_libidn2=0]))], [AS_IF([test x_$withval != x_no], [CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib"], - [my_with_libidn2=0])]) + [my_with_libidn2=0])]) AC_MSG_CHECKING([if libidn can be used]) # Check for LIBIDNs @@ -889,8 +1132,8 @@ AS_IF([test x$my_with_libidn2 = x1], LIBS="-lidn2 $LIBS" AC_DEFINE_UNQUOTED([HAVE_LIBIDN2], [1], - [Define to 1 if you have 'libidn2' (-lidn2).])], - [MISSING_DEPS="${MISSING_DEPS}${MISSING_SEP}libidn2" + [Define to 1 if you have 'libidn2' (-lidn2).])], + [MISSING_DEPS="${MISSING_DEPS}${MISSING_SEP}libidn2" MISSING_SEP=", "])]) AM_CONDITIONAL(HAVE_LIBIDN2, test x$working_libidn2 = x1) AS_IF([test x$working_libidn2 = x0], @@ -899,11 +1142,11 @@ AS_IF([test x$working_libidn2 = x0], AC_CHECK_LIB([idn], [idna_to_ascii_8z], [working_libidn1=1 - LIBS="-lidn $LIBS" - AC_DEFINE_UNQUOTED([HAVE_LIBIDN], - [1], - [Define to 1 if you have 'libidn' (-lidn).])], - [there_can_only_be_one=0])], + LIBS="-lidn $LIBS" + AC_DEFINE_UNQUOTED([HAVE_LIBIDN], + [1], + [Define to 1 if you have 'libidn' (-lidn).])], + [there_can_only_be_one=0])], [AS_IF([test x$my_with_libidn2 = x1], [there_can_only_be_one=0 AC_MSG_FAILURE([* There can only be one libidn. @@ -929,18 +1172,17 @@ AC_ARG_WITH(zlib, [AS_IF([test "$withval" = "no"], [AC_MSG_ERROR([GNUnet requires zlib])], [test "$withval" != "yes"], - [ - Z_DIR=$withval - CPPFLAGS="${CPPFLAGS} -I$withval/include" - LDFLAGS="${LDFLAGS} -L$withval/lib" - ]) - ]) + [Z_DIR=$withval + CPPFLAGS="${CPPFLAGS} -I$withval/include" + LDFLAGS="${LDFLAGS} -L$withval/lib"])]) AC_CHECK_HEADER(zlib.h, [], [AC_MSG_ERROR([GNUnet requires zlib])]) -AC_CHECK_LIB(z, compress2, - [ - AC_DEFINE([HAVE_ZLIB], [], [Have compression library]) +AC_CHECK_LIB(z, + compress2, + [AC_DEFINE([HAVE_ZLIB], + [], + [Have compression library]) if test "x${Z_DIR}" != "x"; then Z_CFLAGS="-I${Z_DIR}/include" Z_LIBS="-L${Z_DIR}/lib -lz" @@ -951,34 +1193,35 @@ AC_CHECK_LIB(z, compress2, AC_SUBST(Z_CFLAGS) AC_SUBST(Z_LIBS) -if test "$enable_shared" = "no" -then - AC_MSG_ERROR([GNUnet only works with shared libraries. Sorry.]) -fi - +AS_IF([test "$enable_shared" = "no"], + [AC_MSG_ERROR([GNUnet only works with shared libraries. Sorry.])]) # restore LIBS LIBS=$SAVE_LIBS -fi +# end of taler-only being false +]) + # check for iconv AM_ICONV # test for libunistring gl_LIBUNISTRING -if test $HAVE_LIBUNISTRING != yes; then - AC_MSG_ERROR([GNUnet requires libunistring]) -fi +AS_IF([test $HAVE_LIBUNISTRING != yes], + [AC_MSG_ERROR([GNUnet requires libunistring])]) + # under emscripten, $gl_libunistring_hexversion is undefined if test "$taler_only" != yes; then -if test "x$gl_libunistring_hexversion" = "x" || test "$gl_libunistring_hexversion" -le 2305; then - AC_MSG_ERROR([GNUnet requires libunistring >= 0.9.1.1]) -fi + +AS_IF([test "x$gl_libunistring_hexversion" = "x" || test "$gl_libunistring_hexversion" -le 2305], + [AC_MSG_ERROR([GNUnet requires libunistring >= 0.9.1.1])]) fi -AC_CHECK_HEADERS([unistr.h],,AC_MSG_ERROR([Compiling GNUnet requires unistr.h (from libunistring) to be installed])) +AC_CHECK_HEADERS([unistr.h], + , + AC_MSG_ERROR([Compiling GNUnet requires unistr.h (from libunistring) to be installed])) # restore LIBS LIBS=$SAVE_LIBS @@ -994,10 +1237,11 @@ AC_CHECK_HEADERS([fcntl.h math.h errno.h ctype.h limits.h stdio.h stdlib.h strin -# Checks for headers that are only required on some systems or opional (and where we do NOT abort if they are not there) -AC_CHECK_HEADERS([stdatomic.h 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]) +# Checks for headers that are only required on some systems or +# opional (and where we do NOT abort if they are not there) +AC_CHECK_HEADERS([stdatomic.h 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 argz.h ucred.h sys/ucred.h endian.h sys/endian.h execinfo.h byteswap.h]) -# FreeBSD requires something more funky for netinet/in_systm.h and netinet/ip.h... +# FreeBSD requires this for netinet/in_systm.h and netinet/ip.h AC_CHECK_HEADERS([sys/types.h netinet/in_systm.h netinet/in.h netinet/ip.h],,, [#ifdef HAVE_SYS_TYPES_H #include @@ -1019,14 +1263,12 @@ AC_MSG_CHECKING(for SQLite) AC_ARG_WITH(sqlite, [ --with-sqlite=PFX base of SQLite installation], [AC_MSG_RESULT("$with_sqlite") - case $with_sqlite in - no) - ;; - yes) - AC_CHECK_HEADERS(sqlite3.h, - sqlite=true) - ;; - *) + AS_CASE([$with_sqlite], + [no],[], + [yes],[ + AC_CHECK_HEADERS(sqlite3.h, + sqlite=true)], + [ LDFLAGS="-L$with_sqlite/lib $LDFLAGS" CPPFLAGS="-I$with_sqlite/include $CPPFLAGS" AC_CHECK_HEADERS(sqlite3.h, @@ -1036,8 +1278,7 @@ AC_ARG_WITH(sqlite, sqlite=true) LDFLAGS=$SAVE_LDFLAGS CPPFLAGS=$SAVE_CPPFLAGS - ;; - esac + ]) ], [AC_MSG_RESULT([--with-sqlite not specified]) AC_CHECK_HEADERS(sqlite3.h, sqlite=true)]) @@ -1048,9 +1289,9 @@ AC_SUBST(SQLITE_LDFLAGS) LDFLAGS=$SAVE_LDFLAGS CPPFLAGS=$SAVE_CPPFLAGS -# test for postgres +# test for postgres: postgres=false -# even running the check for postgres breaks emscripten ... +# even running the check for postgres breaks emscripten AS_IF([test "$taler_only" != yes], [AX_LIB_POSTGRESQL([9.5], [CPPFLAGS="$CPPFLAGS $POSTGRESQL_CPPFLAGS" @@ -1058,8 +1299,11 @@ AS_IF([test "$taler_only" != yes], postgres=true) ], [AC_MSG_RESULT([no postgres])])]) -AM_CONDITIONAL(HAVE_POSTGRESQL, test x$postgres = xtrue) +AM_CONDITIONAL(HAVE_POSTGRESQL, test x$postgres = xtrue) +AS_IF([test "x$postgres" = xtrue], + [AC_DEFINE([HAVE_POSTGRESQL],[1],[Have PostgreSQL])], + [AC_DEFINE([HAVE_POSTGRESQL],[0],[Lacking PostgreSQL])]) LDFLAGS=$SAVE_LDFLAGS CPPFLAGS=$SAVE_CPPFLAGS @@ -1068,11 +1312,6 @@ CPPFLAGS=$SAVE_CPPFLAGS AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include ]) AC_CHECK_TYPES([size_t], [], [], [#include ]) -if test "$build_target" = "mingw" -then - CYGWIN_MYSQL_MAGIC="#include " -fi - # test for mysql mysql=false mysqlfail=false @@ -1082,16 +1321,13 @@ AC_MSG_CHECKING(for mysql) AC_ARG_WITH(mysql, [ --with-mysql=PFX base of MySQL installation], [AC_MSG_RESULT([$with_mysql]) - case $with_mysql in - no) - ;; - yes|"") + AS_CASE([$with_mysql], + [no],[], + [yes|""],[ AC_CHECK_HEADERS(mysql/mysql.h, AC_CHECK_LIB(mysqlclient, mysql_init, - - mysql=true), [], [$CYGWIN_MYSQL_MAGIC]) - ;; - *) + mysql=true), [], []) + ],[ LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql $LDFLAGS $ZLIBS" CPPFLAGS="-I$with_mysql/include $CPPFLAGS" AC_CHECK_HEADERS(mysql/mysql.h, @@ -1099,9 +1335,8 @@ AC_ARG_WITH(mysql, MYSQL_LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql" MYSQL_CPPFLAGS="-I$with_mysql/include" - mysql=true), [], [$CYGWIN_MYSQL_MAGIC]) - ;; - esac + mysql=true), [], []) + ]) ], [AC_MSG_RESULT([--with-mysql not specified]) if test -d "/usr/lib64/mysql"; then @@ -1117,7 +1352,7 @@ AC_ARG_WITH(mysql, MYSQL_LDFLAGS="-L$MYSQL_LIBDIR" mysql=true - , [], [$CYGWIN_MYSQL_MAGIC])]) + , [], [])]) ]) AC_SUBST(MYSQL_LDFLAGS) @@ -1125,11 +1360,11 @@ AC_SUBST(MYSQL_CPPFLAGS) # additional version check for mysql AC_ARG_ENABLE(mysql-version-check, [ --disable-mysql-version-check do not check MySQL version],, enable_mysql_version_check=yes) -if test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes" -then +AS_IF([test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes"], + [ AC_MSG_CHECKING(mysql version) AC_COMPILE_IFELSE([AC_LANG_PROGRAM( - [[$CYGWIN_MYSQL_MAGIC + [[ #include ]], [[ #if (MYSQL_VERSION_ID < 40100) @@ -1138,14 +1373,14 @@ then int main () { return 0; } ]]) ],mysql=true,mysql=false) - if test "$mysql" = "false" - then + AS_IF([test "$mysql" = "false"], + [ mysqlfail=true AC_MSG_RESULT([fail, >= 4.1 required]) - else + ],[ AC_MSG_RESULT(ok) - fi -fi + ]) +]) AM_CONDITIONAL(HAVE_MYSQL, test x$mysql = xtrue) AM_CONDITIONAL(HAVE_MYSQLE, false) # restore LIBS @@ -1153,83 +1388,32 @@ LIBS=$SAVE_LIBS LDFLAGS=$SAVE_LDFLAGS CPPFLAGS=$SAVE_CPPFLAGS -if test "$sqlite" = 0 -a "$mysql" = 0 -then - AC_MSG_ERROR([GNUnet requires SQLite or MySQL]) -fi +# TODO: should this test for "or" not "and"? +# TODO: Add postgres? +AS_IF([test "$sqlite" = 0 -a "$mysql" = 0], +[ + AC_MSG_ERROR([GNUnet requires SQLite or MySQL / MariaDB.]) +]) # libmicrohttpd lmhd=0 -AC_MSG_CHECKING([for libmicrohttpd]) +m4_define([MHD_MODULE], [libmicrohttpd >= 0.9.63]) AC_ARG_WITH(microhttpd, - [ --with-microhttpd=PFX base of libmicrohttpd installation], - [AC_MSG_RESULT([$with_microhttpd]) - case $with_microhttpd in - no) - ;; - yes|"") - AC_CHECK_HEADERS([microhttpd.h], - AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT, - AC_CHECK_LIB([microhttpd], [MHD_get_fdset2], - [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.52]) - AC_COMPILE_IFELSE([AC_LANG_SOURCE([ - #include "$native_srcdir/src/include/platform.h" - #include - #if (MHD_VERSION < 0x0094200) - #error needs at least version 0.9.42 - #endif - int main () { return 0; } - ])], - [AC_MSG_RESULT(ok) - lmhd=1], - [AC_MSG_RESULT(failed)])]), - [],[#include "$native_srcdir/src/include/platform.h" - #include ]),, - [#include "$native_srcdir/src/include/platform.h"]) - ;; - *) - LDFLAGS="-L$with_microhttpd/lib $LDFLAGS" - CPPFLAGS="-I$with_microhttpd/include $CPPFLAGS" - AC_CHECK_HEADERS(microhttpd.h, - AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT, - AC_CHECK_LIB([microhttpd], [MHD_get_fdset2], - EXT_LIB_PATH="-L$with_microhttpd/lib $EXT_LIB_PATH" - [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.52]) - AC_COMPILE_IFELSE([AC_LANG_SOURCE([ - #include "$native_srcdir/src/include/platform.h" - #include - #if (MHD_VERSION < 0x0094200) - #error needs at least version 0.9.42 - #endif - int main () { return 0; } - ])], - [AC_MSG_RESULT(ok) - lmhd=1], - [AC_MSG_RESULT(failed)])]), - [],[#include "$native_srcdir/src/include/platform.h" - #include ]),, - [#include "$native_srcdir/src/include/platform.h"]) - ;; - esac - ], - [AC_MSG_RESULT([--with-microhttpd not specified]) - AC_CHECK_HEADERS([microhttpd.h], - AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT, - AC_CHECK_LIB([microhttpd], [MHD_get_fdset2], - [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.52]) - AC_COMPILE_IFELSE([AC_LANG_SOURCE([ - #include "$native_srcdir/src/include/platform.h" - #include - #if (MHD_VERSION < 0x0094200) - #error needs at least version 0.9.52 - #endif - ])], - [AC_MSG_RESULT(ok) - lmhd=1], - [AC_MSG_RESULT(failed)])]), - [],[#include "$native_srcdir/src/include/platform.h" - #include ]),, - [#include "$native_srcdir/src/include/platform.h"])]) + [AS_HELP_STRING([--with-microhttpd[[=PFX]]], + [base of libmicrohttpd installation])], + [], + [with_microhttpd=check]) +AS_CASE([$with_microhttpd], + [no], [], + [yes], [PKG_CHECK_MODULES([MHD], [MHD_MODULE], [lmhd=1])], + [check], [PKG_CHECK_MODULES([MHD], [MHD_MODULE], + [lmhd=1], + [AC_MSG_WARN([Building without libmicrohttpd])])], + [SAVE_PKG_CONFIG_PATH=$PKG_CONFIG_PATH + PKG_CONFIG_PATH=$with_microhttpd/lib/pkgconfig + export PKG_CONFIG_PATH + PKG_CHECK_MODULES([MHD], [MHD_MODULE], [lmhd=1]) + PKG_CONFIG_PATH=$SAVE_PKG_CONFIG_PATH]) AM_CONDITIONAL(HAVE_MHD, test x$lmhd = x1) AC_DEFINE_UNQUOTED([HAVE_MHD], $lmhd, [We have libmicrohttpd]) @@ -1262,14 +1446,15 @@ AC_CHECK_MEMBER([struct sockaddr_in.sin_len], ]) AC_CHECK_MEMBER([struct sockaddr_un.sun_len], - [ AC_DEFINE(HAVE_SOCKADDR_UN_SUN_LEN, 1, [Do we have sockaddr_un.sun_len?]) - ], - [], - [ - #include - #include - #include - ]) + [ AC_DEFINE(HAVE_SOCKADDR_UN_SUN_LEN, + 1, + [Do we have sockaddr_un.sun_len?])], + [], + [ + #include + #include + #include + ]) @@ -1295,15 +1480,19 @@ LIBS=$SAVE_LIBS GN_INTLINCL="" GN_LIBINTL="$LTLIBINTL" -AC_ARG_ENABLE(framework, [ --enable-framework enable Mac OS X framework build helpers],enable_framework_build=$enableval) -AM_CONDITIONAL(WANT_FRAMEWORK, test x$enable_framework_build = xyes) -if test x$enable_framework_build = xyes -then - AC_DEFINE([FRAMEWORK_BUILD], 1, [Build a Mac OS X Framework]) - GN_INTLINCL='-I$(top_srcdir)/src/intlemu' - GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation' - AC_LIB_APPENDTOVAR([CPPFLAGS], [$GN_INTLINCL]) -fi +AC_ARG_ENABLE(framework, + [AS_HELP_STRING([--enable-framework],[enable Mac OS X framework build helpers])], + enable_framework_build=$enableval) +AM_CONDITIONAL(WANT_FRAMEWORK, + test x$enable_framework_build = xyes) +AS_IF([test x$enable_framework_build = xyes], + [AC_DEFINE([FRAMEWORK_BUILD], + 1, + [Build a Mac OS X Framework]) + GN_INTLINCL='-I$(top_srcdir)/src/intlemu' + GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation' + AC_LIB_APPENDTOVAR([CPPFLAGS], + [$GN_INTLINCL])]) GN_LIB_LDFLAGS="-export-dynamic -no-undefined" GN_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined" @@ -1328,45 +1517,36 @@ AC_SUBST(DATAROOTDIR) # test for sudo AC_MSG_CHECKING(for sudo) +#AC_CHECK_PROGS(SUDO_BINARY, [sudo], false) +#AM_CONDITIONAL(HAVE_SUDO, test x$SUDO_BINARY != xfalse) AC_ARG_WITH(sudo, - [ --with-sudo=PATH path to sudo binary (or just yes)], - [AC_MSG_RESULT("$with_sudo") - case $with_sudo in - no) - SUDO_BINARY= - ;; - yes) - SUDO_BINARY=sudo - ;; - *) - SUDO_BINARY=$with_sudo - ;; - esac - ], - [AC_MSG_RESULT([no])]) + [ --with-sudo=PATH path to sudo binary (or just yes)], + [AC_MSG_RESULT("$with_sudo") + AS_CASE([$with_sudo], + [no],[SUDO_BINARY=], + [yes],[SUDO_BINARY=sudo], + [SUDO_BINARY=$with_sudo])], + [AC_MSG_RESULT([no])]) AC_SUBST(SUDO_BINARY) -AM_CONDITIONAL([HAVE_SUDO], [test "x$SUDO_BINARY" != "x" -o -w /]) +AM_CONDITIONAL([HAVE_SUDO], + [test "x$SUDO_BINARY" != "x" -o -w /]) +# test for doas +AC_MSG_CHECKING(for doas) +AC_CHECK_PROGS(DOAS_BINARY, [doas], false) +AM_CONDITIONAL(HAVE_DOAS_BINARY, test x$DOAS_BINARY != xfalse) # test for gnunetdns group name GNUNETDNS_GROUP=gnunetdns AC_MSG_CHECKING(for gnunetdns group name) AC_ARG_WITH(gnunetdns, - [ --with-gnunetdns=GRPNAME name for gnunetdns group], - [AC_MSG_RESULT("$with_gnunetdns") - case $with_gnunetdns in - no) - GNUNETDNS_GROUP=gnunet - ;; - yes) - GNUNETDNS_GROUP=gnunetdns - ;; - *) - GNUNETDNS_GROUP=$with_gnunetdns - ;; - esac - ], - [AC_MSG_RESULT([gnunetdns])]) + [ --with-gnunetdns=GRPNAME name for gnunetdns group], + [AC_MSG_RESULT("$with_gnunetdns") + AS_CASE([$with_gnunetdns], + [no],[GNUNETDNS_GROUP=gnunet], + [yes],[GNUNETDNS_GROUP=gnunetdns], + [GNUNETDNS_GROUP=$with_gnunetdns])], + [AC_MSG_RESULT([gnunetdns])]) AC_SUBST(GNUNETDNS_GROUP) @@ -1376,21 +1556,21 @@ gnutls=0 gnutls_dane=0 AC_MSG_CHECKING(for gnutls) AC_ARG_WITH(gnutls, - [ --with-gnutls=PFX base of gnutls installation], - [AC_MSG_RESULT([$with_gnutls]) - case $with_gnutls in - no) - ;; - yes) - AC_CHECK_HEADERS([gnutls/abstract.h], - AC_CHECK_LIB([gnutls], [gnutls_priority_set], - gnutls=true)) - AC_CHECK_HEADERS([gnutls/dane.h], - AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw], - gnutls_dane=1)) - ;; - *) - LDFLAGS="-L$with_gnutls/lib $LDFLAGS" + [ --with-gnutls=PFX base of gnutls installation], + [AC_MSG_RESULT([$with_gnutls]) + AS_CASE([$with_gnutls], + [no],[], + [yes], + [AC_CHECK_HEADERS([gnutls/abstract.h], + AC_CHECK_LIB([gnutls], + [gnutls_priority_set], + gnutls=true)) + AC_CHECK_HEADERS([gnutls/dane.h], + AC_CHECK_LIB([gnutls-dane], + [dane_verify_crt_raw], + gnutls_dane=1))], + + [LDFLAGS="-L$with_gnutls/lib $LDFLAGS" CPPFLAGS="-I$with_gnutls/include $CPPFLAGS" AC_CHECK_HEADERS([gnutls/abstract.h], AC_CHECK_LIB([gnutls], [gnutls_priority_set], @@ -1399,8 +1579,7 @@ AC_ARG_WITH(gnutls, AC_CHECK_HEADERS([gnutls/dane.h], AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw], gnutls_dane=1)) - ;; - esac + ]) ], [AC_MSG_RESULT([--with-gnutls not specified]) AC_CHECK_HEADERS([gnutls/abstract.h], @@ -1416,17 +1595,15 @@ AM_CONDITIONAL(HAVE_GNUTLS_DANE, test x$gnutls_dane = x1) AC_DEFINE_UNQUOTED([HAVE_GNUTLS_DANE], $gnutls_dane, [We have GnuTLS with DANE support]) + # Test if we are building for superMUC AC_MSG_CHECKING(if GNUnet is being configured to run on the SuperMUC) AC_ARG_ENABLE([supermuc], [AS_HELP_STRING([--enable-supermuc], [build GNUnet with support to run on the SuperMUC (default is NO)])], - [if test "x$enable_supermuc" = "xno" - then - supermuc=0 - else - supermuc=1 - fi], + [AS_IF([test "x$enable_supermuc" = "xno"], + [supermuc=0], + [supermuc=1])], [supermuc=0 enable_supermuc=no]) AC_MSG_RESULT($enable_SUPERMUC) @@ -1441,12 +1618,9 @@ AC_ARG_ENABLE([nse-histogram], [have NSE send timestamp information to testbed logger for generating histogram of received messages. NOT useful for production (default is NO)])], - [if test "x$enableval" = "xno" - then - nse_histogram=0 - else - nse_histogram=1 - fi], + [AS_IF([test "x$enableval" = "xno"], + [nse_histogram=0], + [nse_histogram=1])], [nse_histogram=0 enable_nse_histogram=no]) AC_MSG_RESULT($enable_nse_histogram) @@ -1491,12 +1665,9 @@ AC_ARG_ENABLE([javaports], [enable_java_ports=${enableval}], [enable_java_ports=no]) AC_MSG_RESULT($enable_java_ports) -if test "x$enable_java_ports" = "xyes" -then - JAVAPORT="" -else - JAVAPORT="$UNIXONLY" -fi +AS_IF([test "x$enable_java_ports" = "xyes"], + [JAVAPORT=""], + [JAVAPORT="$UNIXONLY"]) AC_SUBST(JAVAPORT) # should benchmarks be run? @@ -1509,7 +1680,7 @@ AC_MSG_RESULT($enable_benchmarks) AM_CONDITIONAL([HAVE_BENCHMARKS], [test "x$enable_benchmarks" = "xyes"]) # should gnunet-testing be compiled -AC_MSG_CHECKING(wether to compile gnunet-testing) +AC_MSG_CHECKING(whether to compile gnunet-testing) AC_ARG_ENABLE([testing], [AS_HELP_STRING([--disable-testing], [do not build gnunet-testing])], [enable_testing=${enableval}], @@ -1530,12 +1701,9 @@ AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"]) AC_MSG_CHECKING(whether to compile malicious code) AC_ARG_ENABLE([malicious], [AS_HELP_STRING([--enable-malicious], [enable compiling malicious code])], - [if test "x$enableval" = "xno" - then - malicious=0 - else - malicious=1 - fi], + [AS_IF([test "x$enableval" = "xno"], + [malicious=0], + [malicious=1])], [malicious=0 enable_malicious=no]) AC_MSG_RESULT($enable_malicious) @@ -1543,9 +1711,11 @@ AM_CONDITIONAL([ENABLE_MALICIOUS], [test 1=$malicious]) AC_DEFINE_UNQUOTED([ENABLE_MALICIOUS], [$malicious], [enable compilation of malicious code]) -# should services be started on demand when needed? Some services may choose to -# never start by default and it is up to the service/module developer to decide -# by having "START_ON_DEMAND = NO" instead of "START_ON_DEMAND = @START_ON_DEMAND@" +# should services be started on demand when needed? +# Some services may choose to never start by default +# and it is up to the service/module developer to decide +# by having "START_ON_DEMAND = NO" instead of +# "START_ON_DEMAND = @START_ON_DEMAND@" # in the service/module's conf.in file. # See also IMMEDIATE_START for an unconditional immediate start. START_ON_DEMAND="YES" @@ -1553,10 +1723,8 @@ AC_MSG_CHECKING(whether to start peer's services on demand by default) AC_ARG_ENABLE([autostart], [AS_HELP_STRING([--disable-autostart], [do not start peer's services by default])], [enable_autostart=${enableval} - if test "x$enable_autostart" = "xno" - then - START_ON_DEMAND="NO" - fi + AS_IF([test "x$enable_autostart" = "xno"], + [START_ON_DEMAND="NO"]) ], [enable_autostart=yes]) AC_MSG_RESULT($enable_autostart) @@ -1572,116 +1740,20 @@ AC_ARG_ENABLE([heapstats], AC_MSG_RESULT($enable_heapstats) AC_DEFINE_UNQUOTED([ENABLE_HEAP_STATISTICS],$enable_heapstats,[enable expensive heap statistics]) -# should code be enabled that works around missing OS functionality on Windows? -# used for test cases -if test $build_target = "mingw" -then - workarounds=1 - -AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [#include - ],[ - int s = socket (0, 0, 0);]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_SOCKET],1,[Define this if socket() is available]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_SOCKET],0,[Define this if socket() is available]) - ]) - -AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [#include - ],[ - int s = select (0, NULL, NULL, NULL, NULL);]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_SELECT],1,[Define this if select() is available]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_SELECT],0,[Define this if select() is available]) - ]) - -AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [#include - ],[ - struct in_addr i; - char *s = inet_ntoa (i);]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],1,[Define this if inet_ntoa() is available]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],0,[Define this if inet_ntoa() is available]) - ]) - -AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [#include - ],[ - int s = getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],1,[Define this if getnameinfo() is available]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],0,[Define this if getnameinfo() is available]) - ]) - -AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [#include - ],[ - int s = gethostname (NULL, 0);]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],1,[Define this if gethostname() is available]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],0,[Define this if gethostname() is available]) - ]) - -AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [#include - ],[ - void *s = gethostbyname (NULL);]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],1,[Define this if gethostbyname() is available]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],0,[Define this if gethostbyname() is available]) - ]) - -AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [#include - ],[ - void *s = gethostbyaddr (NULL, 0, 0);]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],1,[Define this if gethostbyaddr() is available]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],0,[Define this if gethostbyaddr() is available]) - ]) +# Check if the __thread storage class for +# thread-local storage is available. +AC_MSG_CHECKING(whether __thread is supported) AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [#include - ],[ - int s = getaddrinfo (NULL, NULL, NULL, NULL);]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],1,[Define this if getaddrinfo() is available]) - ],[ - AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],0,[Define this if getaddrinfo() is available]) - ]) - -else - AC_MSG_CHECKING(whether to enable windows workarounds) - AC_ARG_ENABLE([windows_workarounds], - [AS_HELP_STRING([--enable-windows_workarounds], [enable workarounds used on Windows (only useful for test cases)])], - [enable_workarounds=${enableval}], - [enable_workarounds=no]) - AC_MSG_RESULT($enable_workarounds) - if test x$enable_windows_workarounds = "xyes" - then - workarounds=1 - else - workarounds=0 - fi -fi -AC_DEFINE_UNQUOTED([ENABLE_WINDOWS_WORKAROUNDS], $workarounds, [enable workarounds used on Windows (only useful for test cases)]) +[AC_LANG_PROGRAM([#include + #undef __thread + static __thread int a = 1;], + [exit(a-1);])], + [have_thread_local_gcc=1],[have_thread_local_gcc=0]) +AC_DEFINE_UNQUOTED([HAVE_THREAD_LOCAL_GCC],$have_thread_local_gcc,[Define this if __thread is supported]) +AS_IF([test "x$have_thread_local_gcc" = "x1"], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) # gcov compilation AC_MSG_CHECKING(whether to compile with support for code coverage analysis) @@ -1695,7 +1767,8 @@ AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"]) # version info -# TODO: git blame says this predates our switch to git. git-svn should be adjusted to simply git, or +# TODO: git blame says this predates our switch to git. +# git-svn should be adjusted to simply git, or # an external script that does the job. AC_PATH_PROG(svnversioncommand, svnversion) AC_PATH_PROG(gitcommand, git) @@ -1728,6 +1801,10 @@ AC_DEFINE_UNQUOTED(VCS_VERSION, [$vcs_version], [VCS revision/hash or tarball ve AC_CONFIG_FILES([ Makefile contrib/Makefile +contrib/hellos/Makefile +contrib/services/Makefile +contrib/services/openrc/Makefile +contrib/services/systemd/Makefile contrib/scripts/Makefile contrib/scripts/gnunet-logread/Makefile doc/Makefile @@ -1735,7 +1812,6 @@ doc/man/Makefile doc/doxygen/Makefile doc/handbook/Makefile doc/tutorial/Makefile -lint/Makefile m4/Makefile po/Makefile.in src/Makefile @@ -1774,8 +1850,8 @@ src/gnsrecord/Makefile src/hello/Makefile src/identity/Makefile src/identity/identity.conf -src/credential/Makefile -src/credential/credential.conf +src/abd/Makefile +src/abd/abd.conf src/include/Makefile src/integration-tests/Makefile src/json/Makefile @@ -1874,101 +1950,227 @@ pkgconfig/gnunetvpn.pc ]) AC_OUTPUT -# Finally: summary! -# warn user if mysql found but not used due to version -AS_IF([test "$mysqlfail" = "true"] - [AC_MSG_NOTICE([WARNING: optional MySQL not found (or too old)])]) - -# sqlite -AS_IF([test "x$sqlite" = "x0"], - [AC_MSG_ERROR([ERROR: sqlite3 not found, but sqlite3 is required.])]) - -# libgnurl -AS_IF([test "$gnurl" = "0"], - [AS_IF([test "x$curl" = "xfalse"], - [AC_MSG_NOTICE([WARNING: libgnurl not found. http client support will not be compiled.]) - AC_MSG_WARN([ERROR: libgnurl not found. hostlist daemon will not be compiled, and you probably WANT the hostlist daemon])], - [AC_MSG_NOTICE([WARNING: libgnurl not found, trying to use libcurl-gnutls instead.])])]) - -# bluetooth -AS_IF([test "x$bluetooth" = "x0"], - [AC_MSG_NOTICE([WARNING: optional bluetooth library not found.])]) - - -# jansson -AS_IF([test "x$jansson" = "x0"], - [AC_MSG_NOTICE([WARNING: optional jansson library not found.])]) - -# # FIXME: `some modules' -> be more specific which exact modules. -# - -# warn user if iptables is not found -AS_IF([test "$VAR_IPTABLES_BINARY" = "false"], - [AC_MSG_NOTICE([WARNING: optional iptables not found])]) - -# warn user if ifconfig is not found -AS_IF([test "$VAR_IFCONFIG_BINARY" = "false"], - [AC_MSG_NOTICE([WARNING: optional ifconfig not found])]) - -# warn user if upnpc binary is not found -AS_IF([test "$VAR_UPNPC_BINARY" = "false"], - [AC_MSG_NOTICE([WARNING: optional upnpc binary not found])]) - -#gnutls -AS_IF([test x$gnutls != xtrue], - [AC_MSG_NOTICE([WARNING: GnuTLS not found, gnunet-gns-proxy will not be built])], - [AS_IF([test "x$gnutls_dane" != "x1"], - [AC_MSG_NOTICE([WARNING: GnuTLS has no DANE support, DANE validation will not be possible])])]) # java ports AS_IF([test "x$enable_java_ports" = "xyes"], [AC_MSG_NOTICE([NOTICE: Opening ports for gnunet-java bindings by default.])]) -# MHD -AS_IF([test "x$lmhd" != "x1"], - [AC_MSG_NOTICE([WARNING: optional libmicrohttpd not found])]) - -# conversation -AS_IF([test "x$conversation_backend" = "xnone"], - [AS_IF([test "x$pulse" != "x1"], - [AC_MSG_NOTICE([WARNING: libpulse(audio) not found, conversation will not be built.])]) - AS_IF([test "x$opus" != "x1"], - [AC_MSG_NOTICE([WARNING: libopus not found, conversation will not be built.])]) - AS_IF([test "x$gst" != "x1"], - [AC_MSG_NOTICE([WARNING: GStreamer not found, conversation will not be built.])])]) - -AS_IF([test "$extractor" != 1], - [AC_MSG_WARN([ERROR: libextractor not found, but various file-sharing functions require it])]) - +#### +#### Lasciate ogne speranza, voi ch'intrate +#### +#### This could be moved to the checks above, +#### but for now let's keep it here. +#### + +# TODO: We use "WARNING" too often, we need to clarify what +# TODO: constitutes a WARNING, an ERROR, and a NOTICE, and +# TODO: other message levels. + +# -- print message regarding enabled experimental features +AS_IF([test "x$enable_experimental" = "xyes"], + [experimental_msg="experimental features enabled"]) +# -- OSX Framework +AS_IF([test "$enable_framework_build" = "yes"], + [macosx_framework_msg="yes"], + [macosx_framework_msg="no"]) +# -- libidn 2 AS_IF([test "x$working_libidn2" = x1], - [AC_MSG_NOTICE([INFO: Using libidn2])]) + [libidn2_msg="libidn2"]) +# -- libidn 1 AS_IF([test "x$working_libidn1" = x1], - [AC_MSG_NOTICE([INFO: Using libidn1])]) - -AC_MSG_NOTICE([NOTICE: Database support is set to MySQL: $mysql, SQLite: $sqlite, Postgres: $postgres]) - -AS_IF([test "$enable_framework_build" = "yes"], - [AC_MSG_NOTICE([Mac OS X framework build enabled.])]) + [libidn1_msg="libidn1"]) +# -- texi2mdoc-generation +AS_IF([test "x$texi2mdoc_generation" = "xyes"], + [mdocml_msg="yes"], + [mdocml_msg="no"]) +# -- texi2mdoc +AS_IF([test "x$TEXI2MDOC_BINARY" = "false"], + [AC_MSG_NOTICE([WARNING: optional texi2mdoc binary not found]) + texi2mdoc_msg="no (optional)"], + [texi2mdoc_msg="yes"]) +# -- mandoc +AS_IF([test "x$MANDOC_BINARY" = "false"], + [AC_MSG_NOTICE([WARNING: optional mandoc binary not found]) + mandoc_msg="no"], + [mandoc_msg="yes"]) +# -- texinfo +AS_IF([test "x$makeinfo" != "x1"], + [texinfo_msg="no"], + [texinfo_msg="yes"]) +# -- conversation +AS_IF([test "x$conversation_backend" = "xnone"], + [AS_IF([test "x$pulse" != "x1"], + [AC_MSG_NOTICE([WARNING: libpulse(audio) not found (required to build conversation against it).]) + libpulse_msg="no"], + [libpulse_msg="yes"]) + AS_IF([test "x$opus" != "x1"], + [AC_MSG_NOTICE([WARNING: libopus not found (conversation)]) + libopus_msg="no"], + [libopus_msg="yes"]) + AS_IF([test "x$gst" != "x1"], + [AC_MSG_NOTICE([WARNING: GStreamer not found (required to build conversation against it).]) + gstreamer_msg="no"], + [gstreamer_msg="yes"])], + [features_msg="$features_msg conversation"]) +# -- interface +interface_msg=`echo $DEFAULT_INTERFACE | tr -d \"` +# -- libmicrohttpd +AS_IF([test "x$lmhd" != "x1"], + [libmicrohttpd_msg="no (optional)"], + [libmicrohttpd_msg="yes"]) +# -- jansson +AS_IF([test "x$jansson" = "x0"], + [jansson_msg="no (optional)"], + [jansson_msg="yes"]) +# -- libextractor +AS_IF([test "$extractor" != 1], + [AC_MSG_WARN([WARNING: libextractor not found, but various file-sharing functions require it])], + [libextractor_msg="yes"]) +# -- libzbar +AS_IF([test "x$zbar" = "x1"], + [libzbar_msg="yes" + features_msg="$features_msg gnunet-qr"], + [AC_MSG_NOTICE([WARNING: zbar not found, gnunet-qr will not be built.]) + libzbar_msg="no"]) +# -- libgnurl +AS_IF([test "$gnurl" = "0"], + [AS_IF([test "x$curl" = "xfalse"], + [AC_MSG_NOTICE([WARNING: libgnurl not found. http client support will not be compiled.]) + AC_MSG_WARN([ERROR: libgnurl not found. hostlist daemon will not be compiled, and you probably WANT the hostlist daemon]) + curl_msg="no"], + [AC_MSG_NOTICE([WARNING: libgnurl not found, trying to use libcurl-gnutls instead.]) + curl_msg="yes"])], + [gnurl_msg="yes"]) +# -- ifconfig +AS_IF([test "$VAR_IFCONFIG_BINARY" = "false"], + [AC_MSG_NOTICE([WARNING: optional ifconfig not found]) + ifconfig_msg="no (optional)"], + [ifconfig_msg="yes"]) +# -- upnpc +AS_IF([test "$VAR_UPNPC_BINARY" = "false"], + [AC_MSG_NOTICE([WARNING: optional upnpc binary not found]) + upnpc_msg="no (optional)"], + [upnpc_msg="yes"]) +# -- iptables +AS_IF([test "$VAR_IPTABLES_BINARY" = "false"], + [AC_MSG_NOTICE([WARNING: optional iptables not found]) + iptables_msg="no (optional)"], + [iptables_msg="yes"]) +# -- bluetooth +AS_IF([test "x$bluetooth" = "x0"], + [AC_MSG_NOTICE([WARNING: optional bluetooth library not found.]) + bluetooth_msg="no (optional)"], + [bluetooth_msg="yes"]) +# -- gnutls +AS_IF([test x$gnutls != xtrue], + [AC_MSG_NOTICE([WARNING: GnuTLS not found, gnunet-gns-proxy will not be built]) + gnutls_msg="no"], + [AS_IF([test "x$gnutls_dane" != "x1"], + [AC_MSG_NOTICE([WARNING: GnuTLS has no DANE support, DANE validation will not be possible]) + gnutls_msg="yes (without DANE support)"], + [gnutls_msg="yes (with DANE support)"])]) +# -- databases +# TODO: this always returns true, the check might +# TODO: not be working as intended (for msqlfail). +AS_IF([test x$mysqlfail = "true"] + [AC_MSG_NOTICE([WARNING: optional MySQL not found (or too old)])]) +AS_IF([test "$mysql" = true], + [features_msg="$features_msg mysql" + mysql_msg="yes"], + [mysql_msg="no"]) +AS_IF([test "$sqlite" = true], + [features_msg="$features_msg sqlite" + sqlite_msg="yes"], + [AC_MSG_ERROR([ERROR: sqlite3 not found, but sqlite3 is required.]) + sqlite_msg="no"]) +AS_IF([test "$postgres" = true], + [features_msg="$features_msg postgres" + postgres_msg="yes"], + [postgres_msg="no"]) +# -- features +# ---- 1. replace spaces with newlines, +# ---- 2. sort the lines, +# ---- 3. replace the newlines with spaces. +features_msg=`echo $features_msg | tr ' ' '\012' | sort | tr '\012' ' '` +AC_SUBST(features_msg) + + +# The summary +# TODO: reduce the length of the last message block, following "IMPORTANT". + +AC_MSG_NOTICE([ +GNUnet Configuration + +gnunet version: ${VERSION} + +Host setup: ${host} +Install prefix: ${prefix} +Compiler: ${CC} +CFLAGS: ${CFLAGS} +CPPFLAGS: ${CPPFLAGS} +LDFLAGS: ${LDFLAGS} +LIBS: ${LIBS} +Build Target: $build_target +Mac OSX framework build: ${macosx_framework_msg} + +Default Interface: ${interface_msg} + +MySQL: ${mysql_msg} +PostgreSQL: ${postgres_msg} +sqlite3: ${sqlite_msg} +gnurl: ${gnurl_msg} +curl: ${curl_msg} +bluetooth: ${bluetooth_msg} +jansson: ${jansson_msg} +iptables: ${iptables_msg} +ifconfig: ${ifconfig_msg} +upnpc: ${upnpc_msg} +gnutls: ${gnutls_msg} +libzbar: ${libzbar_msg} +java: ${java_msg} +libmicrohttpd: ${libmicrohttpd_msg} +libidn: ${libidn1_msg}${libidn2_msg} +libopus: ${libopus_msg} +gstreamer: ${gstreamer_msg} +libpulse: ${libpulse_msg} +libextractor: ${libextractor_msg} +texi2mdoc: ${texi2mdoc_msg} +mandoc: ${mandoc_msg} + +texinfo manual: ${texinfo_msg} +transpiled mdocml manual: ${mdocml_msg} + +features: ${features_msg} +experimental: ${experimental_msg} + + +IMPORTANT: -AC_MSG_NOTICE([******************************************** Please make sure NOW that you have created a user and group 'gnunet' -and additionally a group 'gnunetdns'. On Debian and Ubuntu GNU/Linux, type: - addgroup gnunetdns - adduser --system --group --disabled-login --home /var/lib/gnunet gnunet +and additionally a group 'gnunetdns'. On Debian and Ubuntu GNU/Linux, +type: + + addgroup gnunetdns + adduser --system --group --disabled-login --home /var/lib/gnunet gnunet Make sure that '/var/lib/gnunet' is owned (and writable) by user 'gnunet'. Then, you can compile GNUnet with - make + + make After that, run (if necessary as 'root') - make install + + make install + to install everything. Each GNUnet user should be added to the 'gnunet' group (may require fresh login to come into effect): - adduser USERNAME gnunet + + adduser USERNAME gnunet + (run the above command as root once for each of your users, replacing "USERNAME" with the respective login names). If you have a global IP address, no further configuration is required. @@ -1986,7 +2188,9 @@ you have to copy ~/.gnunet/gnunet.conf" over to the "gnunet" user's home directory in the end. Once you have configured your peer, run (as the 'gnunet' user) - gnunet-arm -s + + gnunet-arm -s + to start the peer. You can then run the various GNUnet-tools as your "normal" user (who should only be in the group 'gnunet'). -********************************************]) +])