aboutsummaryrefslogtreecommitdiffstats
path: root/share/qbs/modules/cpp/MingwBaseModule.qbs
diff options
context:
space:
mode:
Diffstat (limited to 'share/qbs/modules/cpp/MingwBaseModule.qbs')
-rw-r--r--share/qbs/modules/cpp/MingwBaseModule.qbs115
1 files changed, 115 insertions, 0 deletions
diff --git a/share/qbs/modules/cpp/MingwBaseModule.qbs b/share/qbs/modules/cpp/MingwBaseModule.qbs
new file mode 100644
index 000000000..60ad28b08
--- /dev/null
+++ b/share/qbs/modules/cpp/MingwBaseModule.qbs
@@ -0,0 +1,115 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing
+**
+** This file is part of Qbs.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms and
+** conditions see http://www.qt.io/terms-conditions. For further information
+** use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+
+import qbs.TextFile
+import qbs.Utilities
+import qbs.WindowsUtils
+
+import "setuprunenv.js" as SetupRunEnv
+
+GenericGCC {
+ condition: false
+
+ staticLibraryPrefix: "lib"
+ staticLibrarySuffix: ".a"
+ dynamicLibrarySuffix: ".dll"
+ executableSuffix: ".exe"
+ debugInfoSuffix: ".debug"
+ imageFormat: "pe"
+ windowsApiCharacterSet: "unicode"
+ platformDefines: base.concat(WindowsUtils.characterSetDefines(windowsApiCharacterSet))
+ .concat("WIN32")
+
+ Properties {
+ condition: product.multiplexByQbsProperties.contains("buildVariants")
+ && qbs.buildVariants && qbs.buildVariants.length > 1
+ && qbs.buildVariant !== "release"
+ && product.type.containsAny(["staticlibrary", "dynamiclibrary"])
+ variantSuffix: "d"
+ }
+
+ FileTagger {
+ patterns: ["*.manifest"]
+ fileTags: ["native.pe.manifest"]
+ }
+
+ FileTagger {
+ patterns: ["*.rc"]
+ fileTags: ["rc"]
+ }
+
+ Rule {
+ inputs: ["native.pe.manifest"]
+ multiplex: true
+
+ outputFileTags: ["rc"]
+ outputArtifacts: {
+ if (product.type.containsAny(["application", "dynamiclibrary"])) {
+ return [{
+ filePath: input.completeBaseName + ".rc",
+ fileTags: ["rc"]
+ }];
+ }
+ return [];
+ }
+
+ prepare: {
+ var inputList = inputs["native.pe.manifest"];
+ // TODO: Emulate manifest merging like Microsoft's mt.exe tool does
+ if (inputList.length !== 1) {
+ throw("The MinGW toolchain does not support manifest merging; " +
+ "you may only specify a single manifest file to embed into your assembly.");
+ }
+
+ var cmd = new JavaScriptCommand();
+ cmd.silent = true;
+ cmd.productType = product.type;
+ cmd.inputFilePath = inputList[0].filePath;
+ cmd.outputFilePath = output.filePath;
+ cmd.sourceCode = function() {
+ var tf;
+ try {
+ tf = new TextFile(outputFilePath, TextFile.WriteOnly);
+ if (productType.contains("application"))
+ tf.write("1 "); // CREATEPROCESS_MANIFEST_RESOURCE_ID
+ else if (productType.contains("dynamiclibrary"))
+ tf.write("2 "); // ISOLATIONAWARE_MANIFEST_RESOURCE_ID
+ tf.write("24 "); // RT_MANIFEST
+ tf.writeLine(Utilities.cStringQuote(inputFilePath));
+ } finally {
+ if (tf)
+ tf.close();
+ }
+ };
+ return [cmd];
+ }
+ }
+}
+