62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
"""Guard retained non-root platform CMake files during Phase 6 migration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import re
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
RETAINED_PLATFORM_CMAKE = [
|
|
Path("linux/CMakeLists.txt"),
|
|
Path("webgl/CMakeLists.txt"),
|
|
]
|
|
|
|
|
|
def repo_root() -> Path:
|
|
return Path(__file__).resolve().parents[2]
|
|
|
|
|
|
def cmake_minimum_version(text: str) -> tuple[int, ...] | None:
|
|
match = re.search(r"cmake_minimum_required\s*\(\s*VERSION\s+([0-9.]+)", text, re.I)
|
|
if not match:
|
|
return None
|
|
return tuple(int(part) for part in match.group(1).split("."))
|
|
|
|
|
|
def main() -> int:
|
|
root = repo_root()
|
|
results: dict[str, object] = {}
|
|
ok = True
|
|
|
|
for path in RETAINED_PLATFORM_CMAKE:
|
|
text = (root / path).read_text(encoding="utf-8")
|
|
minimum_version = cmake_minimum_version(text)
|
|
has_target_cxx23 = "target_compile_features(panopainter PRIVATE cxx_std_23)" in text
|
|
has_cxx_extensions_off = "CXX_EXTENSIONS OFF" in text
|
|
uses_global_cxx_standard_flag = bool(re.search(r"-std=c\+\+14|-std=c\+\+17|-std=c\+\+20", text))
|
|
platform_ok = (
|
|
minimum_version is not None
|
|
and minimum_version >= (3, 10)
|
|
and has_target_cxx23
|
|
and has_cxx_extensions_off
|
|
and not uses_global_cxx_standard_flag
|
|
)
|
|
ok = ok and platform_ok
|
|
results[str(path)] = {
|
|
"ok": platform_ok,
|
|
"minimumVersion": ".".join(str(part) for part in minimum_version) if minimum_version else None,
|
|
"hasTargetCxx23": has_target_cxx23,
|
|
"hasCxxExtensionsOff": has_cxx_extensions_off,
|
|
"usesGlobalCxxStandardFlag": uses_global_cxx_standard_flag,
|
|
}
|
|
|
|
print(json.dumps({"ok": ok, "platforms": results}, separators=(",", ":")))
|
|
return 0 if ok else 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|