mirror of
https://github.com/codex-storage/deluge.git
synced 2025-01-11 20:14:13 +00:00
e75ef7e31f
This makes the process of editing the file much more pleasant and removes duplicate code. Fixed collecting twisted package which brings both build speed improvements but also decreases package size, as it stops PyInstaller from bundling tests (actually, some tests might even execute during import and break build if they're designed to throw!) used by PyInstaller Closes: https://github.com/deluge-torrent/deluge/pull/342
201 lines
4.4 KiB
Python
201 lines
4.4 KiB
Python
# -*- mode: python ; coding: utf-8 -*-
|
|
import os
|
|
import sys
|
|
import deluge.common
|
|
from PyInstaller.utils.hooks import collect_all, collect_submodules, copy_metadata
|
|
|
|
datas = []
|
|
binaries = []
|
|
hiddenimports = ['pygame']
|
|
|
|
# Collect Meta Data
|
|
datas += copy_metadata('deluge', recursive=True)
|
|
datas += copy_metadata('service-identity', recursive=True)
|
|
|
|
# Add Deluge Hidden Imports
|
|
hiddenimports += collect_submodules('deluge')
|
|
|
|
# Add stdlib as Hidden Imports.
|
|
# This is filtered list that excludes some common examples or stuff not useful in plugins (such as tty, mailbox, turtledemo etc.).
|
|
# It is safe to assume that 90% of that list would already be included anyway.
|
|
stdlib = [
|
|
'string',
|
|
're',
|
|
'unicodedata',
|
|
'struct',
|
|
'codecs',
|
|
'datetime',
|
|
'zoneinfo',
|
|
'calendar',
|
|
'collections',
|
|
'array',
|
|
'weakref',
|
|
'types',
|
|
'copy',
|
|
'enum',
|
|
'numbers',
|
|
'math',
|
|
'cmath',
|
|
'decimal',
|
|
'fractions',
|
|
'random',
|
|
'statistics',
|
|
'itertools',
|
|
'functools',
|
|
'operator',
|
|
'pathlib',
|
|
'fileinput',
|
|
'stat',
|
|
'tempfile',
|
|
'glob',
|
|
'fnmatch',
|
|
'shutil',
|
|
'pickle',
|
|
'copyreg',
|
|
'shelve',
|
|
'marshal',
|
|
'dom',
|
|
'sqlite3',
|
|
'zlib',
|
|
'gzip',
|
|
'bz2',
|
|
'lzma',
|
|
'csv',
|
|
'hashlib',
|
|
'hmac',
|
|
'secrets',
|
|
'os',
|
|
'io',
|
|
'time',
|
|
'logging',
|
|
'platform',
|
|
'errno',
|
|
'queue',
|
|
'socket',
|
|
'ssl',
|
|
'email',
|
|
'json',
|
|
'mimetypes',
|
|
'base64',
|
|
'binhex',
|
|
'binascii',
|
|
'quopri',
|
|
'uu',
|
|
'html',
|
|
'xml',
|
|
'urllib',
|
|
'http',
|
|
'ftplib',
|
|
'smtplib',
|
|
'uuid',
|
|
'xmlrpc.client',
|
|
'ipaddress',
|
|
'locale',
|
|
'sys',
|
|
]
|
|
for module in stdlib:
|
|
hiddenimports += collect_submodules(module, filter=lambda name: 'test' not in name)
|
|
|
|
# Add Hidden Imports for Plugins
|
|
hiddenimports += collect_submodules('twisted', filter=lambda name: 'test' not in name)
|
|
datas += copy_metadata('twisted', recursive=True)
|
|
|
|
# Copy UI/Plugin files to where pyinstaller expects
|
|
datas += [('../../deluge/ui', 'deluge/ui'), ('../../deluge/plugins', 'deluge/plugins')]
|
|
|
|
# List of executables to produce
|
|
executables = {
|
|
'deluge-script.pyw': {
|
|
'name': 'deluge',
|
|
'console': False,
|
|
'gtk': True,
|
|
},
|
|
'deluge-gtk-script.pyw': {
|
|
'name': 'deluge-gtk',
|
|
'console': False,
|
|
'gtk': True,
|
|
},
|
|
'deluge-debug-script.py': {
|
|
'name': 'deluge-debug',
|
|
'console': True,
|
|
'gtk': True,
|
|
},
|
|
'deluge-console-script.py': {
|
|
'name': 'deluge-console',
|
|
'console': True,
|
|
'gtk': False,
|
|
},
|
|
'deluged-script.py': {
|
|
'name': 'deluged',
|
|
'console': False,
|
|
'gtk': False,
|
|
},
|
|
'deluged-debug-script.py': {
|
|
'name': 'deluged-debug',
|
|
'console': True,
|
|
'gtk': False,
|
|
},
|
|
'deluge-web-debug-script.py': {
|
|
'name': 'deluge-web-debug',
|
|
'console': False,
|
|
'gtk': False,
|
|
},
|
|
'deluge-web-script.py': {
|
|
'name': 'deluge-web',
|
|
'console': True,
|
|
'gtk': False,
|
|
},
|
|
}
|
|
|
|
analysis = {}
|
|
exe = {}
|
|
coll = []
|
|
|
|
# Perform analysis
|
|
for e, d in executables.items():
|
|
runtime_hooks = []
|
|
if d['gtk']:
|
|
runtime_hooks += [os.path.join(SPECPATH, 'pyi_rth_gtk_csd.py')]
|
|
|
|
analysis[e] = Analysis(
|
|
[os.path.abspath(os.path.join(HOMEPATH, os.pardir, os.pardir, 'Scripts', e))],
|
|
pathex=[],
|
|
binaries=binaries,
|
|
datas=datas,
|
|
hiddenimports=hiddenimports,
|
|
hookspath=[],
|
|
hooksconfig={},
|
|
runtime_hooks=runtime_hooks,
|
|
excludes=[],
|
|
win_no_prefer_redirects=False,
|
|
win_private_assemblies=False,
|
|
cipher=None,
|
|
noarchive=False,
|
|
)
|
|
|
|
# Executable
|
|
for e, d in executables.items():
|
|
exe[e] = EXE(
|
|
PYZ(analysis[e].pure, analysis[e].zipped_data, cipher=None),
|
|
analysis[e].scripts,
|
|
[],
|
|
exclude_binaries=True,
|
|
name=d['name'],
|
|
debug=False,
|
|
bootloader_ignore_signals=False,
|
|
strip=False,
|
|
upx=True,
|
|
icon='../../deluge/ui/data/pixmaps/deluge.ico',
|
|
console=d['console'],
|
|
disable_windowed_traceback=False,
|
|
target_arch=None,
|
|
codesign_identity=None,
|
|
entitlements_file=None,
|
|
)
|
|
|
|
# Collect
|
|
for e, d in executables.items():
|
|
coll += exe[e], analysis[e].binaries, analysis[e].zipfiles, analysis[e].datas
|
|
|
|
COLLECT(*coll, strip=False, upx=True, upx_exclude=[], name='Deluge')
|