aboutsummaryrefslogtreecommitdiffstats
path: root/share/qbs/module-providers/Qt/templates/quick.js
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2019-01-18 16:02:43 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2019-02-12 09:12:39 +0000
commitc4e60ed8283aa7a86e13c09113e7fec6bf41cc42 (patch)
tree6cefbf3ece17e255c3962e69573abc88bef060ef /share/qbs/module-providers/Qt/templates/quick.js
parent17058d1fc537e40e7dda9d6e48ccfb24ea1220f7 (diff)
Detect Qt via a module provider
Creation of qbs modules for Qt is now done on demand during project resolving. The qmake executable(s) are looked up via PATH or taken from the Qt.qmakeFilePaths provider property. As a result, Qt projects can now be built without a profile. The qtprofilesetup library is gone; its code is now in the module provider. I kept the C++ -> JavaScript conversion as straightforward as possible and mostly resisted the temptation to "optimize". The setup-qt tool still exists and mainly sets Qt.qmakeFilePaths. [ChangeLog] It is no longer required to call setup-qt before building Qt projects. Change-Id: I5b7e4711ec47b996911c499f29d8129d90e4731e Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'share/qbs/module-providers/Qt/templates/quick.js')
-rw-r--r--share/qbs/module-providers/Qt/templates/quick.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/share/qbs/module-providers/Qt/templates/quick.js b/share/qbs/module-providers/Qt/templates/quick.js
new file mode 100644
index 000000000..4f3da2fb0
--- /dev/null
+++ b/share/qbs/module-providers/Qt/templates/quick.js
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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.
+**
+****************************************************************************/
+
+var FileInfo = require("qbs.FileInfo");
+var Process = require("qbs.Process");
+
+function scanQrc(qrcFilePath) {
+ var absInputDir = FileInfo.path(qrcFilePath);
+ var result = [];
+ var process = new Process();
+ try {
+ var rcc = FileInfo.joinPaths(product.Qt.core.binPath, 'rcc' + product.cpp.executableSuffix);
+ var exitCode = process.exec(rcc, ["--list", qrcFilePath], true);
+ for (;;) {
+ var line = process.readLine();
+ if (!line)
+ break;
+ line = line.trim();
+ line = FileInfo.relativePath(absInputDir, line);
+ result.push(line);
+ }
+ } finally {
+ process.close();
+ }
+ return result;
+}
+
+function qtQuickCompilerOutputName(filePath) {
+ var str = filePath.replace(/\//g, '_');
+ var i = str.lastIndexOf('.');
+ if (i != -1)
+ str = str.substr(0, i) + '_' + str.substr(i + 1);
+ str += ".cpp";
+ return str;
+}
+
+function qtQuickResourceFileOutputName(fileName) {
+ return fileName.replace(/\.qrc$/, "_qtquickcompiler.qrc");
+}
+
+function contentFromQrc(qrcFilePath) {
+ var filesInQrc = scanQrc(qrcFilePath);
+ var qmlJsFiles = filesInQrc.filter(function (filePath) {
+ return (/\.(js|qml)$/).test(filePath);
+ } );
+ var content = {};
+ if (filesInQrc.length - qmlJsFiles.length > 0) {
+ content.newQrcFileName = qtQuickResourceFileOutputName(input.fileName);
+ }
+ content.qmlJsFiles = qmlJsFiles.map(function (filePath) {
+ return {
+ input: filePath,
+ output: qtQuickCompilerOutputName(filePath)
+ };
+ });
+ return content;
+}