e138e656c7
The godot base derivation was implemented by passing a recursive attrset to mkDerivation. This is problematic because recursive references to attributes that are later overridden don't notice the override. Switched to the approach of giving mkDerivation a lambda that receives a self argument, which allows recursive references to the final value after overrides are applied. The related derivations (for export templates, headless, and server builds of godot) duplicated content from the base derivation. This refactor eliminated that by using overridable attributes to parameterize the scripts. The main motivation for this refactor was to help me add derivations for mono builds of godot. Renamed to godot3 to distinguish from version 4, which is a complete rewrite and effectively a different tool altogether.
84 lines
2.5 KiB
Nix
84 lines
2.5 KiB
Nix
{ lib
|
|
, python3Packages
|
|
, fetchFromGitHub
|
|
, godot3-server
|
|
}:
|
|
|
|
let lark080 = python3Packages.lark.overrideAttrs (old: rec {
|
|
# gdtoolkit needs exactly this lark version
|
|
version = "0.8.0";
|
|
src = fetchFromGitHub {
|
|
owner = "lark-parser";
|
|
repo = "lark";
|
|
rev = version;
|
|
hash = "sha256-KN9buVlH8hJ8t0ZP5yefeYM5vH5Gg7a7TEDGKJYpozs=";
|
|
fetchSubmodules = true;
|
|
};
|
|
});
|
|
|
|
in
|
|
python3Packages.buildPythonApplication rec {
|
|
pname = "gdtoolkit";
|
|
version = "3.3.1";
|
|
|
|
# If we try to get using fetchPypi it requires GeoIP (but the package dont has that dep!?)
|
|
src = fetchFromGitHub {
|
|
owner = "Scony";
|
|
repo = "godot-gdscript-toolkit";
|
|
rev = version;
|
|
sha256 = "13nnpwy550jf5qnm9ixpxl1bwfnhhbiys8vqfd25g3aim4bm3gnn";
|
|
};
|
|
|
|
disabled = python3Packages.pythonOlder "3.7";
|
|
|
|
propagatedBuildInputs = [ lark080
|
|
] ++ (with python3Packages; [
|
|
docopt
|
|
pyyaml
|
|
setuptools
|
|
]);
|
|
|
|
doCheck = true;
|
|
|
|
nativeCheckInputs = with python3Packages; [
|
|
pytestCheckHook
|
|
hypothesis
|
|
godot3-server
|
|
];
|
|
|
|
preCheck =
|
|
let
|
|
godotServerMajorVersion = lib.versions.major godot3-server.version;
|
|
gdtoolkitMajorVersion = lib.versions.major version;
|
|
msg = ''
|
|
gdtoolkit major version ${gdtoolkitMajorVersion} does not match godot-server major version ${godotServerMajorVersion}!
|
|
gdtoolkit needs a matching godot-server for its tests.
|
|
If you see this error, you can either:
|
|
- disable doCheck for gdtoolkit, or
|
|
- provide a compatible godot-server version to gdtoolkit"
|
|
'';
|
|
in lib.throwIf (godotServerMajorVersion != gdtoolkitMajorVersion) msg ''
|
|
# The tests want to run the installed executables
|
|
export PATH=$out/bin:$PATH
|
|
|
|
# gdtoolkit tries to write cache variables to $HOME/.cache
|
|
export HOME=$TMP
|
|
|
|
# Work around https://github.com/godotengine/godot/issues/20503
|
|
# Without this, Godot will complain about a missing project file
|
|
touch project.godot
|
|
|
|
# Remove broken test case
|
|
# (hard to skip via disabledTests since the test name contains an absolute path)
|
|
rm tests/potential-godot-bugs/multiline-subscription-expression.gd
|
|
'';
|
|
|
|
pythonImportsCheck = [ "gdtoolkit" "gdtoolkit.formatter" "gdtoolkit.linter" "gdtoolkit.parser" ];
|
|
|
|
meta = with lib; {
|
|
description = "Independent set of tools for working with Godot's GDScript - parser, linter and formatter";
|
|
homepage = "https://github.com/Scony/godot-gdscript-toolkit";
|
|
license = licenses.mit;
|
|
maintainers = with maintainers; [ shiryel tmarkus ];
|
|
};
|
|
}
|