diff options
Diffstat (limited to 'nixpkgs/pkgs/desktops/arcan/arcan.nix')
-rw-r--r-- | nixpkgs/pkgs/desktops/arcan/arcan.nix | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/desktops/arcan/arcan.nix b/nixpkgs/pkgs/desktops/arcan/arcan.nix new file mode 100644 index 000000000000..c6a57ecc3bda --- /dev/null +++ b/nixpkgs/pkgs/desktops/arcan/arcan.nix @@ -0,0 +1,157 @@ +{ 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; + }; +} |