summaryrefslogtreecommitdiffstats
path: root/packaging/nsis/windeployqt-to-nsis.py
diff options
context:
space:
mode:
Diffstat (limited to 'packaging/nsis/windeployqt-to-nsis.py')
-rw-r--r--packaging/nsis/windeployqt-to-nsis.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/packaging/nsis/windeployqt-to-nsis.py b/packaging/nsis/windeployqt-to-nsis.py
new file mode 100644
index 00000000..2881f315
--- /dev/null
+++ b/packaging/nsis/windeployqt-to-nsis.py
@@ -0,0 +1,91 @@
+#!/bin/env python3
+
+# windeployqt-to-nsh
+#
+# Windeployqt-to-nsh - Convert the output of windeployqt to an equivalent set of
+# NSIS "File" function calls.
+#
+# Rewritten in python from windeployqt-to-nsis.ps1, that has the following copyright:
+#
+# Copyright 2014 Gerald Combs <gerald@wireshark.org>
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import sys
+import os
+import argparse
+import subprocess
+
+parser = argparse.ArgumentParser()
+group = parser.add_mutually_exclusive_group(required=True)
+group.add_argument('--mapping')
+group.add_argument('--executable')
+parser.add_argument('--sysroot')
+parser.add_argument('outfile')
+args = parser.parse_args()
+
+if args.mapping:
+ if not args.sysroot:
+ sys.exit('Option --sysroot is required with option --mapping')
+ qt_version = None
+ with open(args.mapping, 'r', encoding='utf-8') as f:
+ out = f.read()
+else:
+ # Qt version
+ qmake_command = [
+ 'qmake6.exe',
+ '-query', 'QT_VERSION'
+ ]
+ qmake_out = subprocess.run(qmake_command, check=True, capture_output=True, encoding="utf-8")
+ qt_version = qmake_out.stdout.strip()
+
+ # XXX The powershell script asserts that the Qt version is greater than 5.3. We already require Qt6 to build the
+ # installer using MSYS2 (currently not enforced).
+
+ # Windeployqt output
+ windeploy_command = [
+ "windeployqt6.exe",
+ "--no-compiler-runtime",
+ "--no-translations",
+ "--list", "mapping",
+ args.executable
+ ]
+ out = subprocess.run(windeploy_command, check=True, capture_output=True, encoding="utf-8").stdout
+
+with open(args.outfile, 'w') as f:
+ header = """\
+#
+# Automatically generated by {}
+#""".format(parser.prog)
+
+ if qt_version:
+ header += """\
+# Qt version {}
+#""".format(qt_version)
+
+ print(header, file=f)
+
+ current_dir = ""
+ for line in out.splitlines():
+ line = line.strip()
+ if not line or line.startswith('#'):
+ continue
+ path, relative = line.split(" ")
+ rel_path = os.path.split(relative)
+ if len(rel_path) > 1:
+ base_dir = rel_path[0].strip('"')
+ if base_dir != current_dir:
+ set_out_path = 'SetOutPath "$INSTDIR\{}"'.format(base_dir)
+ print(set_out_path, file=f)
+ current_dir = base_dir
+
+ path = path.strip('"')
+ if args.sysroot:
+ path = os.path.join(args.sysroot, path)
+ file_path = 'File "{}"'.format(path)
+ print(file_path, file=f)
+