{ stdenv, fetchgit, libtool, pkgconfig, autoconf, automake, gettext, libgcrypt , libidn2, zlib, libunistring, glpk, miniupnpc, libextractor, jansson, libgnurl , libsodium, sqlite, postgresql, mariadb, libmicrohttpd, iptables, nettools , gnutls, unbound, coreutils, file, python3, texinfo, procps, iproute , withVerbose ? false , withDocumentation ? false , withSqlite ? true , withPostgres ? false , withMariadb ? false}: with stdenv.lib; let rev = "cb09046e42afec4c4bdc6182cf319a11d89d7503"; in stdenv.mkDerivation rec { name = "gnunet-${rev}"; src = fetchgit { url = https://git.gnunet.org/gnunet.git; inherit rev; sha256 = "0dbcr8fwyzhys5f8sq2y03px806b148p3m9js7kzpfv0mxa0wakv"; fetchSubmodules = true; }; phases = [ "unpackPhase" "preConfigure" "configurePhase" "buildPhase" "installPhase" "checkPhase" ]; enableParallelBuilding = true; #doCheck = true; nativeBuildInputs = [ libtool pkgconfig autoconf automake gettext coreutils file python3 ] ++ optional withDocumentation texinfo; propagatedBuildInputs = [ libgcrypt libidn2 zlib libunistring glpk miniupnpc libextractor jansson libgnurl libmicrohttpd libsodium iptables nettools gnutls unbound procps iproute ] ++ optional withSqlite sqlite ++ optional withPostgres postgresql ++ optional withMariadb mariadb; configureFlags = [ "--enable-logging=verbose" ] ++ optional (!withDocumentation) "--disable-documentation"; NIX_CFLAGS_COMPILE = "-g -Wall -O0"; preConfigure = '' #substituteInPlace configure.ac --replace "/usr/sbin/iptables" "${iptables}/bin/iptables" #substituteInPlace configure.ac --replace "/sbin/ifconfig" "ifconfig" sh bootstrap #substituteInPlace configure --replace "/usr/bin/file" "file" #substituteInPlace configure --replace "/usr/bin/objformat" "objformat" substituteInPlace src/dns/gnunet-helper-dns.c --replace '"/sbin/iptables"' '"${iptables}/bin/iptables"' substituteInPlace src/dns/gnunet-helper-dns.c --replace '"/sbin/ip6tables"' '"${iptables}/bin/ip6tables"' substituteInPlace src/dns/gnunet-helper-dns.c --replace '"/sbin/ip"' '"${iproute}/bin/ip"' substituteInPlace src/dns/gnunet-helper-dns.c --replace '"/sbin/sysctl"' '"${procps}/bin/sysctl"' ''; postInstall = '' mv $out/lib/gnunet/nss/* $out/lib/ rmdir $out/lib/gnunet/nss ''; /* FIXME: Tests must be run this way, but there are still a couple of failures. */ checkPhase = '' export GNUNET_PREFIX="$out" export GNUNET_TMP="$TMPDIR" export PATH="$out/bin:$PATH" make -k check ''; meta = with stdenv.lib; { description = "GNUnet, GNU's decentralized anonymous and censorship-resistant P2P framework"; longDescription = '' GNUnet is a framework for secure peer-to-peer networking that does not use any centralized or otherwise trusted services. A first service implemented on top of the networking layer allows anonymous censorship-resistant file-sharing. Anonymity is provided by making messages originating from a peer indistinguishable from messages that the peer is routing. All peers act as routers and use link-encrypted connections with stable bandwidth utilization to communicate with each other. GNUnet uses a simple, excess-based economic model to allocate resources. Peers in GNUnet monitor each others behavior with respect to resource usage; peers that contribute to the network are rewarded with better service. ''; homepage = https://gnunet.org/; license = licenses.agpl3; maintainers = with maintainers; [ ]; platforms = platforms.gnu ++ platforms.linux; }; }