1{
2 stdenv,
3 lib,
4 buildPythonPackage,
5 fetchFromGitHub,
6 appdirs,
7 dungeon-eos,
8 explorerscript,
9 ndspy,
10 pillow,
11 setuptools,
12 skytemple-rust,
13 pyyaml,
14 pmdsky-debug-py,
15 range-typed-integers,
16 pythonOlder,
17 # optional dependencies for SpriteCollab
18 aiohttp,
19 lru-dict,
20 graphql-core,
21 gql,
22 armips,
23 # tests
24 pytestCheckHook,
25 parameterized,
26 xmldiff,
27}:
28
29buildPythonPackage rec {
30 pname = "skytemple-files";
31 version = "1.8.5";
32 pyproject = true;
33
34 disabled = pythonOlder "3.9";
35
36 src = fetchFromGitHub {
37 owner = "SkyTemple";
38 repo = "skytemple-files";
39 rev = version;
40 hash = "sha256-s7r6wS7H19+is3CFr+dLaTiq0N/gaO/8IFknmr+OAJk=";
41 # Most patches are in submodules
42 fetchSubmodules = true;
43 };
44
45 postPatch = ''
46 substituteInPlace skytemple_files/patch/arm_patcher.py skytemple_files/data/data_cd/armips_importer.py \
47 --replace-fail "exec_name = os.getenv(\"SKYTEMPLE_ARMIPS_EXEC\", f\"{prefix}armips\")" "exec_name = \"${armips}/bin/armips\""
48 '';
49
50 build-system = [ setuptools ];
51
52 buildInputs = [ armips ];
53
54 dependencies = [
55 appdirs
56 dungeon-eos
57 explorerscript
58 ndspy
59 pillow
60 skytemple-rust
61 pyyaml
62 pmdsky-debug-py
63 range-typed-integers
64 ];
65
66 optional-dependencies = {
67 spritecollab = [
68 aiohttp
69 gql
70 graphql-core
71 lru-dict
72 ]
73 ++ gql.optional-dependencies.aiohttp;
74 };
75
76 nativeCheckInputs = [
77 pytestCheckHook
78 parameterized
79 xmldiff
80 ]
81 ++ optional-dependencies.spritecollab;
82
83 preCheck = "pushd test";
84 postCheck = "popd";
85
86 disabledTestPaths = [
87 "skytemple_files_test/common/spritecollab/sc_online_test.py"
88 "skytemple_files_test/compression_container/atupx/atupx_test.py" # Particularly long test
89 ];
90
91 pythonImportsCheck = [ "skytemple_files" ];
92
93 meta = with lib; {
94 homepage = "https://github.com/SkyTemple/skytemple-files";
95 description = "Python library to edit the ROM of Pokémon Mystery Dungeon Explorers of Sky";
96 mainProgram = "skytemple_export_maps";
97 license = licenses.gpl3Plus;
98 maintainers = with maintainers; [ marius851000 ];
99 broken = stdenv.hostPlatform.isDarwin; # pyobjc is missing
100 };
101}