Marc-André Lureau | 8adfeba | 2020-08-26 15:04:19 +0400 | [diff] [blame] | 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")): |
Stefan Weil | 933c8fe | 2020-11-17 20:06:40 +0100 | [diff] [blame] | 68 | makensis += ["-DDLLDIR={0}/dll/{1}".format(args.srcdir, dlldir)] |
Marc-André Lureau | 8adfeba | 2020-08-26 15:04:19 +0400 | [diff] [blame] | 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() |