Created
September 4, 2024 16:23
-
-
Save ingenieroariel/e854e2d819ce517c83d7ad8e1f1cbccb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ lib | |
, stdenv | |
, fetchFromGitHub | |
, SDL2 | |
, callPackage | |
, cmake | |
#, espeak-ng | |
, ffmpeg | |
, file | |
, freetype | |
#, glib | |
, gumbo | |
, harfbuzz | |
, jbig2dec | |
, leptonica | |
, libGL | |
, libX11 | |
, libXau | |
, libXcomposite | |
, libXdmcp | |
, libXfixes | |
, libdrm | |
, libffi | |
, libjpeg | |
, libusb1 | |
, libuvc | |
#, libvlc | |
#, libvncserver | |
, libxcb | |
, libxkbcommon | |
, makeWrapper | |
, mesa | |
#, mupdf | |
, openal | |
, openjpeg | |
, pcre2 | |
, pkg-config | |
, ruby | |
, sqlite | |
#, tesseract | |
#, valgrind | |
, wayland | |
, wayland-protocols | |
, xcbutil | |
, xcbutilwm | |
, xz | |
, buildManPages ? true | |
, useBuiltinLua ? true | |
#, useEspeak ? !stdenv.isDarwin | |
, useStaticLibuvc ? true | |
, useStaticOpenAL ? true | |
, useStaticSqlite ? true | |
, useTracy ? false | |
}: | |
let | |
allSources = { | |
letoram-openal-src = fetchFromGitHub { | |
owner = "letoram"; | |
repo = "openal"; | |
rev = "81e1b364339b6aa2b183f39fc16c55eb5857e97a"; | |
hash = "sha256-X3C3TDZPiOhdZdpApC4h4KeBiWFMxkFsmE3gQ1Rz420="; | |
}; | |
libuvc-src = fetchFromGitHub { | |
owner = "libuvc"; | |
repo = "libuvc"; | |
rev = "68d07a00e11d1944e27b7295ee69673239c00b4b"; | |
hash = "sha256-IdV18mnPTDBODpS1BXl4ulkFyf1PU2ZmuVGNOIdQwzE="; | |
}; | |
luajit-src = fetchFromGitHub { | |
owner = "LuaJIT"; | |
repo = "LuaJIT"; | |
rev = "656ecbcf8f669feb94e0d0ec4b4f59190bcd2e48"; | |
hash = "sha256-/gGQzHgYuWGqGjgpEl18Rbh3Sx2VP+zLlx4N9/hbYLc="; | |
}; | |
tracy-src = fetchFromGitHub { | |
owner = "wolfpld"; | |
repo = "tracy"; | |
rev = "93537dff336e0796b01262e8271e4d63bf39f195"; | |
hash = "sha256-FNB2zTbwk8hMNmhofz9GMts7dvH9phBRVIdgVjRcyQM="; | |
}; | |
}; | |
in | |
stdenv.mkDerivation (finalAttrs: { | |
pname = "arcan"; | |
version = "0.7-pre-2024-05-14"; | |
src = lib.fileset.toSource { | |
root = ./src; | |
fileset = ./src; | |
}; | |
hardeningDisable = [ "all" ]; | |
NIX_CFLAGS_COMPILE = "-g"; | |
NIX_CXXFLAGS_COMPILE = "-g"; | |
nativeBuildInputs = [ | |
cmake | |
makeWrapper | |
pkg-config | |
] ++ lib.optionals buildManPages [ | |
ruby | |
]; | |
buildInputs = [ | |
SDL2 | |
ffmpeg | |
file | |
freetype | |
#glib | |
gumbo | |
harfbuzz | |
jbig2dec | |
leptonica | |
libGL | |
libX11 | |
libXau | |
libXcomposite | |
libXdmcp | |
libXfixes | |
libdrm | |
libffi | |
libjpeg | |
libusb1 | |
libuvc | |
#libvlc | |
#libvncserver | |
libxcb | |
libxkbcommon | |
mesa | |
#mupdf | |
openal | |
openjpeg | |
pcre2 | |
sqlite | |
#tesseract | |
#valgrind | |
wayland | |
wayland-protocols | |
xcbutil | |
xcbutilwm | |
xz | |
#] | |
#++ lib.optionals useEspeak [ | |
# espeak-ng | |
]; | |
# Emulate external/git/clone.sh | |
postUnpack = let | |
inherit (allSources) | |
letoram-openal-src libuvc-src luajit-src tracy-src; | |
prepareSource = flag: source: destination: | |
lib.optionalString flag '' | |
cp -va ${source}/ ${destination} | |
chmod --recursive 744 ${destination} | |
''; | |
in | |
'' | |
pushd $sourceRoot/external/git/ | |
'' | |
+ prepareSource useStaticOpenAL letoram-openal-src "openal" | |
+ prepareSource useStaticLibuvc libuvc-src "libuvc" | |
+ prepareSource useBuiltinLua luajit-src "luajit" | |
+ prepareSource useTracy tracy-src "tracy" | |
+ '' | |
popd | |
''; | |
postPatch = '' | |
substituteInPlace ./src/platform/posix/paths.c \ | |
--replace "/usr/bin" "$out/bin" \ | |
--replace "/usr/share" "$out/share" | |
substituteInPlace ./src/CMakeLists.txt \ | |
--replace "SETUID" "# SETUID" | |
''; | |
# INFO: Arcan build scripts require the manpages to be generated *before* the | |
# `configure` phase | |
preConfigure = lib.optionalString buildManPages '' | |
pushd doc | |
ruby docgen.rb mangen | |
popd | |
''; | |
doStrip = false; | |
dontStrip = true; | |
cmakeFlags = [ | |
"-DCMAKE_BUILD_TYPE=Release" | |
# The upstream project recommends tagging the distribution | |
(lib.cmakeFeature "DISTR_TAG" "Nixpkgs") | |
(lib.cmakeFeature "ENGINE_BUILDTAG" finalAttrs.version) | |
(lib.cmakeFeature "BUILD_PRESET" "everything") | |
(lib.cmakeBool "BUILTIN_LUA" useBuiltinLua) | |
(lib.cmakeBool "DISABLE_JIT" useBuiltinLua) | |
(lib.cmakeBool "STATIC_LIBUVC" useStaticLibuvc) | |
(lib.cmakeBool "STATIC_SQLite3" useStaticSqlite) | |
(lib.cmakeBool "STATIC_OPENAL" useStaticOpenAL) | |
(lib.cmakeBool "ENABLE_TRACY" useTracy) | |
(lib.cmakeBool "HYBRID_SDL" false) | |
"-DAUDIO_PLATFORM=openal" | |
"-DVIDEO_PLATFORM=egl-dri" | |
"-DAGP_PLATFORM=gl21" | |
"../src" | |
]; | |
passthru = { | |
wrapper = callPackage ./wrapper.nix { }; | |
}; | |
meta = { | |
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 lib.licenses; [ bsd3 gpl2Plus lgpl2Plus ]; | |
maintainers = with lib.maintainers; [ AndersonTorres ]; | |
platforms = lib.platforms.unix; | |
}; | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment