Skip to content

Commit 5804377

Browse files
committed
fix: use local copy of mina
Signed-off-by: Frost Ming <me@frostming.com>
1 parent 7edb6ef commit 5804377

File tree

3 files changed

+111
-4
lines changed

3 files changed

+111
-4
lines changed

pdm.lock

Lines changed: 6 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pdm_build.py

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
# Local copy of mina_build.hooks
2+
# https://github.com/GreyElaina/mina/blob/main/src/mina_backend/hooks.py
3+
4+
from __future__ import annotations
5+
6+
import os
7+
import sys
8+
from pathlib import Path
9+
from typing import Any, Mapping, MutableMapping
10+
11+
from pdm.backend.config import Config
12+
from pdm.backend.hooks import Context
13+
14+
if sys.version_info >= (3, 11):
15+
import tomllib as tomli
16+
else:
17+
from pdm.backend._vendor import tomli
18+
19+
20+
def pdm_build_hook_enabled(context: Context) -> bool:
21+
tool_mina = context.config.data.get("tool", {}).get("mina", {})
22+
return bool(tool_mina.get("enabled"))
23+
24+
25+
def _get_build_target(context: Context) -> str | None:
26+
tool_mina = context.config.data.get("tool", {}).get("mina", {})
27+
return (
28+
context.config_settings.get("mina-target")
29+
or os.environ.get("MINA_BUILD_TARGET")
30+
or tool_mina.get("default-build-target")
31+
)
32+
33+
34+
def _using_override(config: Config, package_conf: dict[str, Any]) -> bool:
35+
if "override" in package_conf:
36+
return package_conf["override"]
37+
return config.data.get("tool", {}).get("mina", {}).get("override-global", False)
38+
39+
40+
def _get_standalone_config(root: Path, pkg: str):
41+
config_file = root / ".mina" / f"{pkg}.toml"
42+
if not config_file.exists():
43+
return
44+
45+
return tomli.loads(config_file.read_text())
46+
47+
48+
def _update_config(config: Config, package: str) -> None:
49+
package_conf = _get_standalone_config(config.root, package)
50+
if package_conf is not None:
51+
package_conf.setdefault("includes", []).append(f".mina/{package}.toml")
52+
else:
53+
package_conf = (
54+
config.data.get("tool", {})
55+
.get("mina", {})
56+
.get("packages", {})
57+
.get(package, None)
58+
)
59+
if package_conf is None:
60+
raise ValueError(f"No package named '{package}'")
61+
62+
package_metadata = package_conf.pop("project", {})
63+
using_override = _using_override(config, package_conf)
64+
65+
build_config = config.build_config
66+
67+
# Override build config
68+
build_config.update(package_conf)
69+
70+
if using_override:
71+
config.data["project"] = package_metadata
72+
else:
73+
deep_merge(config.metadata, package_metadata)
74+
# dependencies are already merged, restore them
75+
config.metadata["dependencies"] = package_metadata.get("dependencies", [])
76+
config.metadata["optional-dependencies"] = package_metadata.get(
77+
"optional-dependencies", {}
78+
)
79+
80+
config.validate()
81+
82+
83+
def deep_merge(source: MutableMapping, target: Mapping) -> Mapping:
84+
for key, value in target.items():
85+
if key in source and isinstance(value, list):
86+
source[key].extend(value)
87+
elif key in source and isinstance(value, dict):
88+
deep_merge(source[key], value)
89+
else:
90+
source[key] = value
91+
return source
92+
93+
94+
def pdm_build_initialize(context: Context) -> None:
95+
if not pdm_build_hook_enabled(context):
96+
return
97+
98+
mina_target = _get_build_target(context)
99+
if mina_target is None:
100+
return
101+
102+
_update_config(context.config, mina_target)
103+
# Disable mina after update
104+
context.config.data.setdefault("tool", {}).setdefault("mina", {})["enabled"] = False

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[build-system]
2-
requires = ["pdm-backend", "mina-build>=0.6"]
2+
requires = ["pdm-backend"]
33
build-backend = "pdm.backend"
44

55
[project]

0 commit comments

Comments
 (0)