icount: Take iothread lock when running QEMU timers
[qemu/ar7.git] / scripts / nsis.py
blob462d6cac3b62e936abc16fd7c60828cc46c2f443
1 #!/usr/bin/env python3
3 # Copyright (C) 2020 Red Hat, Inc.
5 # SPDX-License-Identifier: GPL-2.0-or-later
7 import argparse
8 import glob
9 import os
10 import shutil
11 import subprocess
12 import tempfile
15 def signcode(path):
16 cmd = os.environ.get("SIGNCODE")
17 if not cmd:
18 return
19 subprocess.run([cmd, path])
22 def main():
23 parser = argparse.ArgumentParser(description="QEMU NSIS build helper.")
24 parser.add_argument("outfile")
25 parser.add_argument("prefix")
26 parser.add_argument("srcdir")
27 parser.add_argument("cpu")
28 parser.add_argument("nsisargs", nargs="*")
29 args = parser.parse_args()
31 destdir = tempfile.mkdtemp()
32 try:
33 subprocess.run(["make", "install", "DESTDIR=" + destdir + os.path.sep])
34 with open(
35 os.path.join(destdir + args.prefix, "system-emulations.nsh"), "w"
36 ) as nsh, open(
37 os.path.join(destdir + args.prefix, "system-mui-text.nsh"), "w"
38 ) as muinsh:
39 for exe in sorted(glob.glob(
40 os.path.join(destdir + args.prefix, "qemu-system-*.exe")
41 )):
42 exe = os.path.basename(exe)
43 arch = exe[12:-4]
44 nsh.write(
45 """
46 Section "{0}" Section_{0}
47 SetOutPath "$INSTDIR"
48 File "${{BINDIR}}\\{1}"
49 SectionEnd
50 """.format(
51 arch, exe
54 if arch.endswith('w'):
55 desc = arch[:-1] + " emulation (GUI)."
56 else:
57 desc = arch + " emulation."
59 muinsh.write(
60 """
61 !insertmacro MUI_DESCRIPTION_TEXT ${{Section_{0}}} "{1}"
62 """.format(arch, desc))
64 for exe in glob.glob(os.path.join(destdir + args.prefix, "*.exe")):
65 signcode(exe)
67 makensis = [
68 "makensis",
69 "-V2",
70 "-NOCD",
71 "-DSRCDIR=" + args.srcdir,
72 "-DBINDIR=" + destdir + args.prefix,
74 dlldir = "w32"
75 if args.cpu == "x86_64":
76 dlldir = "w64"
77 makensis += ["-DW64"]
78 if os.path.exists(os.path.join(args.srcdir, "dll")):
79 makensis += ["-DDLLDIR={0}/dll/{1}".format(args.srcdir, dlldir)]
81 makensis += ["-DOUTFILE=" + args.outfile] + args.nsisargs
82 subprocess.run(makensis)
83 signcode(args.outfile)
84 finally:
85 shutil.rmtree(destdir)
88 if __name__ == "__main__":
89 main()