aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2016-10-17 11:14:30 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2016-10-28 11:01:46 +0000
commit7f73d219d3b38c91bb666450a94d8e98b8aecc53 (patch)
tree1bc1a336b98c581560d1d619a92d6802082aa187
parentf829298a6f9810ad6182984cd56315846368fd98 (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.qdoc18
-rw-r--r--src/lib/qtprofilesetup/templates/core.qbs39
-rw-r--r--tests/auto/blackbox/testdata/auto-qrc/auto-qrc.qbs38
-rw-r--r--tests/auto/blackbox/testdata/auto-qrc/main.cpp15
-rw-r--r--tests/auto/blackbox/testdata/auto-qrc/qrc-base/resource1.txt1
-rw-r--r--tests/auto/blackbox/testdata/auto-qrc/qrc-base/subdir/resource2.txt1
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp8
-rw-r--r--tests/auto/blackbox/tst_blackbox.h1
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();