129 lines
3.5 KiB
Python
129 lines
3.5 KiB
Python
import glob
|
|
|
|
import setuptools # noqa
|
|
|
|
import os
|
|
import shutil
|
|
from distutils.core import Command
|
|
from importlib.metadata import version
|
|
from pathlib import Path
|
|
|
|
from cx_Freeze import setup, Executable
|
|
|
|
# We don't need any of these and they make the archive huge.
|
|
TO_DELETE = [
|
|
"lib/PySide6/Qt6DRender.pyd",
|
|
"lib/PySide6/Qt63DRender.dll",
|
|
"lib/PySide6/Qt6Charts.dll",
|
|
"lib/PySide6/Qt6Location.dll",
|
|
"lib/PySide6/Qt6Pdf.dll",
|
|
"lib/PySide6/Qt6Quick.dll",
|
|
"lib/PySide6/Qt6WebEngineCore.dll",
|
|
"lib/PySide6/QtCharts.pyd",
|
|
"lib/PySide6/QtMultimedia.pyd",
|
|
"lib/PySide6/QtOpenGLFunctions.pyd",
|
|
"lib/PySide6/QtOpenGLFunctions.pyi",
|
|
"lib/PySide6/d3dcompiler_47.dll",
|
|
"lib/PySide6/opengl32sw.dll",
|
|
"lib/PySide6/lupdate.exe",
|
|
"lib/PySide6/translations",
|
|
"lib/aiohttp/_find_header.c",
|
|
"lib/aiohttp/_frozenlist.c",
|
|
"lib/aiohttp/_helpers.c",
|
|
"lib/aiohttp/_http_parser.c",
|
|
"lib/aiohttp/_http_writer.c",
|
|
"lib/aiohttp/_websocket.c",
|
|
# Improve this to work with different versions.
|
|
"lib/aiohttp/python3*.dll",
|
|
"lib/lazy_object_proxy/python3*.dll",
|
|
"lib/lxml/python3*.dll",
|
|
"lib/markupsafe/python3*.dll",
|
|
"lib/multidict/python3*.dll",
|
|
"lib/numpy/core/python3*.dll",
|
|
"lib/numpy/fft/python3*.dll",
|
|
"lib/numpy/linalg/python3*.dll",
|
|
"lib/numpy/random/python3*.dll",
|
|
"lib/python3*.dll",
|
|
"lib/recordclass/python3*.dll",
|
|
"lib/regex/python3*.dll",
|
|
"lib/test",
|
|
"lib/yarl/python3*.dll",
|
|
]
|
|
|
|
COPY_TO_ZIP = [
|
|
"LICENSE.txt",
|
|
"README.md",
|
|
"NOTICE.md",
|
|
# Must have been generated with pip-licenses before. Many dependencies
|
|
# require their license to be distributed with their binaries.
|
|
"lib_licenses.txt",
|
|
]
|
|
|
|
|
|
BASE_DIR = Path(__file__).parent.absolute()
|
|
|
|
|
|
class FinalizeCXFreezeCommand(Command):
|
|
description = "Prepare cx_Freeze build dirs and create a zip"
|
|
user_options = []
|
|
|
|
def initialize_options(self) -> None:
|
|
pass
|
|
|
|
def finalize_options(self) -> None:
|
|
pass
|
|
|
|
def run(self):
|
|
(BASE_DIR / "dist").mkdir(exist_ok=True)
|
|
for path in (BASE_DIR / "build").iterdir():
|
|
if path.name.startswith("exe.") and path.is_dir():
|
|
for cleanse_suffix in TO_DELETE:
|
|
cleanse_path = path / cleanse_suffix
|
|
for globbed in glob.glob(str(cleanse_path)):
|
|
shutil.rmtree(globbed, ignore_errors=True)
|
|
try:
|
|
os.unlink(globbed)
|
|
except:
|
|
pass
|
|
for to_copy in COPY_TO_ZIP:
|
|
shutil.copy(BASE_DIR / to_copy, path / to_copy)
|
|
shutil.copytree(BASE_DIR / "addon_examples", path / "addon_examples")
|
|
zip_path = BASE_DIR / "dist" / path.name
|
|
shutil.make_archive(zip_path, "zip", path)
|
|
|
|
|
|
options = {
|
|
"build_exe": {
|
|
"packages": [
|
|
"passlib",
|
|
"_cffi_backend",
|
|
"hippolyzer",
|
|
"mitmproxy_windows",
|
|
],
|
|
# exclude packages that are not really needed
|
|
"excludes": [
|
|
"tkinter",
|
|
],
|
|
"include_msvcr": True,
|
|
}
|
|
}
|
|
|
|
executables = [
|
|
Executable(
|
|
"hippolyzer/apps/proxy_gui.py",
|
|
base=None,
|
|
target_name="hippolyzer_gui"
|
|
),
|
|
]
|
|
|
|
setup(
|
|
name="hippolyzer_gui",
|
|
version=version("hippolyzer"),
|
|
description="Hippolyzer GUI",
|
|
options=options,
|
|
executables=executables,
|
|
cmdclass={
|
|
"finalize_cxfreeze": FinalizeCXFreezeCommand,
|
|
}
|
|
)
|