mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-09-06 18:05:37 +00:00
![Peter Maydell](/assets/img/avatar_default.png)
We use the nsis.py script to write out an installer script Section for each emulator executable, so the exact set of Sections depends on which executables were built. However the part of qemu.nsi which specifies mouse-over descriptions for each Section still has a hard-coded and very outdated list (with just i386 and alpha). This causes two problems. Firstly, if you build the installer for a configuration where you didn't build the i386 binaries you get warnings like this: warning 6000: unknown variable/constant "{Section_i386}" detected, ignoring (macro:_==:1) warning 6000: unknown variable/constant "{Section_i386w}" detected, ignoring (macro:_==:1) (this happens in our gitlab CI jobs, for instance). Secondly, most of the emulators in the generated installer don't have any mouseover text. Make nsis.py generate a second output file which has the necessary MUI_DESCRIPTION_TEXT lines for each Section it creates, so we can include that at the right point in qemu.nsi to set the mouse-over text. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: John Snow <jsnow@redhat.com> Message-id: 20220305105743.2384766-4-peter.maydell@linaro.org
90 lines
2.5 KiB
Python
90 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
#
|
|
# Copyright (C) 2020 Red Hat, Inc.
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
import argparse
|
|
import glob
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
import tempfile
|
|
|
|
|
|
def signcode(path):
|
|
cmd = os.environ.get("SIGNCODE")
|
|
if not cmd:
|
|
return
|
|
subprocess.run([cmd, path])
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="QEMU NSIS build helper.")
|
|
parser.add_argument("outfile")
|
|
parser.add_argument("prefix")
|
|
parser.add_argument("srcdir")
|
|
parser.add_argument("cpu")
|
|
parser.add_argument("nsisargs", nargs="*")
|
|
args = parser.parse_args()
|
|
|
|
destdir = tempfile.mkdtemp()
|
|
try:
|
|
subprocess.run(["make", "install", "DESTDIR=" + destdir + os.path.sep])
|
|
with open(
|
|
os.path.join(destdir + args.prefix, "system-emulations.nsh"), "w"
|
|
) as nsh, open(
|
|
os.path.join(destdir + args.prefix, "system-mui-text.nsh"), "w"
|
|
) as muinsh:
|
|
for exe in sorted(glob.glob(
|
|
os.path.join(destdir + args.prefix, "qemu-system-*.exe")
|
|
)):
|
|
exe = os.path.basename(exe)
|
|
arch = exe[12:-4]
|
|
nsh.write(
|
|
"""
|
|
Section "{0}" Section_{0}
|
|
SetOutPath "$INSTDIR"
|
|
File "${{BINDIR}}\\{1}"
|
|
SectionEnd
|
|
""".format(
|
|
arch, exe
|
|
)
|
|
)
|
|
if arch.endswith('w'):
|
|
desc = arch[:-1] + " emulation (GUI)."
|
|
else:
|
|
desc = arch + " emulation."
|
|
|
|
muinsh.write(
|
|
"""
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${{Section_{0}}} "{1}"
|
|
""".format(arch, desc))
|
|
|
|
for exe in glob.glob(os.path.join(destdir + args.prefix, "*.exe")):
|
|
signcode(exe)
|
|
|
|
makensis = [
|
|
"makensis",
|
|
"-V2",
|
|
"-NOCD",
|
|
"-DSRCDIR=" + args.srcdir,
|
|
"-DBINDIR=" + destdir + args.prefix,
|
|
]
|
|
dlldir = "w32"
|
|
if args.cpu == "x86_64":
|
|
dlldir = "w64"
|
|
makensis += ["-DW64"]
|
|
if os.path.exists(os.path.join(args.srcdir, "dll")):
|
|
makensis += ["-DDLLDIR={0}/dll/{1}".format(args.srcdir, dlldir)]
|
|
|
|
makensis += ["-DOUTFILE=" + args.outfile] + args.nsisargs
|
|
subprocess.run(makensis)
|
|
signcode(args.outfile)
|
|
finally:
|
|
shutil.rmtree(destdir)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|