{ lib, stdenv , fetchFromGitLab , callPackage , cmake , ninja , mbedtls , libxcrypt , zlib , enableCache ? true # Internal cache support. , enableIpV6 ? true , enableTls ? true , enableMonitor ? false # Support for the Hiawatha Monitor. , enableRproxy ? true # Reverse proxy support. , enableTomahawk ? false # Tomahawk, the Hiawatha command shell. , enableXslt ? true, libxml2 ? null, libxslt ? null , enableToolkit ? true # The URL Toolkit. }: stdenv.mkDerivation (finalAttrs: { pname = "hiawatha"; version = "11.6"; src = fetchFromGitLab { owner = "hsleisink"; repo = "hiawatha"; rev = "v${finalAttrs.version}"; hash = "sha256-YsZdVqanVNibA4KnAknLh61hVo7x5uu67lb+RX2N7c8="; }; nativeBuildInputs = [ cmake ninja ]; buildInputs = [ mbedtls libxcrypt zlib ] ++ lib.optionals enableXslt [ libxslt libxml2 ]; prePatch = '' substituteInPlace CMakeLists.txt --replace SETUID "" ''; cmakeFlags = [ "-DUSE_SYSTEM_MBEDTLS=on" # Policy to use Nix deps, and Nix uses up to date deps ( if enableCache then "-DENABLE_CACHE=on" else "-DENABLE_CACHE=off" ) ( if enableIpV6 then "-DENABLE_IPV6=on" else "-DENABLE_IPV6=off" ) ( if enableTls then "-DENABLE_TLS=on" else "-DENABLE_TLS=off" ) ( if enableMonitor then "-DENABLE_MONITOR=on" else "-DENABLE_MONITOR=off" ) ( if enableRproxy then "-DENABLE_RPROXY=on" else "-DENABLE_RPROXY=off" ) ( if enableTomahawk then "-DENABLE_TOMAHAWK=on" else "-DENABLE_TOMAHAWK=off" ) ( if enableXslt then "-DENABLE_XSLT=on" else "-DENABLE_XSLT=off" ) ( if enableToolkit then "-DENABLE_TOOLKIT=on" else "-DENABLE_TOOLKIT=off" ) ]; passthru.tests.serve-static-files = callPackage ./test.nix { hiawatha = finalAttrs.finalPackage; inherit enableTls; }; meta = with lib; { homepage = "https://hiawatha.leisink.net/"; description = "Advanced and secure webserver"; license = licenses.gpl2Only; platforms = platforms.unix; # "Hiawatha runs perfectly on Linux, BSD and MacOS X" mainProgram = "hiawatha"; maintainers = [ ]; }; })