Setup: update some stuff to 6.14.0 cx-Freeze (#1412)
* Setup: update some stuff to 6.14.0 cx-Freeze * Fix BuildCommand and replace include_files by cutom step * setup.py: bit more cleanup for extra_libs Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
This commit is contained in:
parent
86fb450ecc
commit
ba519fecd0
29
setup.py
29
setup.py
|
@ -12,6 +12,7 @@ from hashlib import sha3_512
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import setuptools
|
import setuptools
|
||||||
|
import setuptools.command.build
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import ModuleUpdate
|
import ModuleUpdate
|
||||||
|
@ -30,7 +31,7 @@ apworlds: set = {
|
||||||
# This is a bit jank. We need cx-Freeze to be able to run anything from this script, so install it
|
# This is a bit jank. We need cx-Freeze to be able to run anything from this script, so install it
|
||||||
import subprocess
|
import subprocess
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
requirement = 'cx-Freeze>=6.13.1'
|
requirement = 'cx-Freeze>=6.14.0'
|
||||||
try:
|
try:
|
||||||
pkg_resources.require(requirement)
|
pkg_resources.require(requirement)
|
||||||
import cx_Freeze
|
import cx_Freeze
|
||||||
|
@ -68,6 +69,7 @@ exes = [
|
||||||
]
|
]
|
||||||
|
|
||||||
extra_data = ["LICENSE", "data", "EnemizerCLI", "host.yaml", "SNI"]
|
extra_data = ["LICENSE", "data", "EnemizerCLI", "host.yaml", "SNI"]
|
||||||
|
extra_libs = ["libssl.so", "libcrypto.so"] if is_linux else []
|
||||||
|
|
||||||
|
|
||||||
def remove_sprites_from_folder(folder):
|
def remove_sprites_from_folder(folder):
|
||||||
|
@ -83,7 +85,7 @@ def _threaded_hash(filepath):
|
||||||
|
|
||||||
|
|
||||||
# cx_Freeze's build command runs other commands. Override to accept --yes and store that.
|
# cx_Freeze's build command runs other commands. Override to accept --yes and store that.
|
||||||
class BuildCommand(cx_Freeze.command.build.Build):
|
class BuildCommand(setuptools.command.build.build):
|
||||||
user_options = [
|
user_options = [
|
||||||
('yes', 'y', 'Answer "yes" to all questions.'),
|
('yes', 'y', 'Answer "yes" to all questions.'),
|
||||||
]
|
]
|
||||||
|
@ -107,6 +109,7 @@ class BuildExeCommand(cx_Freeze.command.build_exe.BuildEXE):
|
||||||
]
|
]
|
||||||
yes: bool
|
yes: bool
|
||||||
extra_data: Iterable # [any] not available in 3.8
|
extra_data: Iterable # [any] not available in 3.8
|
||||||
|
extra_libs: Iterable # work around broken include_files
|
||||||
|
|
||||||
buildfolder: Path
|
buildfolder: Path
|
||||||
libfolder: Path
|
libfolder: Path
|
||||||
|
@ -117,6 +120,7 @@ class BuildExeCommand(cx_Freeze.command.build_exe.BuildEXE):
|
||||||
super().initialize_options()
|
super().initialize_options()
|
||||||
self.yes = BuildCommand.last_yes
|
self.yes = BuildCommand.last_yes
|
||||||
self.extra_data = []
|
self.extra_data = []
|
||||||
|
self.extra_libs = []
|
||||||
|
|
||||||
def finalize_options(self):
|
def finalize_options(self):
|
||||||
super().finalize_options()
|
super().finalize_options()
|
||||||
|
@ -173,17 +177,22 @@ class BuildExeCommand(cx_Freeze.command.build_exe.BuildEXE):
|
||||||
self.buildtime = datetime.datetime.utcnow()
|
self.buildtime = datetime.datetime.utcnow()
|
||||||
super().run()
|
super().run()
|
||||||
|
|
||||||
# include_files seems to be broken with this setup. implement here
|
# include_files seems to not be done automatically. implement here
|
||||||
for src, dst in self.include_files:
|
for src, dst in self.include_files:
|
||||||
print('copying', src, '->', self.buildfolder / dst)
|
print(f"copying {src} -> {self.buildfolder / dst}")
|
||||||
|
shutil.copyfile(src, self.buildfolder / dst, follow_symlinks=False)
|
||||||
|
|
||||||
|
# now that include_files is completely broken, run find_libs here
|
||||||
|
for src, dst in find_libs(*self.extra_libs):
|
||||||
|
print(f"copying {src} -> {self.buildfolder / dst}")
|
||||||
shutil.copyfile(src, self.buildfolder / dst, follow_symlinks=False)
|
shutil.copyfile(src, self.buildfolder / dst, follow_symlinks=False)
|
||||||
|
|
||||||
# post build steps
|
# post build steps
|
||||||
if sys.platform == "win32": # kivy_deps is win32 only, linux picks them up automatically
|
if is_windows: # kivy_deps is win32 only, linux picks them up automatically
|
||||||
from kivy_deps import sdl2, glew
|
from kivy_deps import sdl2, glew
|
||||||
for folder in sdl2.dep_bins + glew.dep_bins:
|
for folder in sdl2.dep_bins + glew.dep_bins:
|
||||||
shutil.copytree(folder, self.libfolder, dirs_exist_ok=True)
|
shutil.copytree(folder, self.libfolder, dirs_exist_ok=True)
|
||||||
print('copying', folder, '->', self.libfolder)
|
print(f"copying {folder} -> {self.libfolder}")
|
||||||
|
|
||||||
for data in self.extra_data:
|
for data in self.extra_data:
|
||||||
self.installfile(Path(data))
|
self.installfile(Path(data))
|
||||||
|
@ -384,6 +393,9 @@ $APPDIR/$exe "$@"
|
||||||
|
|
||||||
def find_libs(*args: str) -> typing.Sequence[typing.Tuple[str, str]]:
|
def find_libs(*args: str) -> typing.Sequence[typing.Tuple[str, str]]:
|
||||||
"""Try to find system libraries to be included."""
|
"""Try to find system libraries to be included."""
|
||||||
|
if not args:
|
||||||
|
return []
|
||||||
|
|
||||||
arch = build_arch.replace('_', '-')
|
arch = build_arch.replace('_', '-')
|
||||||
libc = 'libc6' # we currently don't support musl
|
libc = 'libc6' # we currently don't support musl
|
||||||
|
|
||||||
|
@ -450,12 +462,13 @@ cx_Freeze.setup(
|
||||||
"pandas"],
|
"pandas"],
|
||||||
"zip_include_packages": ["*"],
|
"zip_include_packages": ["*"],
|
||||||
"zip_exclude_packages": ["worlds", "sc2"],
|
"zip_exclude_packages": ["worlds", "sc2"],
|
||||||
"include_files": find_libs("libssl.so", "libcrypto.so") if is_linux else [],
|
"include_files": [], # broken in cx 6.14.0, we use more special sauce now
|
||||||
"include_msvcr": False,
|
"include_msvcr": False,
|
||||||
"replace_paths": [("*", "")],
|
"replace_paths": ["*."],
|
||||||
"optimize": 1,
|
"optimize": 1,
|
||||||
"build_exe": buildfolder,
|
"build_exe": buildfolder,
|
||||||
"extra_data": extra_data,
|
"extra_data": extra_data,
|
||||||
|
"extra_libs": extra_libs,
|
||||||
"bin_includes": ["libffi.so", "libcrypt.so"] if is_linux else []
|
"bin_includes": ["libffi.so", "libcrypt.so"] if is_linux else []
|
||||||
},
|
},
|
||||||
"bdist_appimage": {
|
"bdist_appimage": {
|
||||||
|
|
Loading…
Reference in New Issue