1#!/usr/bin/env python3 2# 3# Copyright (C) 2020 Red Hat, Inc. 4# 5# SPDX-License-Identifier: GPL-2.0-or-later 6 7import argparse 8import glob 9import os 10import shutil 11import subprocess 12import tempfile 13 14 15def signcode(path): 16 cmd = os.environ.get("SIGNCODE") 17 if not cmd: 18 return 19 subprocess.run([cmd, path]) 20 21 22def 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 77if __name__ == "__main__": 78 main() 79