#
AC_PREREQ(2.61)
# Checks for programs.
-AC_INIT([gnunet], [0.11.7], [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_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
AC_PATH_XTRA
],
[*freebsd*],[
- AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
- AC_DEFINE_UNQUOTED(FREEBSD,1,[This is a FreeBSD system])
CFLAGS="-D_THREAD_SAFE $CFLAGS"
build_target="freebsd"
LIBPREFIX=
UNIXONLY="#"
],
[*openbsd*],[
- AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
- AC_DEFINE_UNQUOTED(OPENBSD,1,[This is an OpenBSD system])
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])
build_target="netbsd"
LIBPREFIX=
DLLDIR=lib
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")
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.4 - python3.8 for tests (3.8 unchecked)
AC_SUBST([PYTHON])
AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
+
# perl
AC_PATH_PROG( PERL, perl, ,
$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
AC_SUBST([PERL])
+AM_CONDITIONAL([HAVE_PERL], [test -x "$PERL"])
+AS_IF([test -x "$PERL"],
+ [AC_DEFINE_UNQUOTED([HAVE_PERL], [1], [Path to Perl])],
+ [AC_DEFINE_UNQUOTED([HAVE_PERL], [0], [Path to Perl])])
+
+# awk
+AC_PATH_PROGS( AWK_BINARY, [awk gawk], ,$PATH:/usr/bin/:/usr/local/bin )
+AC_SUBST([AWK_BINARY])
+AM_CONDITIONAL([HAVE_AWK], [test -x "$AWK_BINARY"])
+AS_IF([test -x "$AWK_BINARY"],
+ [AC_DEFINE_UNQUOTED([HAVE_AWK], [1], [Path to awk])],
+ [AC_DEFINE_UNQUOTED([HAVE_AWK], [0], [Path to awk])])
+
+# should we install gnunet-logread?
+AC_MSG_CHECKING(whether to install gnunet-logread)
+AC_ARG_WITH([gnunet-logread],
+ [AS_HELP_STRING([--with-gnunet-logread],
+ [Install gnunet-logread])],
+ [logread=${withval}],
+ [logread=no])
+AC_MSG_RESULT($logread)
+AS_IF([test "x$logread" = "xyes"],
+ [AM_CONDITIONAL([GNUNET_LOGREAD], true)
+ AC_DEFINE([GNUNET_LOGREAD],
+ [1],
+ [Installing gnunet-logread])],
+ [AM_CONDITIONAL([GNUNET_LOGREAD],
+ false)
+ AC_DEFINE([GNUNET_LOGREAD],
+ [0],
+ [Not installing gnunet-logread])])
# iptables is a soft requirement to run tests
AC_PATH_TARGET_TOOL(VAR_IPTABLES_BINARY, iptables, false)
[AC_MSG_WARN(['ifconfig' not found.])])
+# Test if 'adduser' binary exists
+MSG_USER_SETUP=true
+AC_PATH_PROG([MSG_USER_SETUP],
+ [adduser],
+ false,
+ [path=$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
+
+# Test if 'gnunet' user and the groups exist
+getent passwd gnunet > /dev/null
+HAVE_GNUNET_USER=$?
+getent group gnunet > /dev/null
+AS_IF([test x$? != x0],
+ [HAVE_GNUNET_USER=1])
+getent group gnunetdns > /dev/null
+AS_IF([test x$? != x0],
+ [HAVE_GNUNET_USER=1])
+
AC_PATH_TARGET_TOOL(VAR_SYSCTL_BINARY, sysctl, false)
AC_CHECK_PROG(VAR_SYSCTL_BINARY, sysctl, true, false)
[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)
AC_CHECK_DECLS([struct in6_ifreq], [], [], [[#include <linux/if_tun.h>]])
+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?
[0],
[Not building the documentation])])
-# COMMENT: Check wether to transpile texinfo to mdoc.
+# 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: 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(wether to include generated texi2mdoc output in installation)
+AC_MSG_CHECKING(whether to include generated texi2mdoc output in installation)
AC_ARG_ENABLE([texi2mdoc-generation],
[AS_HELP_STRING([--enable-texi2mdoc-generation],
[include generated texi2mdoc output in installation])],
[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],
[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,
[
AC_MSG_RESULT([libltdl found])
],[
- AC_MSG_ERROR([GNUnet requires libltdl (from GNU libtool), try installing libltdl-dev])
+ AC_MSG_ERROR([GNUnet requires libltdl (from GNU libtool).])
])
# restore LIBS
LIBS=$SAVE_LIBS
[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)
+AM_CONDITIONAL(HAVE_LIBIDN2, test x$working_libidn2 = x1)
AS_IF([test x$working_libidn2 = x0],
[AS_IF([test x$my_with_libidn = x1],
[AC_MSG_NOTICE([Checking for libidn])
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"
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
#endif
int main () { return 0; }
]])
- ],mysql=true,mysql=false)
- AS_IF([test "$mysql" = "false"],
+ ],
+ [mysql=true],
+ [mysql=false])
+ AS_IF([test x$mysql = xfalse],
[
mysqlfail=true
- AC_MSG_RESULT([fail, >= 4.1 required])
+ AC_MSG_WARN([fail, MySQL >= 4.1 required])
],[
+ AC_MSG_NOTICE([success, will keep $mysqlfail])
+ mysqlfail=false
AC_MSG_RESULT(ok)
])
])
+
AM_CONDITIONAL(HAVE_MYSQL, test x$mysql = xtrue)
AM_CONDITIONAL(HAVE_MYSQLE, false)
# restore LIBS
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}],
AC_CONFIG_FILES([
Makefile
+bin/Makefile
contrib/Makefile
contrib/hellos/Makefile
contrib/services/Makefile
doc/doxygen/Makefile
doc/handbook/Makefile
doc/tutorial/Makefile
-lint/Makefile
m4/Makefile
po/Makefile.in
src/Makefile
# java ports
AS_IF([test "x$enable_java_ports" = "xyes"],
- [AC_MSG_NOTICE([NOTICE: Opening ports for gnunet-java bindings by default.])])
+ [AC_MSG_NOTICE([Opening TCP ports by default to enable gnunet-java bindings.])])
-####
-#### Lasciate ogne speranza, voi ch'intrate
####
#### This could be moved to the checks above,
#### but for now let's keep it here.
# -- libidn 1
AS_IF([test "x$working_libidn1" = x1],
[libidn1_msg="libidn1"])
+# -- texi2mdoc-generation
+AS_IF([test "x$texi2mdoc_generation" = "xyes"],
+ [mdocml_msg="yes"],
+ [mdocml_msg="no"])
# -- texi2mdoc
-AS_IF([test "x$texi2mdoc_generation" = x1],
- [mdoc_msg="yes"],
- [mdoc_msg="no"])
+AS_IF([test "x$TEXI2MDOC_BINARY" = "false"],
+ [AC_MSG_NOTICE([texi2mdoc binary not found (will not generate mdoc documentation)])
+ texi2mdoc_msg="no (optional)"],
+ [texi2mdoc_msg="yes"])
+# -- mandoc
+AS_IF([test "x$MANDOC_BINARY" = "false"],
+ [AC_MSG_NOTICE([mandoc binary not found (will not generate handbook as man page)])
+ mandoc_msg="no"],
+ [mandoc_msg="yes"])
# -- texinfo
AS_IF([test "x$makeinfo" != "x1"],
[texinfo_msg="no"],
# -- 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.])
+ [AC_MSG_WARN([libpulse(audio) not found (required to build conversation).])
libpulse_msg="no"],
[libpulse_msg="yes"])
AS_IF([test "x$opus" != "x1"],
- [AC_MSG_NOTICE([WARNING: libopus not found, conversation will not be built.])
+ [AC_MSG_WARN([libopus not found (required to build conversation)])
libopus_msg="no"],
[libopus_msg="yes"])
AS_IF([test "x$gst" != "x1"],
- [AC_MSG_NOTICE([WARNING: GStreamer not found, conversation will not be built.])
+ [AC_MSG_WARN([GStreamer not found (required to build conversation).])
gstreamer_msg="no"],
[gstreamer_msg="yes"])],
[features_msg="$features_msg conversation"])
[jansson_msg="yes"])
# -- libextractor
AS_IF([test "$extractor" != 1],
- [AC_MSG_WARN([ERROR: libextractor not found, but various file-sharing functions require it])],
+ [AC_MSG_WARN([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.])
+ [AC_MSG_NOTICE([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])
+ [AC_MSG_WARN([libgnurl not found. http client support will not be compiled.])
+ AC_MSG_WARN([IMPORTANT: No HTTP client library found. HTTP transports and 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.])
+ [AC_MSG_NOTICE([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])
+ [AC_MSG_WARN([ifconfig not found, some features will not work])
ifconfig_msg="no (optional)"],
[ifconfig_msg="yes"])
# -- upnpc
AS_IF([test "$VAR_UPNPC_BINARY" = "false"],
- [AC_MSG_NOTICE([WARNING: optional upnpc binary not found])
+ [AC_MSG_WARN([upnpc binary not found, NAT traversal using UPnPc will not work])
upnpc_msg="no (optional)"],
[upnpc_msg="yes"])
# -- iptables
AS_IF([test "$VAR_IPTABLES_BINARY" = "false"],
- [AC_MSG_NOTICE([WARNING: optional iptables not found])
+ [AC_MSG_WARN([iptables not found, DNS query interception will not work])
iptables_msg="no (optional)"],
[iptables_msg="yes"])
# -- bluetooth
AS_IF([test "x$bluetooth" = "x0"],
- [AC_MSG_NOTICE([WARNING: optional bluetooth library not found.])
+ [AC_MSG_NOTICE([bluetooth library not found, will not be able to use Bluetooth])
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])
+ [AC_MSG_WARN([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])
+ [AC_MSG_WARN([GnuTLS lacks 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 x$mysqlfail = xtrue],
+ [AC_MSG_WARN([MySQL not found (or too old), will not create MySQL database support])
+ mysql_msg="unsupported version"])
AS_IF([test "$sqlite" = true],
[features_msg="$features_msg sqlite"
sqlite_msg="yes"],
- [AC_MSG_ERROR([ERROR: sqlite3 not found, but sqlite3 is required.])
+ [AC_MSG_ERROR([sqlite3 not found, but sqlite3 is required.])
sqlite_msg="no"])
AS_IF([test "$postgres" = true],
[features_msg="$features_msg postgres"
# The summary
-# TODO: reduce the length of the last message block ("the message")
+# TODO: reduce the length of the last message block, following "IMPORTANT".
AC_MSG_NOTICE([
GNUnet Configuration
+====================
-gnunet version: ${VERSION}
+GNUnet version: ${VERSION}
Host setup: ${host}
Install prefix: ${prefix}
gstreamer: ${gstreamer_msg}
libpulse: ${libpulse_msg}
libextractor: ${libextractor_msg}
+texi2mdoc: ${texi2mdoc_msg}
+mandoc: ${mandoc_msg}
texinfo manual: ${texinfo_msg}
-transpiled mdoc manual: ${mdoc_msg}
+transpiled mdocml manual: ${mdocml_msg}
features: ${features_msg}
experimental: ${experimental_msg}
-
-
-IMPORTANT:
-
-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
-
-Make sure that '/var/lib/gnunet' is owned (and writable) by user
-'gnunet'. Then, you can compile GNUnet with
-
- make
-
-After that, run (if necessary as 'root')
-
- 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
-
-(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.
-
-For more detailed setup instructions, see https://docs.gnunet.org/
-
-Optionally, download and compile gnunet-gtk to get a GUI for
-file-sharing and configuration. This is particularly recommended
-if your network setup is non-trivial, as gnunet-setup can be
-used to test in the GUI if your network configuration is working.
-gnunet-setup should be run as the "gnunet" user under X. As it
-does very little with the network, running it as "root" is likely
-also harmless. You can also run it as a normal user, but then
-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
-
-to start the peer. You can then run the various GNUnet-tools as
-your "normal" user (who should only be in the group 'gnunet').
])
+
+AS_IF([test x$MSG_USER_SETUP != xfalse],
+ [AC_MSG_WARN([Please make sure NOW to create a user and group 'gnunet' and additionally a group 'gnunetdns'. Make sure that '/var/lib/gnunet' is owned (and writable) by user 'gnunet'.])
+ AS_IF([test x$HAVE_GNUNET_USER != 0],
+ [AC_MSG_NOTICE([To do this on this system, run:
+# addgroup gnunetdns
+# adduser --system --disabled-login --home /var/lib/gnunet gnunet
+])])
+ AC_MSG_WARN([Each user of GNUnet should be added to the 'gnunet' group.])
+ AS_IF([test x$HAVE_GNUNET_USER != 0],
+ [AC_MSG_NOTICE([To do this on this system, run:
+# adduser USERNAME gnunet
+ for each of your users, replacing \"USERNAME\" with the respective login name. Users may have to login again for the changes to take effect.
+])])])
+
+AC_MSG_NOTICE([For detailed setup instructions, type 'info gnunet' after the installation or visit https://docs.gnunet.org/])