Initial public release tree
This commit is contained in:
111
rectify.spec
Normal file
111
rectify.spec
Normal file
@@ -0,0 +1,111 @@
|
||||
# -*- mode: python ; coding: utf-8 -*-
|
||||
"""PyInstaller spec file for Rectify.
|
||||
|
||||
Build with:
|
||||
pyinstaller rectify.spec
|
||||
|
||||
Produces:
|
||||
dist/rectify/ (onedir bundle: launcher + all libs as real files)
|
||||
dist/rectify.exe (Windows single-file executable)
|
||||
dist/Rectify.app (macOS .app bundle, macOS only)
|
||||
|
||||
macOS uses a ONEDIR build (not onefile) on purpose: notarization requires
|
||||
every nested .dylib/.so to be individually code-signed, which is only
|
||||
possible when they sit on disk as real files rather than packed inside a
|
||||
single executable. UPX is disabled for the same reason — it rewrites
|
||||
Mach-O headers and invalidates signatures.
|
||||
|
||||
Signing and notarization are handled end-to-end by build_dmg.sh:
|
||||
./build_dmg.sh --sign "Developer ID Application: Andrew Kopra (KF3QXUS8G6)" \
|
||||
--notarize andykopra-notary
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
from PyInstaller.utils.hooks import collect_all
|
||||
|
||||
VERSION = '0.2.0'
|
||||
|
||||
# pillow-heif ships a native libheif and has no bundled PyInstaller hook,
|
||||
# so collect its binaries/data/submodules explicitly. (Verify on a real
|
||||
# build per platform — native HEIF libs are the fragile part of bundling.)
|
||||
_heif_datas, _heif_binaries, _heif_hidden = collect_all('pillow_heif')
|
||||
|
||||
a = Analysis(
|
||||
['rectify/__main__.py'],
|
||||
pathex=[],
|
||||
binaries=_heif_binaries,
|
||||
datas=_heif_datas,
|
||||
hiddenimports=[
|
||||
'PySide6.QtWidgets',
|
||||
'PySide6.QtGui',
|
||||
'PySide6.QtCore',
|
||||
'pillow_heif',
|
||||
'PIL.Image',
|
||||
'PIL.ImageCms',
|
||||
*_heif_hidden,
|
||||
],
|
||||
hookspath=[],
|
||||
hooksconfig={},
|
||||
runtime_hooks=[],
|
||||
excludes=[],
|
||||
noarchive=False,
|
||||
)
|
||||
|
||||
pyz = PYZ(a.pure)
|
||||
|
||||
exe = EXE(
|
||||
pyz,
|
||||
a.scripts,
|
||||
[],
|
||||
exclude_binaries=True, # onedir: keep libraries OUT of the executable so each
|
||||
# nested dylib/.so is a real, individually signable file
|
||||
name='rectify',
|
||||
debug=False,
|
||||
bootloader_ignore_signals=False,
|
||||
strip=False,
|
||||
upx=False, # UPX rewrites Mach-O headers and breaks code signing
|
||||
console=False, # GUI application — no console window
|
||||
icon=None, # TODO: add application icon (.ico for Windows, .icns for macOS)
|
||||
)
|
||||
|
||||
coll = COLLECT(
|
||||
exe,
|
||||
a.binaries,
|
||||
a.datas,
|
||||
strip=False,
|
||||
upx=False,
|
||||
upx_exclude=[],
|
||||
name='rectify',
|
||||
)
|
||||
|
||||
# macOS .app bundle (only used when building on macOS)
|
||||
if sys.platform == 'darwin':
|
||||
app = BUNDLE(
|
||||
coll,
|
||||
name='Rectify.app',
|
||||
icon='resources/Rectify.icns',
|
||||
bundle_identifier='com.andykopra.rectify',
|
||||
info_plist={
|
||||
'CFBundleName': 'Rectify',
|
||||
'CFBundleDisplayName': 'Rectify',
|
||||
'CFBundleShortVersionString': VERSION,
|
||||
'CFBundleVersion': VERSION,
|
||||
'NSHighResolutionCapable': True,
|
||||
# File type associations — allows "Open with" and drag-to-icon
|
||||
'CFBundleDocumentTypes': [
|
||||
{
|
||||
'CFBundleTypeName': 'Image',
|
||||
'CFBundleTypeRole': 'Editor',
|
||||
'LSHandlerRank': 'Alternate',
|
||||
'LSItemContentTypes': [
|
||||
'public.jpeg',
|
||||
'public.png',
|
||||
'public.tiff',
|
||||
'com.microsoft.bmp',
|
||||
'org.webmproject.webp',
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
)
|
||||
Reference in New Issue
Block a user