diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2016-10-17 11:14:30 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2016-10-28 11:01:46 +0000 |
commit | 7f73d219d3b38c91bb666450a94d8e98b8aecc53 (patch) | |
tree | 1bc1a336b98c581560d1d619a92d6802082aa187 | |
parent | f829298a6f9810ad6182984cd56315846368fd98 (diff) |
Add support for generating qrc files
[ChangeLog] Added support for generating qrc files.
Change-Id: I9c5d703fcb6f8c14606d5abf66e8edfd4959f364
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
-rw-r--r-- | doc/reference/modules/qt-modules.qdoc | 18 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/core.qbs | 39 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/auto-qrc/auto-qrc.qbs | 38 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/auto-qrc/main.cpp | 15 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/auto-qrc/qrc-base/resource1.txt | 1 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/auto-qrc/qrc-base/subdir/resource2.txt | 1 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 8 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.h | 1 |
8 files changed, 121 insertions, 0 deletions
diff --git a/doc/reference/modules/qt-modules.qdoc b/doc/reference/modules/qt-modules.qdoc index d9704b8d0..7d9a7e47b 100644 --- a/doc/reference/modules/qt-modules.qdoc +++ b/doc/reference/modules/qt-modules.qdoc @@ -335,6 +335,19 @@ \li \c{empty} \li Corresponds to the default value of qmake's \c QT_CONFIG variable. \row + \li resourceSourceBase + \li \c{path} + \li \c{product.sourceDirectory} + \li For files tagged as \c{qt.core.resource_data}, this property determines which part of + their path will end up in the generated \c qrc file. + \row + \li resourcePrefix + \li \c{string} + \li \c{"/"} + \li For files tagged as \c{qt.core.resource_data}, this property determines the prefix + under which they will be available in the generated \c qrc file. The value of this + property needs to be the same for all such files in a product. + \row \li staticBuild \li \c{bool} \li \c{undefined} @@ -552,6 +565,11 @@ \li Source files with this tag trigger a re-execution of the rule running the \c moc tool when their timestamp changes. \row + \li \c{"qt.core.resource_data"} + \li - + \li 1.7 + \li Source files with this tag serve as inputs to the rule creating \c qrc files. + \row \li \c{"ts"} \li \c{*.ts} \li 1.0 diff --git a/src/lib/qtprofilesetup/templates/core.qbs b/src/lib/qtprofilesetup/templates/core.qbs index 325006cd7..7d9eda360 100644 --- a/src/lib/qtprofilesetup/templates/core.qbs +++ b/src/lib/qtprofilesetup/templates/core.qbs @@ -1,6 +1,7 @@ import qbs 1.0 import qbs.FileInfo import qbs.ModUtils +import qbs.TextFile import qbs.Utilities import "moc.js" as Moc import "qdoc.js" as Qdoc @@ -268,6 +269,44 @@ Module { } } + property path resourceSourceBase: product.sourceDirectory + property string resourcePrefix: "/" + Rule { + multiplex: true + inputs: ["qt.core.resource_data"] + Artifact { + filePath: "__qbs_auto_" + product.name + ".qrc" + fileTags: ["qrc"] + } + prepare: { + var cmd = new JavaScriptCommand(); + cmd.description = "generating " + output.fileName; + cmd.sourceCode = function() { + var qrcFile = new TextFile(output.filePath, TextFile.WriteOnly); + try { + qrcFile.writeLine('<!DOCTYPE RCC>'); + qrcFile.writeLine('<RCC version="1.0">'); + var prefix = inputs["qt.core.resource_data"][0].moduleProperty("Qt.core", + "resourcePrefix"); + qrcFile.writeLine('<qresource prefix ="' + prefix + '">'); + for (var i = 0; i < inputs["qt.core.resource_data"].length; ++i) { + var inp = inputs["qt.core.resource_data"][i]; + var fullResPath = inp.filePath; + var baseDir = inp.moduleProperty("Qt.core", "resourceSourceBase"); + var relResPath = FileInfo.relativePath(baseDir, fullResPath); + qrcFile.writeLine('<file alias = "' + relResPath + '">' + + fullResPath + '</file>'); + } + qrcFile.writeLine('</qresource>'); + qrcFile.writeLine('</RCC>'); + } finally { + qrcFile.close(); + } + }; + return [cmd]; + } + } + Rule { inputs: ["qrc"] diff --git a/tests/auto/blackbox/testdata/auto-qrc/auto-qrc.qbs b/tests/auto/blackbox/testdata/auto-qrc/auto-qrc.qbs new file mode 100644 index 000000000..7ad4a5798 --- /dev/null +++ b/tests/auto/blackbox/testdata/auto-qrc/auto-qrc.qbs @@ -0,0 +1,38 @@ +import qbs + +Project { + QtApplication { + name: "app" + files: ["main.cpp"] + + // TODO: Use two groups with different base dirs once QBS-1005 is fixed. + Qt.core.resourceSourceBase: "qrc-base" + Qt.core.resourcePrefix: "/thePrefix" + Group { + prefix: "qrc-base/" + files: [ + "resource1.txt", + "subdir/resource2.txt", + ] + fileTags: ["qt.core.resource_data"] + } + } + + Product { + name: "runner" + type: ["runner"] + Depends { name: "app" } + Rule { + inputsFromDependencies: ["application"] + Artifact { + filePath: "dummy" + fileTags: ["runner"] + } + prepare: { + var cmd = new Command(input.filePath); + cmd.description = "running " + input.filePath; + return [cmd]; + } + } + } +} diff --git a/tests/auto/blackbox/testdata/auto-qrc/main.cpp b/tests/auto/blackbox/testdata/auto-qrc/main.cpp new file mode 100644 index 000000000..64acf8680 --- /dev/null +++ b/tests/auto/blackbox/testdata/auto-qrc/main.cpp @@ -0,0 +1,15 @@ +#include <QFile> + +#include <iostream> + +int main() +{ + QFile resource1(":/thePrefix/resource1.txt"); + if (!resource1.open(QIODevice::ReadOnly)) + return 1; + QFile resource2(":/thePrefix/subdir/resource2.txt"); + if (!resource2.open(QIODevice::ReadOnly)) + return 2; + std::cout << "resource data: " << resource1.readAll().constData() + << resource2.readAll().constData() << std::endl; +} diff --git a/tests/auto/blackbox/testdata/auto-qrc/qrc-base/resource1.txt b/tests/auto/blackbox/testdata/auto-qrc/qrc-base/resource1.txt new file mode 100644 index 000000000..edf22a3d6 --- /dev/null +++ b/tests/auto/blackbox/testdata/auto-qrc/qrc-base/resource1.txt @@ -0,0 +1 @@ +resource1 diff --git a/tests/auto/blackbox/testdata/auto-qrc/qrc-base/subdir/resource2.txt b/tests/auto/blackbox/testdata/auto-qrc/qrc-base/subdir/resource2.txt new file mode 100644 index 000000000..b7c270096 --- /dev/null +++ b/tests/auto/blackbox/testdata/auto-qrc/qrc-base/subdir/resource2.txt @@ -0,0 +1 @@ +resource2 diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 03c1df6b0..a5280729c 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -4056,6 +4056,14 @@ void TestBlackbox::assetCatalog_data() QTest::newRow("unflattened") << false; } +void TestBlackbox::autoQrc() +{ + QDir::setCurrent(testDataDir + "/auto-qrc"); + QCOMPARE(runQbs(), 0); + QVERIFY2(m_qbsStdout.simplified().contains("resource data: resource1 resource2"), + m_qbsStdout.constData()); +} + void TestBlackbox::objcArc() { if (!HostOsInfo::isMacosHost()) diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h index c7a344e60..9e88caa43 100644 --- a/tests/auto/blackbox/tst_blackbox.h +++ b/tests/auto/blackbox/tst_blackbox.h @@ -44,6 +44,7 @@ private slots: void assembly(); void assetCatalog(); void assetCatalog_data(); + void autoQrc(); void badInterpreter(); void buildDirectories(); void bundleStructure(); |