#!/usr/bin/env python3 """Generate runtime asset names and helpcode schemes from assets.json.""" import argparse import json from pathlib import Path from product import CONTRACT lines = ['// Generated by contracts/assets/generate.py; edit assets.json instead.', '#pragma once', '#include ', '#include ', 'namespace metasequoia::assets {', f'inline constexpr int contract_version = {CONTRACT["contract_version"]};'] for entry in CONTRACT['assets']: lines.append(f'inline constexpr char {entry["id"]}[] = {json.dumps(entry["path"])};') helpcodes = [entry for entry in CONTRACT['assets'] if 'schema' in entry] lines += ['struct Helpcode { std::string_view schema; const char *path; };', f'inline constexpr std::array helpcodes = {{{{'] lines += [f' {{{json.dumps(entry["schema"])}, {entry["id"]}}},' for entry in helpcodes] lines += ['}};', '} // namespace metasequoia::assets', ''] expected = '\n'.join(lines) parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('--check', action='store_true') args = parser.parse_args() target = Path(__file__).with_name('assets.h') if args.check: if not target.exists() or target.read_text() != expected: raise SystemExit('Assets header is stale; run contracts/assets/generate.py') else: target.write_text(expected)