# -*- mode: python ; coding: utf-8 -*- from PyInstaller.utils.hooks import collect_all from pathlib import Path import os import sys import platform # ------------------------------------------------------------ # Project paths # ------------------------------------------------------------ project_root = Path(SPECPATH).resolve() src_dir = project_root / "src" # Ensure `src.*` imports work during analysis sys.path.insert(0, str(project_root)) # ------------------------------------------------------------ # Import version info # ------------------------------------------------------------ from src.version import APP_NAME, APP_VERSION, APP_AUTHOR APP_NAME = f"{APP_NAME}-client" # ------------------------------------------------------------ # PyInstaller data / imports # ------------------------------------------------------------ datas = [ ("resources", "resources"), ("src/engines/blender/scripts", "src/engines/blender/scripts"), ] binaries = [] hiddenimports = ["zeroconf", "src.version"] tmp_ret = collect_all("zeroconf") datas += tmp_ret[0] binaries += tmp_ret[1] hiddenimports += tmp_ret[2] # ------------------------------------------------------------ # Analysis # ------------------------------------------------------------ a = Analysis( ["client.py"], pathex=[str(project_root)], binaries=binaries, datas=datas, hiddenimports=hiddenimports, hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], noarchive=False, optimize=1, # optimize=2 breaks Windows builds ) pyz = PYZ(a.pure) # ------------------------------------------------------------ # Platform targets # ------------------------------------------------------------ if platform.system() == "Darwin": # macOS exe = EXE( pyz, a.scripts, [], exclude_binaries=True, name=APP_NAME, debug=False, bootloader_ignore_signals=False, strip=True, upx=True, console=False, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, ) app = BUNDLE( exe, a.binaries, a.datas, strip=True, name=f"{APP_NAME}.app", icon="resources/Server.png", bundle_identifier=None, version=APP_VERSION, ) elif platform.system() == "Windows": import pyinstaller_versionfile import tempfile version_file_path = os.path.join( tempfile.gettempdir(), "versionfile.txt" ) pyinstaller_versionfile.create_versionfile( output_file=version_file_path, version=APP_VERSION, company_name=APP_AUTHOR, file_description=APP_NAME, internal_name=APP_NAME, legal_copyright=f"© {APP_AUTHOR}", original_filename=f"{APP_NAME}.exe", product_name=APP_NAME, ) exe = EXE( pyz, a.scripts, a.binaries, a.datas, [], name=APP_NAME, debug=False, bootloader_ignore_signals=False, strip=True, upx=True, console=False, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, version=version_file_path, ) else: # Linux exe = EXE( pyz, a.scripts, a.binaries, a.datas, [], name=APP_NAME, debug=False, bootloader_ignore_signals=False, strip=True, upx=True, console=False, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, )