Files

103 lines
3.0 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/env python3
"""
Generiert Windows-Versionsinformationen für PyInstaller
Liest Version aus pyproject.toml und erstellt version_info.txt
"""
import tomllib
from pathlib import Path
from datetime import datetime
def parse_version(version_str: str) -> tuple[int, int, int, int]:
"""Parst Version-String (z.B. '0.1.0') zu Tuple (0, 1, 0, 0)."""
parts = version_str.split('.')
major = int(parts[0]) if len(parts) > 0 else 0
minor = int(parts[1]) if len(parts) > 1 else 0
patch = int(parts[2]) if len(parts) > 2 else 0
build = 0 # Könnte aus Git-Commit-Count generiert werden
return (major, minor, patch, build)
def create_version_info(project_root: Path):
"""Erstellt version_info.txt für PyInstaller."""
# pyproject.toml lesen
pyproject_path = project_root / "pyproject.toml"
with open(pyproject_path, 'rb') as f:
pyproject = tomllib.load(f)
project = pyproject['project']
version = project['version']
name = project['name']
description = project['description']
# Version parsen
file_version = parse_version(version)
product_version = file_version
# Jahr für Copyright
year = datetime.now().year
# version_info.txt Content
version_info_content = f"""# UTF-8
#
# Generiert automatisch von create_version_info.py
# NICHT manuell bearbeiten!
#
VSVersionInfo(
ffi=FixedFileInfo(
# filevers und prodvers als Tuple: (1, 0, 0, 0)
filevers={file_version},
prodvers={product_version},
# Maske für gültige Bits in filevers und prodvers
mask=0x3f,
# Flags - kann VS_FF_DEBUG, VS_FF_PRERELEASE, etc. enthalten
flags=0x0,
# Betriebssystem - VOS_NT_WINDOWS32
OS=0x40004,
# Dateityp - VFT_APP (Anwendung)
fileType=0x1,
# Subtyp (nicht verwendet für VFT_APP)
subtype=0x0,
# Datumsstempel
date=(0, 0)
),
kids=[
StringFileInfo(
[
StringTable(
'040904B0', # Deutsch (0x0409 = Englisch, 0x0407 = Deutsch), Unicode
[StringStruct('CompanyName', 'Vitali Graf / Software- und Datenbankentwicklung'),
StringStruct('FileDescription', '{description}'),
StringStruct('FileVersion', '{version}'),
StringStruct('InternalName', '{name}'),
StringStruct('LegalCopyright', '© {year} Vitali Graf. Alle Rechte vorbehalten.'),
StringStruct('OriginalFilename', '{name}.exe'),
StringStruct('ProductName', '{name}'),
StringStruct('ProductVersion', '{version}')])
]),
VarFileInfo([VarStruct('Translation', [1033, 1200])]) # Englisch, Unicode
]
)
"""
# version_info.txt schreiben
version_info_path = project_root / "version_info.txt"
version_info_path.write_text(version_info_content, encoding='utf-8')
print("✓ version_info.txt erstellt")
print(f" Version: {version}")
print(f" Datei: {version_info_path}")
def main():
project_root = Path(__file__).parent
create_version_info(project_root)
if __name__ == "__main__":
main()