75 lines
2.1 KiB
Python
75 lines
2.1 KiB
Python
#!/usr/bin/env python3
|
|
"""Generate a PyInstaller version-info file for ProxyChainManager.exe.
|
|
|
|
Usage:
|
|
python scripts/generate_version_info.py --version 1.2.3 --out build/version_info.txt
|
|
|
|
The output is consumed by ProxyChainManager.spec when the file exists.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import re
|
|
from pathlib import Path
|
|
|
|
|
|
def _parse_version(version: str) -> tuple[int, int, int, int]:
|
|
parts = re.findall(r"\d+", version)
|
|
nums = [int(x) for x in parts[:4]]
|
|
while len(nums) < 4:
|
|
nums.append(0)
|
|
return nums[0], nums[1], nums[2], nums[3]
|
|
|
|
|
|
def build_version_info(version: str, commit: str = "") -> str:
|
|
filevers = prodvers = _parse_version(version)
|
|
commit_suffix = f" ({commit})" if commit else ""
|
|
return f"""# UTF-8
|
|
# Generated by scripts/generate_version_info.py - do not edit by hand.
|
|
VSVersionInfo(
|
|
ffi=FixedFileInfo(
|
|
filevers={filevers},
|
|
prodvers={prodvers},
|
|
mask=0x3f,
|
|
flags=0x0,
|
|
OS=0x40004,
|
|
fileType=0x1,
|
|
subtype=0x0,
|
|
date=(0, 0)
|
|
),
|
|
kids=[
|
|
StringFileInfo(
|
|
[
|
|
StringTable(
|
|
u'040904B0',
|
|
[StringStruct(u'CompanyName', u'Proxy God'),
|
|
StringStruct(u'FileDescription', u'Proxy God - multi-hop proxy chain manager'),
|
|
StringStruct(u'FileVersion', u'{version}{commit_suffix}'),
|
|
StringStruct(u'InternalName', u'ProxyChainManager'),
|
|
StringStruct(u'LegalCopyright', u'MIT License'),
|
|
StringStruct(u'OriginalFilename', u'ProxyChainManager.exe'),
|
|
StringStruct(u'ProductName', u'Proxy God'),
|
|
StringStruct(u'ProductVersion', u'{version}{commit_suffix}')])
|
|
]
|
|
),
|
|
VarFileInfo([VarStruct(u'Translation', [1033, 1200])])
|
|
]
|
|
)
|
|
"""
|
|
|
|
|
|
def main() -> None:
|
|
ap = argparse.ArgumentParser()
|
|
ap.add_argument("--version", required=True)
|
|
ap.add_argument("--commit", default="")
|
|
ap.add_argument("--out", required=True)
|
|
args = ap.parse_args()
|
|
out = Path(args.out)
|
|
out.parent.mkdir(parents=True, exist_ok=True)
|
|
out.write_text(build_version_info(args.version, args.commit), encoding="utf-8")
|
|
print(f"Wrote {out}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|