]>
Commit | Line | Data |
---|---|---|
8adfeba9 MAL |
1 | #!/usr/bin/env python3 |
2 | # | |
3 | # Copyright (C) 2020 Red Hat, Inc. | |
4 | # | |
5 | # SPDX-License-Identifier: GPL-2.0-or-later | |
6 | ||
7 | import argparse | |
8 | import glob | |
9 | import os | |
10 | import shutil | |
11 | import subprocess | |
12 | import tempfile | |
13 | ||
14 | ||
15 | def signcode(path): | |
16 | cmd = os.environ.get("SIGNCODE") | |
17 | if not cmd: | |
18 | return | |
19 | subprocess.run([cmd, path]) | |
20 | ||
21 | ||
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() | |
30 | ||
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: | |
37 | for exe in glob.glob( | |
38 | os.path.join(destdir + args.prefix, "qemu-system-*.exe") | |
39 | ): | |
40 | exe = os.path.basename(exe) | |
41 | arch = exe[12:-4] | |
42 | nsh.write( | |
43 | """ | |
44 | Section "{0}" Section_{0} | |
45 | SetOutPath "$INSTDIR" | |
46 | File "${{BINDIR}}\\{1}" | |
47 | SectionEnd | |
48 | """.format( | |
49 | arch, exe | |
50 | ) | |
51 | ) | |
52 | ||
53 | for exe in glob.glob(os.path.join(destdir + args.prefix, "*.exe")): | |
54 | signcode(exe) | |
55 | ||
56 | makensis = [ | |
57 | "makensis", | |
58 | "-V2", | |
59 | "-NOCD", | |
60 | "-DSRCDIR=" + args.srcdir, | |
61 | "-DBINDIR=" + destdir + args.prefix, | |
62 | ] | |
63 | dlldir = "w32" | |
64 | if args.cpu == "x86_64": | |
65 | dlldir = "w64" | |
66 | makensis += ["-DW64"] | |
67 | if os.path.exists(os.path.join(args.srcdir, "dll")): | |
68 | makensis += "-DDLLDIR={0}/dll/{1}".format(args.srcdir, dlldir) | |
69 | ||
70 | makensis += ["-DOUTFILE=" + args.outfile] + args.nsisargs | |
71 | subprocess.run(makensis) | |
72 | signcode(args.outfile) | |
73 | finally: | |
74 | shutil.rmtree(destdir) | |
75 | ||
76 | ||
77 | if __name__ == "__main__": | |
78 | main() |