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.3";
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-4ENuYq074j/VdzLyrGVCGaZhoStwlgJWTqGbrt20A3Q=";
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 ] ++ gql.optional-dependencies.aiohttp;
73 };
74
75 nativeCheckInputs = [
76 pytestCheckHook
77 parameterized
78 xmldiff
79 ] ++ optional-dependencies.spritecollab;
80
81 preCheck = "pushd test";
82 postCheck = "popd";
83
84 disabledTestPaths = [
85 "skytemple_files_test/common/spritecollab/sc_online_test.py"
86 "skytemple_files_test/compression_container/atupx/atupx_test.py" # Particularly long test
87 ];
88
89 pythonImportsCheck = [ "skytemple_files" ];
90
91 meta = with lib; {
92 homepage = "https://github.com/SkyTemple/skytemple-files";
93 description = "Python library to edit the ROM of Pokémon Mystery Dungeon Explorers of Sky";
94 mainProgram = "skytemple_export_maps";
95 license = licenses.gpl3Plus;
96 maintainers = with maintainers; [ marius851000 ];
97 broken = stdenv.hostPlatform.isDarwin; # pyobjc is missing
98 };
99}