mirror of
https://github.com/Flowseal/tg-ws-proxy.git
synced 2026-09-05 18:16:11 +03:00
122 lines
3.2 KiB
Python
122 lines
3.2 KiB
Python
# -*- mode: python ; coding: utf-8 -*-
|
|
|
|
import os
|
|
import glob
|
|
|
|
from PyInstaller.utils.hooks import collect_data_files
|
|
|
|
block_cipher = None
|
|
|
|
# customtkinter ships JSON themes + assets that must be bundled
|
|
import customtkinter
|
|
ctk_path = os.path.dirname(customtkinter.__file__)
|
|
certifi_datas = collect_data_files('certifi')
|
|
|
|
_i18n_path = os.path.join(os.path.dirname(SPEC), os.pardir, 'ui', 'i18n')
|
|
|
|
appindicator_binaries = [
|
|
(path, '.')
|
|
for pattern in ('/usr/lib/*/libappindicator3.so.1',
|
|
'/usr/lib/libappindicator3.so.1', '/usr/lib64/libappindicator3.so.1')
|
|
for path in glob.glob(pattern)
|
|
]
|
|
|
|
a = Analysis(
|
|
[os.path.join(os.path.dirname(SPEC), os.pardir, 'linux.py')],
|
|
pathex=[],
|
|
binaries=appindicator_binaries,
|
|
datas=[(ctk_path, 'customtkinter/'), (_i18n_path, 'ui/i18n')] + certifi_datas,
|
|
hiddenimports=[
|
|
'pystray._appindicator',
|
|
'PIL._tkinter_finder',
|
|
'customtkinter',
|
|
'cryptography.hazmat.primitives.ciphers',
|
|
'cryptography.hazmat.primitives.ciphers.algorithms',
|
|
'cryptography.hazmat.primitives.ciphers.modes',
|
|
'cryptography.hazmat.backends.openssl',
|
|
'gi',
|
|
'gi.repository.GLib',
|
|
'gi.repository.GObject',
|
|
'gi.repository.Gtk',
|
|
'gi.repository.Gdk',
|
|
'gi.repository.DBus',
|
|
'gi.repository.AppIndicator3',
|
|
'gi.repository.AyatanaAppIndicator3',
|
|
],
|
|
hookspath=[],
|
|
hooksconfig={
|
|
'gi': {
|
|
'icons': [],
|
|
'themes': [],
|
|
'languages': ['en', 'ru'],
|
|
},
|
|
},
|
|
runtime_hooks=[],
|
|
excludes=[
|
|
'PIL._avif',
|
|
'PIL._webp',
|
|
'PIL._imagingtk',
|
|
],
|
|
noarchive=False,
|
|
cipher=block_cipher,
|
|
)
|
|
|
|
_required_libraries = {
|
|
'libglib-2.0.so.0', 'libgobject-2.0.so.0', 'libgio-2.0.so.0',
|
|
'libgtk-3.so.0', 'libappindicator3.so.1',
|
|
'libayatana-appindicator3.so.1',
|
|
}
|
|
_required_typelibs = {
|
|
'AppIndicator3-0.1.typelib', 'AyatanaAppIndicator3-0.1.typelib', 'DBus-1.0.typelib',
|
|
}
|
|
_bundled_libraries = {
|
|
os.path.basename(name)
|
|
for name, _, kind in a.binaries + a.datas
|
|
if kind in ('BINARY', 'SYMLINK')
|
|
}
|
|
_missing = (
|
|
_required_libraries - _bundled_libraries
|
|
) | (
|
|
_required_typelibs - {os.path.basename(name) for name, _, _ in a.datas}
|
|
)
|
|
if _missing:
|
|
raise RuntimeError('Incomplete Linux GI bundle: ' + ', '.join(sorted(_missing)))
|
|
|
|
_PIL_EXCLUDE_PYDS = {
|
|
'_avif', '_webp', '_imagingtk',
|
|
'FpxImagePlugin', 'MicImagePlugin',
|
|
}
|
|
a.binaries = [
|
|
(name, path, typ)
|
|
for name, path, typ in a.binaries
|
|
if not any(ex in name for ex in _PIL_EXCLUDE_PYDS)
|
|
]
|
|
|
|
icon_path = os.path.join(os.path.dirname(SPEC), os.pardir, 'icon.ico')
|
|
if os.path.exists(icon_path):
|
|
a.datas += [('icon.ico', icon_path, 'DATA')]
|
|
|
|
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
|
|
|
|
exe = EXE(
|
|
pyz,
|
|
a.scripts,
|
|
a.binaries,
|
|
a.zipfiles,
|
|
a.datas,
|
|
[],
|
|
name='TgWsProxy',
|
|
debug=False,
|
|
bootloader_ignore_signals=False,
|
|
strip=True,
|
|
upx=True,
|
|
upx_exclude=[],
|
|
runtime_tmpdir=None,
|
|
console=False,
|
|
disable_windowed_traceback=False,
|
|
argv_emulation=False,
|
|
target_arch=None,
|
|
codesign_identity=None,
|
|
entitlements_file=None,
|
|
)
|