"""Baut den Desktop-Client fuer das aktuelle Betriebssystem (PyInstaller kann nicht cross-kompilieren). python build.py Ergebnis in dist/: Windows dist/NetClip/NetClip.exe -> danach packaging/windows-installer.iss mit Inno Setup bauen macOS dist/NetClip.app -> zusaetzlich dist/NetClip-macos.zip Linux dist/NetClip/NetClip -> zusaetzlich dist/NetClip-linux-x86_64.tar.gz """ import platform import shutil import subprocess import sys from pathlib import Path ROOT = Path(__file__).resolve().parent def main(): if "--no-install" not in sys.argv: subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", "requirements.txt", "pyinstaller"], cwd=ROOT) if platform.system() == "Windows" and not (ROOT / "packaging" / "netclip.ico").exists(): make_ico() subprocess.check_call([sys.executable, "-m", "PyInstaller", "--noconfirm", "--clean", "netclip.spec"], cwd=ROOT) dist = ROOT / "dist" system = platform.system() if system == "Darwin": shutil.make_archive(str(dist / "NetClip-macos"), "zip", dist, "NetClip.app") elif system == "Linux": shutil.copy(ROOT / "packaging" / "netclip.desktop", dist / "NetClip") shutil.copy(ROOT / "packaging" / "install-linux.sh", dist / "NetClip") shutil.make_archive(str(dist / f"NetClip-linux-{platform.machine()}"), "gztar", dist, "NetClip") print("Fertig:", dist) def make_ico(): """Erzeugt packaging/netclip.ico aus dem gezeichneten App-Symbol.""" from PySide6.QtWidgets import QApplication sys.path.insert(0, str(ROOT)) app = QApplication.instance() or QApplication([]) # noqa: F841 from netclip.ui import app_icon app_icon().pixmap(256, 256).save(str(ROOT / "packaging" / "netclip.ico")) if __name__ == "__main__": main()