{ lib , stdenv , fetchFromGitHub , SDL2 , cmake , espeak , ffmpeg , file , freetype , harfbuzz , leptonica , libGL , libX11 , libXau , libXcomposite , libXdmcp , libXfixes , libdrm , libffi , libusb1 , libuvc , libvlc , libvncserver , libxcb , libxkbcommon , luajit , makeWrapper , mesa , openal , pkg-config , sqlite , tesseract , valgrind , wayland , wayland-protocols , xcbutil , xcbutilwm , xz , buildManPages ? true, ruby }: let # TODO: investigate vendoring, especially OpenAL # WARN: vendoring of OpenAL is required for running arcan_lwa # INFO: maybe it needs leaveDotGit, but it is dangerous/impure letoram-openal-src = fetchFromGitHub { owner = "letoram"; repo = "openal"; rev = "1c7302c580964fee9ee9e1d89ff56d24f934bdef"; hash = "sha256-InqU59J0zvwJ20a7KU54xTM7d76VoOlFbtj7KbFlnTU="; }; in stdenv.mkDerivation rec { pname = "arcan"; version = "0.6.1pre1+unstable=2021-07-10"; src = fetchFromGitHub { owner = "letoram"; repo = "arcan"; rev = "25da999e6e03688c71c7df3852314c01ed610e0d"; hash = "sha256-+ZF6mD/Z0N/5QCjXe80z4L6JOE33+Yv4ZlwKvlG/c44="; }; postUnpack = '' ( cd $sourceRoot/external/git/ cp -a ${letoram-openal-src}/ openal/ chmod --recursive 744 openal/ ) ''; # TODO: work with upstream in order to get rid of these hardcoded paths postPatch = '' substituteInPlace ./src/platform/posix/paths.c \ --replace "/usr/bin" "$out/bin" \ --replace "/usr/share" "$out/share" substituteInPlace ./src/CMakeLists.txt --replace "SETUID" "# SETUID" ''; nativeBuildInputs = [ cmake makeWrapper pkg-config ] ++ lib.optionals buildManPages [ ruby ]; buildInputs = [ SDL2 espeak ffmpeg file freetype harfbuzz leptonica libGL libX11 libXau libXcomposite libXdmcp libXfixes libdrm libffi libusb1 libuvc libvlc libvncserver libxcb libxkbcommon luajit mesa openal sqlite tesseract valgrind wayland wayland-protocols xcbutil xcbutilwm xz ]; # INFO: According to the source code, the manpages need to be generated before # the configure phase preConfigure = lib.optionalString buildManPages '' (cd doc; ruby docgen.rb mangen) ''; cmakeFlags = [ "-DBUILD_PRESET=everything" # The upstream project recommends tagging the distribution "-DDISTR_TAG=Nixpkgs" "-DENGINE_BUILDTAG=${version}" "-DHYBRID_SDL=on" "-DSTATIC_OPENAL=off" "../src" ]; hardeningDisable = [ "format" ]; meta = with lib; { homepage = "https://arcan-fe.com/"; description = "Combined Display Server, Multimedia Framework, Game Engine"; longDescription = '' Arcan is a portable and fast self-sufficient multimedia engine for advanced visualization and analysis work in a wide range of applications e.g. game development, real-time streaming video, monitoring and surveillance, up to and including desktop compositors and window managers. ''; license = with licenses; [ bsd3 gpl2Plus lgpl2Plus ]; maintainers = with maintainers; [ AndersonTorres ]; platforms = platforms.unix; }; }