mirror of
https://github.com/jopohl/urh.git
synced 2026-03-03 06:54:00 +01:00
110 lines
2.9 KiB
Python
110 lines
2.9 KiB
Python
import os
|
|
import shutil
|
|
import sys
|
|
|
|
HIDDEN_IMPORTS = [
|
|
"packaging.specifiers",
|
|
"packaging.requirements",
|
|
"pkg_resources.py2_warn",
|
|
"numpy.core._methods",
|
|
"numpy.core._dtype_ctypes",
|
|
"numpy.random.common",
|
|
"numpy.random.entropy",
|
|
"numpy.random.bounded_integers",
|
|
]
|
|
DATA = [
|
|
("src/urh/dev/native/lib/shared", "."),
|
|
("src/urh/plugins", "urh/plugins"),
|
|
]
|
|
EXCLUDE = ["matplotlib"]
|
|
|
|
|
|
def run_pyinstaller(cmd_list: list, env: list = None):
|
|
cmd = " ".join(cmd_list)
|
|
print(cmd, flush=True)
|
|
|
|
env = [] if env is None else env
|
|
if env:
|
|
os.system(" ".join(env) + " " + cmd)
|
|
else:
|
|
os.system(cmd)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
cmd = ["pyinstaller", "--clean"]
|
|
if sys.platform == "darwin":
|
|
cmd.append("--onefile")
|
|
|
|
for hidden_import in HIDDEN_IMPORTS:
|
|
cmd.append("--hidden-import={}".format(hidden_import))
|
|
|
|
for src, dst in DATA:
|
|
cmd.append("--add-data")
|
|
cmd.append('"{}{}{}"'.format(src, os.pathsep, dst))
|
|
|
|
for exclude in EXCLUDE:
|
|
cmd.append("--exclude-module={}".format(exclude))
|
|
|
|
urh_path = os.path.realpath(os.path.join(os.path.dirname(__file__), ".."))
|
|
|
|
if sys.platform == "darwin":
|
|
cmd.append(
|
|
'--icon="{}"'.format(os.path.join(urh_path, "data/icons/appicon.icns"))
|
|
)
|
|
else:
|
|
cmd.append(
|
|
'--icon="{}"'.format(os.path.join(urh_path, "data/icons/appicon.ico"))
|
|
)
|
|
|
|
cmd.extend(["--distpath", "./pyinstaller"])
|
|
|
|
urh_cmd = cmd + [
|
|
"--name=urh",
|
|
"--windowed",
|
|
"--workpath",
|
|
"./urh_build",
|
|
os.path.join(urh_path, "src/urh/main.py"),
|
|
]
|
|
|
|
urh_debug_cmd = cmd + [
|
|
"--name=urh_debug",
|
|
"--workpath",
|
|
"./urh_debug_build",
|
|
os.path.join(urh_path, "src/urh/main.py"),
|
|
]
|
|
|
|
cli_cmd = cmd + [
|
|
"--workpath",
|
|
"./urh_cli_build",
|
|
os.path.join(urh_path, "src/urh/cli/urh_cli.py"),
|
|
]
|
|
|
|
os.makedirs("./pyinstaller")
|
|
if sys.platform == "darwin":
|
|
run_pyinstaller(
|
|
urh_cmd, env=["DYLD_LIBRARY_PATH=src/urh/dev/native/lib/shared"]
|
|
)
|
|
|
|
import plistlib
|
|
|
|
with open("pyinstaller/urh.app/Contents/Info.plist", "rb") as f:
|
|
p = plistlib.load(f)
|
|
p["NSHighResolutionCapable"] = True
|
|
p["NSRequiresAquaSystemAppearance"] = True
|
|
p[
|
|
"NSMicrophoneUsageDescription"
|
|
] = "URH needs access to your microphone to capture signals via Soundcard."
|
|
with open("pyinstaller/urh.app/Contents/Info.plist", "wb") as f:
|
|
plistlib.dump(p, f)
|
|
|
|
else:
|
|
for cmd in [urh_cmd, cli_cmd, urh_debug_cmd]:
|
|
run_pyinstaller(cmd)
|
|
|
|
shutil.copy(
|
|
"./pyinstaller/urh_cli/urh_cli.exe", "./pyinstaller/urh/urh_cli.exe"
|
|
)
|
|
shutil.copy(
|
|
"./pyinstaller/urh_debug/urh_debug.exe", "./pyinstaller/urh/urh_debug.exe"
|
|
)
|