enhance gnunet-qr to support passing arguments beyond just the URI to commands
[oweals/gnunet.git] / configure.ac
index 6f3b5f1bcd0f296974a9ab07969447ccbe6a1a8b..e2c4dd39fbfb86e386577898a3d1f6f13cf77041 100644 (file)
@@ -21,7 +21,7 @@
 #
 AC_PREREQ(2.61)
 # Checks for programs.
-AC_INIT([gnunet], [0.11.8], [bug-gnunet@gnu.org])
+AC_INIT([gnunet], [0.12.0], [bug-gnunet@gnu.org])
 AC_CONFIG_AUX_DIR([build-aux])
 
 # check for legacy option that is no longer supported (#5627) and fail hard
@@ -48,7 +48,7 @@ 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
@@ -132,8 +132,6 @@ AS_CASE(["$host_os"],
      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=
@@ -141,17 +139,14 @@ AS_CASE(["$host_os"],
      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
@@ -199,6 +194,10 @@ 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")
 
@@ -243,10 +242,42 @@ AM_PATH_PYTHON([3.4],, [:])
 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)
@@ -303,6 +334,23 @@ AS_IF([test x"$VAR_IFCONFIG_BINARY" != x"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)
@@ -382,6 +430,14 @@ AC_DEFINE_UNQUOTED([NEED_LIBGCRYPT_VERSION], "$NEED_LIBGCRYPT_VERSION", [require
 
 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?
@@ -404,7 +460,7 @@ AS_IF([test "x$documentation" = "xyes"],
                  [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.
@@ -414,7 +470,7 @@ AS_IF([test "x$documentation" = "xyes"],
 # 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])],
@@ -437,14 +493,24 @@ AS_IF([test "x$texi2mdoc_generation" = "xyes"],
                  [0],
                  [Not building section 7 mdoc output])])
 
-# test for texi2mdoc
+# test for texi2mdoc (the binary, not the script distributed
+# with autogen)
 # TODO: refactor this and the check above.
-AC_MSG_CHECKING(for texi2mdoc)
+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)
+AC_MSG_CHECKING(for mandoc binary)
 AC_CHECK_PROGS(MANDOC_BINARY, [mandoc], false)
 AM_CONDITIONAL(HAVE_MANDOC, test x$MANDOC_BINARY != xfalse)
 
@@ -505,7 +571,7 @@ AS_IF([test "x$activate_texinfo4" = "xyes"],
 
 # Adam shostack suggests the following for Windows:
 # -D_FORTIFY_SOURCE=2 -fstack-protector-all
-AC_ARG_ENABLE(gcc-hardening,
+AC_ARG_ENABLE([gcc-hardening],
    AS_HELP_STRING(--enable-gcc-hardening, enable compiler security checks),
 [AS_IF([test x$enableval = xyes],[
     CFLAGS="$CFLAGS -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-all"
@@ -516,13 +582,13 @@ AC_ARG_ENABLE(gcc-hardening,
 
 # Linker hardening options
 # Currently these options are ELF specific - you can't use this with MacOSX
-AC_ARG_ENABLE(linker-hardening,
+AC_ARG_ENABLE([linker-hardening],
   AS_HELP_STRING(--enable-linker-hardening, enable linker security fixups),
 [AS_IF([test x$enableval = xyes],
    [LDFLAGS="$LDFLAGS -z relro -z now"])])
 
 
-AC_ARG_ENABLE(sanitizer,
+AC_ARG_ENABLE([sanitizer],
   AS_HELP_STRING(--enable-sanitizer, enable Address Sanitizer and Undefined Behavior Sanitizer),
 [AS_IF([test x$enableval = xyes],[
    LDFLAGS="$CFLAGS -fsanitize=address,undefined -fno-omit-frame-pointer"
@@ -661,8 +727,9 @@ AS_IF([test "$bluetooth" = 1],
       [AC_DEFINE([HAVE_LIBBLUETOOTH],[0],[Lacking bluetooth library])])
 
 # check for zbar library
-# TODO: Add checks for: -lSM, -lICE, -lX11, -lXv and -ljpeg
-# TODO: if zbar exists.
+# 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,
@@ -801,7 +868,7 @@ AS_IF([test "x$opus" = x1],
       [AC_DEFINE([HAVE_OPUS],[1],[Have libopus library])
        libopus_msg="yes"],
       [AC_DEFINE([HAVE_OPUS],[0],[Lacking libopus library])
-       libopus_msg="no"])
+       libopus_msg="no (required for conversation)"])
 
 # libogg
 AC_MSG_CHECKING(for libogg)
@@ -1354,15 +1421,20 @@ AS_IF([test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes"],
       #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
@@ -1662,7 +1734,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}],
@@ -1782,6 +1854,7 @@ AC_DEFINE_UNQUOTED(VCS_VERSION, [$vcs_version], [VCS revision/hash or tarball ve
 
 AC_CONFIG_FILES([
 Makefile
+bin/Makefile
 contrib/Makefile
 contrib/hellos/Makefile
 contrib/services/Makefile
@@ -1937,19 +2010,13 @@ AC_OUTPUT
 
 # 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.
 ####
 
-# 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"])
@@ -1969,12 +2036,12 @@ AS_IF([test "x$texi2mdoc_generation" = "xyes"],
       [mdocml_msg="no"])
 # -- texi2mdoc
 AS_IF([test "x$TEXI2MDOC_BINARY" = "false"],
-      [AC_MSG_NOTICE([WARNING: optional texi2mdoc binary not found])
+      [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([WARNING: optional mandoc binary not found])
+      [AC_MSG_NOTICE([mandoc binary not found (will not generate handbook as man page)])
        mandoc_msg="no"],
       [mandoc_msg="yes"])
 # -- texinfo
@@ -1984,18 +2051,20 @@ AS_IF([test "x$makeinfo" != "x1"],
 # -- 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"],
+             [AC_MSG_WARN([libpulse(audio) not found (required to build conversation).])
+              libpulse_msg="no (required for conversation)"],
              [libpulse_msg="yes"])
        AS_IF([test "x$opus" != "x1"],
-             [AC_MSG_NOTICE([WARNING: libopus not found (conversation)])
-              libopus_msg="no"],
+             [AC_MSG_WARN([libopus not found (required to build conversation)])
+              libopus_msg="no (required for conversation)"],
              [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"],
+             [AC_MSG_WARN([GStreamer not found (required to build conversation).])
+              gstreamer_msg="no (required for conversation)"],
              [gstreamer_msg="yes"])],
-      [features_msg="$features_msg conversation"])
+      [AS_IF([test "x$opus" = x1],
+             [features_msg="$features_msg conversation"],
+             [AC_MSG_WARN([libopus not found (required to build conversation)])])])
 # -- interface
 interface_msg=`echo $DEFAULT_INTERFACE | tr -d \"`
 # -- libmicrohttpd
@@ -2008,64 +2077,65 @@ AS_IF([test "x$jansson" = "x0"],
       [jansson_msg="yes"])
 # -- libextractor
 AS_IF([test "$extractor" != 1],
-      [AC_MSG_WARN([WARNING: 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"
@@ -2084,8 +2154,9 @@ AC_SUBST(features_msg)
 
 AC_MSG_NOTICE([
 GNUnet Configuration
+====================
 
-gnunet version:                 ${VERSION}
+GNUnet version:                 ${VERSION}
 
 Host setup:                     ${host}
 Install prefix:                 ${prefix}
@@ -2126,53 +2197,20 @@ 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/])