Source-aware pkg-config metadata parsing and native dependency inspection in MoonBit
| 需要完成的工作 | 使用入口 |
|---|---|
| 在 MoonBit 中解析元数据、计算参数 | moon add xmyd0915/moonpkgconfig@0.4.0 |
| 检查文件、查询依赖或接入其他语言的构建工具 | moonpkgconfig inspect / query / check,支持 JSON |
| 构建真实原生应用 | zlib、Expat、文件压缩工具模板 |
| 接入已有多包工程 | 实验性 pre-build 集成 |
git clone https://github.com/xmyd0915/moonpkgconfig.git
cd moonpkgconfig
moon update
moon install ./cmd/moonpkgconfig
moonpkgconfig query examples/valid imagekit --libs --static --json --explain
moonpkgconfig inspect examples/valid/imagekit.pc --json
moonpkgconfig check examples/invalid --jsonmoonpkgconfig query /path/to/sdk/lib/pkgconfig zlib --modversion
moonpkgconfig query /path/to/sdk/lib/pkgconfig zlib --cflags
moonpkgconfig query /path/to/sdk/lib/pkgconfig zlib --libs --static --explain
moonpkgconfig check /path/to/sdk/lib/pkgconfig --path /path/to/extra/pkgconfig --jsonimport {
"xmyd0915/moonpkgconfig" @pc,
} for "test"test "query a native library" {
let input =
#|Name: codec
#|Description: Example native library
#|Version: 1.0
#|Libs: -lcodec
#|Libs.private: -lm
let document = @pc.parse(input, source="codec.pc")
let packages = @pc.PackageSet::new()
assert_true(packages.add("codec", document).is_empty())
let result = packages.collect_libs("codec", static_linking=true)
assert_true(result.diagnostics.is_empty())
assert_eq(result.flags[0].value, "-lcodec")
assert_eq(result.flags[1].value, "-lm")
assert_eq(result.flags[1].field, "Libs.private")
assert_eq(result.flags[1].location.source, "codec.pc")
}import json
import subprocess
result = subprocess.run(
["moonpkgconfig", "query", "./pkgconfig", "example", "--libs", "--json"],
capture_output=True, text=True, encoding="utf-8", check=False,
)
report = json.loads(result.stdout)
if result.returncode != 0 or report["schema_version"] != 1 or report["status"] != "ok":
raise RuntimeError(report)
arguments = [flag["value"] for flag in report["flags"]]| 退出码 | 含义 |
|---|---|
| 0 | 成功,或版本条件满足 |
| 1 | 元数据/单文件加载诊断、缺少变量或版本条件不满足 |
| 2 | 调用错误、搜索目录读取失败或 inspect 文件读取失败 |
python scripts/review-native.pymoon version --all
moon check --target all --deny-warn
moon build --target all --deny-warn
moon test --target all --deny-warn
python scripts/verify-cli.py
python scripts/verify-install.py --packagepub(all) struct FlagResult {
flags : Array[ResolvedFlag]
diagnostics : Array[Diagnostic]
} derive(Eq, Debug)fn FlagResult::filter_system_search_paths(self : FlagResult, include_paths : Array[String], library_paths : Array[String]) -> FlagResultfn PackageSet::add(self : PackageSet, id : String, document : Document, source? : String) -> Array[Diagnostic]fn PackageSet::check_all(self : PackageSet, include_private? : Bool, unavailable? : Map[String, Array[Diagnostic]]) -> Array[Diagnostic]fn PackageSet::check_requirements(self : PackageSet, requirements : Array[Requirement], source? : String) -> Array[Diagnostic]fn PackageSet::collect_cflags(self : PackageSet, root : String, static_linking? : Bool, unavailable? : Map[String, Array[Diagnostic]]) -> FlagResultfn PackageSet::collect_libs(self : PackageSet, root : String, static_linking? : Bool, unavailable? : Map[String, Array[Diagnostic]]) -> FlagResultfn PackageSet::dependency_path(self : PackageSet, root : String, target : String, include_private? : Bool, unavailable? : Map[String, Array[Diagnostic]]) -> Array[String]fn PackageSet::dependency_paths(self : PackageSet, root : String, include_private? : Bool, unavailable? : Map[String, Array[Diagnostic]]) -> DependencyPathsfn PackageSet::resolve(self : PackageSet, root : String, include_private? : Bool, source? : String, unavailable? : Map[String, Array[Diagnostic]]) -> Resolutionfn PackageSet::select(self : PackageSet, root : String, source? : String, unavailable? : Map[String, Array[Diagnostic]]) -> Result[Package, Array[Diagnostic]]pub(all) struct Resolution {
order : Array[String]
diagnostics : Array[Diagnostic]
} derive(Eq, Debug)fn compare_versions(left : String, right : String) -> Intfn expand(value : String, variables : Map[String, String], location~ : Location) -> Result[String, Diagnostic]Install
Download zipSource-aware pkg-config metadata parsing and native dependency inspection in MoonBit