ultimate-doom-builder: init at 0-unstable-2026-02-01 (#487610)

This commit is contained in:
Sandro
2026-03-01 03:33:29 +00:00
committed by GitHub
2 changed files with 143 additions and 0 deletions
+6
View File
@@ -25232,6 +25232,12 @@
githubId = 13762043;
matrix = "@sophie:nue.soopy.moe";
};
sophronesis = {
email = "oleksandr.buzynnyi@gmail.com";
github = "sophronesis";
githubId = 13190573;
name = "Oleksandr Buzynnyi";
};
sophrosyne = {
email = "joshuaortiz@tutanota.com";
github = "sophrosyne97";
@@ -0,0 +1,137 @@
{
stdenv,
lib,
fetchFromGitHub,
makeWrapper,
msbuild,
mono,
libGL,
libpng,
libx11,
gtk2-x11,
makeDesktopItem,
copyDesktopItems,
unstableGitUpdater,
autoPatchelfHook,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "ultimate-doom-builder";
version = "0-unstable-2026-02-01";
src = fetchFromGitHub {
owner = "jewalky";
repo = "UltimateDoomBuilder";
rev = "9d7a12b1164dc53964b594395f9d5d825a43ac12";
hash = "sha256-FwGfrvF+UrmEw1lvcU4qL9OOP0n/ZmQTsIjQIxRvkmg=";
};
nativeBuildInputs = [
msbuild
makeWrapper
copyDesktopItems
autoPatchelfHook
];
buildInputs = [
libGL
libpng
libx11
gtk2-x11
];
postPatch =
let
gitCommitCount = "4291";
gitCommitHash = "9d7a12b";
in
''
# Replace git-based version generation with static values since .git directory is not available.
# The build system runs git commands to get commit count and hash, then uses them in version strings.
# We disable the git Exec commands and set static PropertyGroup values instead.
for file in Source/Core/BuilderMono.csproj Source/Plugins/BuilderModes/BuilderModesMono.csproj; do
# Remove git Exec commands (they would fail without .git directory)
sed -i '/<Exec Command="git/,/<\/Exec>/d' "$file"
# Replace conditional defaults with static values
sed -i 's/>0<\/GitCommitCount>/>${gitCommitCount}<\/GitCommitCount>/g' "$file"
sed -i 's/>0<\/GitCommitHash>/>${gitCommitHash}<\/GitCommitHash>/g' "$file"
done
'';
buildPhase = ''
runHook preBuild
# Won't compile without windows codepage identifier for UTF-8
msbuild /nologo /verbosity:minimal -p:Configuration=Release /p:codepage=65001 ./BuilderMono.sln
cp builder.sh Build/builder
chmod +x Build/builder
# Build native library with:
# - UDB_LINUX=1 for proper mouse input handling
# - NO_SSE=1 on aarch64 to disable SSE intrinsics
$CXX -std=c++14 -O2 -shared -o Build/libBuilderNative.so -fPIC \
-DUDB_LINUX=1 \
${lib.optionalString stdenv.hostPlatform.isAarch64 "-DNO_SSE=1"} \
-I Source/Native \
Source/Native/*.cpp \
Source/Native/OpenGL/*.cpp \
Source/Native/OpenGL/gl_load/*.c \
-lX11 -ldl
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/{bin,opt,share/icons/hicolor/64x64/apps}
cp -r Build $out/opt/UltimateDoomBuilder
substituteInPlace $out/opt/UltimateDoomBuilder/builder --replace-fail mono ${mono}/bin/mono
substituteInPlace $out/opt/UltimateDoomBuilder/builder --replace-fail Builder.exe $out/opt/UltimateDoomBuilder/Builder.exe
# GTK is loaded dynamically by Mono at runtime
wrapProgram $out/opt/UltimateDoomBuilder/builder \
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ gtk2-x11 ]}"
ln -s $out/opt/UltimateDoomBuilder/builder $out/bin/ultimate-doom-builder
cp flatpak/icons/64x64/io.github.ultimatedoombuilder.ultimatedoombuilder.png $out/share/icons/hicolor/64x64/apps/ultimate-doom-builder.png
runHook postInstall
'';
desktopItems = [
(makeDesktopItem {
name = "ultimate-doom-builder";
exec = "ultimate-doom-builder";
icon = "ultimate-doom-builder";
desktopName = "Ultimate Doom Builder";
comment = finalAttrs.meta.description;
categories = [
"Game"
"Development"
"Graphics"
"3DGraphics"
];
})
];
passthru.updateScript = unstableGitUpdater { };
meta = {
homepage = "https://github.com/jewalky/UltimateDoomBuilder";
description = "Advanced Doom map editor based on Doom Builder 2 with Mono support";
mainProgram = "ultimate-doom-builder";
longDescription = ''
Ultimate Doom Builder is a map editor for Doom, Heretic, Hexen, and Strife.
It is a continuation of Doom Builder 2 with many new features and improvements,
including cross-platform support via Mono.
'';
license = lib.licenses.gpl3Plus;
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [ sophronesis ];
};
})