#!/usr/bin/env python3 import datetime as _dt import os import pathlib import re import subprocess import sys def _run_git(repo_root: str, git_exe: str, args: list[str]) -> str: try: proc = subprocess.run( [git_exe, *args], cwd=repo_root, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True, check=False, ) except OSError: return "" if proc.returncode != 0: return "" return proc.stdout.strip() def _compute_effective_version(repo_root: str, git_exe: str, project_version: str, override_version: str) -> str: if override_version: return override_version tag = _run_git(repo_root, git_exe, ["describe", "--tags", "--match", "v*", "--abbrev=0"]) if tag.startswith("v"): return tag[1:] if tag: return tag return project_version def _now_timestamp() -> str: epoch = os.environ.get("SOURCE_DATE_EPOCH") if epoch: dt = _dt.datetime.fromtimestamp(int(epoch), _dt.timezone.utc) else: dt = _dt.datetime.now(_dt.timezone.utc) return dt.strftime("%Y-%m-%dT%H:%M:%SZ") def _extract_define(text: str, name: str) -> str: m = re.search(rf'#define\s+{re.escape(name)}\s+"([^"]*)"', text) return m.group(1) if m else "" def main() -> int: if len(sys.argv) != 7: print( "usage: generate_version_header.py