godot_4{,-mono}: 4.3-stable -> 4.4-stable (#387031)

This commit is contained in:
David McFarland
2025-03-09 20:00:17 -03:00
committed by GitHub
12 changed files with 1628 additions and 79 deletions
-6
View File
@@ -1,6 +0,0 @@
{
godot_4,
}:
godot_4.override {
withMono = true;
}
+7 -8
View File
@@ -5,8 +5,7 @@
dbus,
fetchFromGitHub,
gamescope,
godot_4,
godot_4-export-templates,
godot_4_3,
hwdata,
lib,
libGL,
@@ -46,8 +45,8 @@ stdenv.mkDerivation (finalAttrs: {
nativeBuildInputs = [
autoPatchelfHook
cargo
godot_4
godot_4-export-templates
godot_4_3
godot_4_3.export-templates-bin
pkg-config
rustPlatform.cargoSetupHook
];
@@ -76,13 +75,13 @@ stdenv.mkDerivation (finalAttrs: {
env =
let
versionAndRelease = lib.splitString "-" godot_4.version;
versionAndRelease = lib.splitString "-" godot_4_3.version;
in
{
GODOT = lib.getExe godot_4;
GODOT = lib.getExe godot_4_3;
GODOT_VERSION = lib.elemAt versionAndRelease 0;
GODOT_RELEASE = lib.elemAt versionAndRelease 1;
EXPORT_TEMPLATE = "${godot_4-export-templates}";
EXPORT_TEMPLATE = "${godot_4_3.export-templates-bin}";
BUILD_TYPE = "${finalAttrs.buildType}";
};
@@ -94,7 +93,7 @@ stdenv.mkDerivation (finalAttrs: {
# Godot looks for export templates in HOME
export HOME=$(mktemp -d)
mkdir -p $HOME/.local/share/godot/export_templates
ln -s "${godot_4-export-templates}" "$HOME/.local/share/godot/export_templates/$GODOT_VERSION.$GODOT_RELEASE"
ln -s "${godot_4_3.export-templates-bin}" "$HOME/.local/share/godot/export_templates/$GODOT_VERSION.$GODOT_RELEASE"
'';
postInstall = ''
+5 -5
View File
@@ -4,8 +4,7 @@
alsa-lib,
autoPatchelfHook,
fetchFromGitHub,
godot_4,
godot_4-export-templates,
godot_4_3,
libGL,
libpulseaudio,
libX11,
@@ -28,7 +27,8 @@ let
presets.${stdenv.hostPlatform.system}
or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
godot_version_folder = lib.replaceStrings [ "-" ] [ "." ] godot_4.version;
godot = godot_4_3;
godot_version_folder = lib.replaceStrings [ "-" ] [ "." ] godot.version;
in
stdenv.mkDerivation (finalAttrs: {
pname = "pixelorama";
@@ -45,7 +45,7 @@ stdenv.mkDerivation (finalAttrs: {
nativeBuildInputs = [
autoPatchelfHook
godot_4
godot
];
runtimeDependencies = map lib.getLib [
@@ -66,7 +66,7 @@ stdenv.mkDerivation (finalAttrs: {
export HOME=$(mktemp -d)
mkdir -p $HOME/.local/share/godot/export_templates
ln -s "${godot_4-export-templates}" "$HOME/.local/share/godot/export_templates/${godot_version_folder}"
ln -s "${godot.export-templates-bin}" "$HOME/.local/share/godot/export_templates/${godot_version_folder}"
mkdir -p build
godot4 --headless --export-release "${preset}" ./build/pixelorama
@@ -0,0 +1,6 @@
{
version = "4.3-stable";
hash = "sha256-MzElflwXHWLgPtoOIhPLA00xX8eEdQsexZaGIEOzbj0=";
exportTemplatesHash = "sha256-XRnKii+eexIkbGf7bqc42SR0NBULFvgMdOpSRNNk6kg=";
nugetDeps = ./deps.json;
}
@@ -29,6 +29,11 @@
"version": "1.0.9",
"hash": "sha256-7c5TRZ594tr1Fj5fNiXtPI0pcBuyX/3eU4x+it6Yzew="
},
{
"pname": "Microsoft.AspNetCore.App.Ref",
"version": "6.0.36",
"hash": "sha256-9jDkWbjw/nd8yqdzVTagCuqr6owJ/DUMi4BlUZT4hWU="
},
{
"pname": "Microsoft.Bcl.AsyncInterfaces",
"version": "1.1.1",
@@ -224,6 +229,11 @@
"version": "17.7.1",
"hash": "sha256-ySyNpRodd6R6qKnGrgwLYaiHZga2GL0fQARrYGIFa6k="
},
{
"pname": "Microsoft.NETCore.App.Ref",
"version": "6.0.36",
"hash": "sha256-9LZgVoIFF8qNyUu8kdJrYGLutMF/cL2K82HN2ywwlx8="
},
{
"pname": "Microsoft.NETCore.Platforms",
"version": "1.0.1",
@@ -0,0 +1,6 @@
{
version = "4.4-stable";
hash = "sha256-lCWz0FLSlqUZLA4APgcxuc4wupkMcXcvZ9TUzREAM4U=";
exportTemplatesHash = "sha256-ayY1euO7WJJhZcF0NfobuD1Pcr8LeV/3g/opaZ2wniQ=";
nugetDeps = ./deps.json;
}
File diff suppressed because it is too large Load Diff
@@ -3,10 +3,10 @@
autoPatchelfHook,
buildPackages,
dbus,
dotnet-sdk_6,
dotnetCorePackages,
fetchFromGitHub,
fontconfig,
hash,
installShellFiles,
lib,
libdecor,
@@ -23,17 +23,21 @@
libXrender,
makeWrapper,
pkg-config,
runCommand,
scons,
speechd-minimal,
stdenv,
stdenvNoCC,
testers,
udev,
version,
vulkan-loader,
wayland,
wayland-scanner,
withDbus ? true,
withFontconfig ? true,
withMono ? false,
nugetDeps ? null,
withPlatform ? "linuxbsd",
withPrecision ? "single",
withPulseaudio ? true,
@@ -63,14 +67,29 @@ let
attrs = finalAttrs: rec {
pname = "godot4${suffix}";
version = "4.3-stable";
commitHash = "77dcf97d82cbfe4e4615475fa52ca03da645dbd8";
inherit version;
src = fetchFromGitHub {
owner = "godotengine";
repo = "godot";
rev = commitHash;
hash = "sha256-v2lBD3GEL8CoIwBl3UoLam0dJxkLGX0oneH6DiWkEsM=";
tag = version;
inherit hash;
# Required for the commit hash to be included in the version number.
#
# `methods.py` reads the commit hash from `.git/HEAD` and manually follows
# refs.
#
# See also 'hash' in
# https://docs.godotengine.org/en/stable/classes/class_engine.html#class-engine-method-get-version-info
leaveDotGit = true;
# Only keep HEAD, because leaveDotGit is non-deterministic:
# https://github.com/NixOS/nixpkgs/issues/8567
postFetch = ''
hash=$(git -C "$out" rev-parse HEAD)
rm -r "$out"/.git
mkdir "$out"/.git
echo "$hash" > "$out"/.git/HEAD
'';
};
outputs = [
@@ -88,28 +107,15 @@ let
# https://docs.godotengine.org/en/stable/classes/class_engine.html#class-engine-method-get-version-info
BUILD_NAME = "nixpkgs";
# Required for the commit hash to be included in the version number.
#
# `methods.py` reads the commit hash from `.git/HEAD` and manually follows
# refs. Since we just write the hash directly, there is no need to emulate any
# other parts of the .git directory.
#
# See also 'hash' in
# https://docs.godotengine.org/en/stable/classes/class_engine.html#class-engine-method-get-version-info
preConfigure =
''
mkdir -p .git
echo ${commitHash} > .git/HEAD
''
+ lib.optionalString withMono ''
# TODO: avoid pulling in dependencies of windows-only project
dotnet sln modules/mono/editor/GodotTools/GodotTools.sln \
remove modules/mono/editor/GodotTools/GodotTools.OpenVisualStudio/GodotTools.OpenVisualStudio.csproj
preConfigure = lib.optionalString withMono ''
# TODO: avoid pulling in dependencies of windows-only project
dotnet sln modules/mono/editor/GodotTools/GodotTools.sln \
remove modules/mono/editor/GodotTools/GodotTools.OpenVisualStudio/GodotTools.OpenVisualStudio.csproj
dotnet restore modules/mono/glue/GodotSharp/GodotSharp.sln
dotnet restore modules/mono/editor/GodotTools/GodotTools.sln
dotnet restore modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk.sln
'';
dotnet restore modules/mono/glue/GodotSharp/GodotSharp.sln
dotnet restore modules/mono/editor/GodotTools/GodotTools.sln
dotnet restore modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk.sln
'';
# From: https://github.com/godotengine/godot/blob/4.2.2-stable/SConstruct
sconsFlags = mkSconsFlagsFromAttrSet {
@@ -144,7 +150,7 @@ let
pkg-config
];
buildInputs = lib.optionals withMono dotnet-sdk_6.packages;
buildInputs = lib.optionals withMono dotnet-sdk.packages;
nativeBuildInputs =
[
@@ -231,14 +237,126 @@ let
}"
''
+ ''
runHook postInstall
ln -s godot4${suffix} "$out"/bin/godot
runHook post Install
'';
passthru.tests = {
version = testers.testVersion {
package = finalAttrs.finalPackage;
version = lib.replaceStrings [ "-" ] [ "." ] version;
};
passthru = {
tests =
let
pkg = finalAttrs.finalPackage;
dottedVersion = lib.replaceStrings [ "-" ] [ "." ] version;
exportedProject = stdenvNoCC.mkDerivation {
name = "${pkg.name}-project-export";
nativeBuildInputs = [
pkg
autoPatchelfHook
];
runtimeDependencies = map lib.getLib [
alsa-lib
libGL
libpulseaudio
libX11
libXcursor
libXext
libXi
libXrandr
udev
vulkan-loader
];
unpackPhase = ''
runHook preUnpack
mkdir test
cd test
touch project.godot
cat >create-scene.gd <<'EOF'
extends SceneTree
func _initialize():
var node = Node.new()
var script = ResourceLoader.load("res://test.gd")
print(script)
node.set_script(script)
var scene = PackedScene.new()
var scenePath = "res://test.tscn"
scene.pack(node)
var x = ResourceSaver.save(scene, scenePath)
ProjectSettings["application/run/main_scene"] = scenePath
ProjectSettings.save()
node.free()
quit()
EOF
cat >test.gd <<'EOF'
extends Node
func _ready():
print("Hello, World!")
get_tree().quit()
EOF
cat >export_presets.cfg <<'EOF'
[preset.0]
name="build"
platform="Linux"
runnable=true
export_filter="all_resources"
include_filter=""
exclude_filter=""
[preset.0.options]
__empty=""
EOF
runHook postUnpack
'';
buildPhase = ''
runHook preBuild
export HOME=$(mktemp -d)
mkdir -p $HOME/.local/share/godot/export_templates
ln -s "${pkg.export-templates-bin}" "$HOME/.local/share/godot/export_templates/${dottedVersion}"
godot --headless -s create-scene.gd
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p "$out"/bin
godot --headless --export-release build "$out"/bin/test
runHook postInstall
'';
};
in
{
version = testers.testVersion {
package = pkg;
version = dottedVersion;
};
project-runs = runCommand "${pkg.name}-project-runs" { } ''
(
set -eo pipefail
HOME=$(mktemp -d)
"${exportedProject}"/bin/test --headless | tail -n1 | (
read output
if [[ "$output" != "Hello, World!" ]]; then
echo "unexpected output: $output" >&2
exit 1
fi
)
touch "$out"
)
'';
};
};
requiredSystemFeatures = [
@@ -267,12 +385,12 @@ in
stdenv.mkDerivation (
if withMono then
dotnetCorePackages.addNuGetDeps {
nugetDeps = ./deps.json;
inherit nugetDeps;
overrideFetchAttrs = old: rec {
runtimeIds = map (system: dotnetCorePackages.systemToDotnetRid system) old.meta.platforms;
buildInputs =
old.buildInputs
++ lib.concatLists (lib.attrValues (lib.getAttrs runtimeIds dotnet-sdk_6.targetPackages));
++ lib.concatLists (lib.attrValues (lib.getAttrs runtimeIds dotnet-sdk.targetPackages));
};
} attrs
else
+71
View File
@@ -0,0 +1,71 @@
{
callPackage,
nix-update-script,
fetchzip,
}:
let
mkGodotPackages =
versionPrefix:
let
attrs = import ./${versionPrefix};
inherit (attrs)
version
hash
exportTemplatesHash
nugetDeps
;
in
rec {
godot = (callPackage ./common.nix { inherit version hash nugetDeps; }).overrideAttrs (old: {
passthru = old.passthru or { } // {
inherit export-templates-bin;
updateScript = [
./update.sh
versionPrefix
(builtins.unsafeGetAttrPos "version" attrs).file
];
};
});
godot-mono = godot.override {
withMono = true;
};
export-templates-bin = (
callPackage ./export-templates-bin.nix {
inherit version godot;
hash = exportTemplatesHash;
}
);
};
godotPackages_4_3 = mkGodotPackages "4.3";
godotPackages_4_4 = mkGodotPackages "4.4";
godotPackages_4 = godotPackages_4_4;
godotPackages = godotPackages_4;
in
rec {
godot3 = callPackage ./3 { };
godot3-export-templates = callPackage ./3/export-templates.nix { };
godot3-headless = callPackage ./3/headless.nix { };
godot3-debug-server = callPackage ./3/debug-server.nix { };
godot3-server = callPackage ./3/server.nix { };
godot3-mono = callPackage ./3/mono { };
godot3-mono-export-templates = callPackage ./3/mono/export-templates.nix { };
godot3-mono-headless = callPackage ./3/mono/headless.nix { };
godot3-mono-debug-server = callPackage ./3/mono/debug-server.nix { };
godot3-mono-server = callPackage ./3/mono/server.nix { };
godot_4_3 = godotPackages_4_3.godot;
godot_4_3-mono = godotPackages_4_3.godot-mono;
godot_4_3-export-templates = godotPackages_4_3.export-templates-bin;
godot_4_4 = godotPackages_4_4.godot;
godot_4_4-mono = godotPackages_4_4.godot-mono;
godot_4_4-export-templates = godotPackages_4_4.export-templates-bin;
godot_4 = godotPackages_4.godot;
godot_4-mono = godotPackages_4.godot-mono;
godot_4-export-templates = godotPackages_4.export-templates-bin;
godot = godotPackages.godot;
godot-mono = godotPackages.godot-mono;
godot-export-templates = godotPackages.export-templates-bin;
}
@@ -1,13 +1,29 @@
{
fetchzip,
godot,
hash,
lib,
version,
}:
# Export templates is necessary for setting up Godot engine, it's used when exporting projects.
# Godot applications/games packages needs to reference export templates.
# Export templates version should be kept in sync with Godot version.
# https://docs.godotengine.org/en/stable/tutorials/export/exporting_projects.html#export-templates
{ fetchzip, godot_4, ... }:
fetchzip {
pname = "export_templates";
pname = "godot-export-templates";
version = version;
extension = "zip";
url = "https://github.com/godotengine/godot/releases/download/${godot_4.version}/Godot_v${godot_4.version}_export_templates.tpz";
hash = "sha256-XRnKii+eexIkbGf7bqc42SR0NBULFvgMdOpSRNNk6kg=";
url = "https://github.com/godotengine/godot/releases/download/${version}/Godot_v${version}_export_templates.tpz";
inherit hash;
meta = {
inherit (godot.meta)
changelog
description
homepage
license
maintainers
;
sourceProvenance = [ lib.sourceTypes.binaryNativeCode ];
};
}
+17
View File
@@ -0,0 +1,17 @@
#!/usr/bin/env nix-shell
#!nix-shell -I nixpkgs=./. --pure -i bash -p bash nix nix-update git cacert common-updater-scripts --keep UPDATE_NIX_ATTR_PATH --keep UPDATE_NIX_OLD_VERSION
set -euo pipefail
versionPrefix=$1
file=$2
attr=$UPDATE_NIX_ATTR_PATH
prev_version=$UPDATE_NIX_OLD_VERSION
nix-update "$attr" \
--version-regex "($versionPrefix\\b.*-stable)" \
--override-filename "$2"
[[ $(nix eval --raw -f. "$attr".version) != "$prev_version" ]] || exit 0
"$(nix build --impure --expr "((import ./. {}).$attr.override { withMono = true; }).fetch-deps" --print-out-paths --no-link)"
update-source-version "$attr" --ignore-same-version --source-key=export-templates-bin --file="$file"
+24 -19
View File
@@ -3453,25 +3453,30 @@ with pkgs;
gnutar = callPackage ../tools/archivers/gnutar { };
godot3 = callPackage ../development/tools/godot/3 { };
godot3-export-templates = callPackage ../development/tools/godot/3/export-templates.nix { };
godot3-headless = callPackage ../development/tools/godot/3/headless.nix { };
godot3-debug-server = callPackage ../development/tools/godot/3/debug-server.nix { };
godot3-server = callPackage ../development/tools/godot/3/server.nix { };
godot3-mono = callPackage ../development/tools/godot/3/mono {};
godot3-mono-export-templates = callPackage ../development/tools/godot/3/mono/export-templates.nix { };
godot3-mono-headless = callPackage ../development/tools/godot/3/mono/headless.nix { };
godot3-mono-debug-server = callPackage ../development/tools/godot/3/mono/debug-server.nix { };
godot3-mono-server = callPackage ../development/tools/godot/3/mono/server.nix { };
inherit (callPackage ../development/tools/godot { })
godot3
godot3-export-templates
godot3-headless
godot3-debug-server
godot3-server
godot3-mono
godot3-mono-export-templates
godot3-mono-headless
godot3-mono-debug-server
godot3-mono-server
godot_4_3
godot_4_3-mono
godot_4_3-export-templates
godot_4_4
godot_4_4-mono
godot_4_4-export-templates
godot_4
godot_4-mono
godot_4-export-templates
godot
godot-mono
godot-export-templates
;
goattracker = callPackage ../applications/audio/goattracker { };