aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/qbs/modules/cpp/DarwinGCC.qbs4
-rw-r--r--share/qbs/modules/ib/IBModule.qbs31
-rw-r--r--tests/auto/blackbox/testdata/ib/iconset/iconset.qbs7
-rw-r--r--tests/auto/blackbox/testdata/ib/iconset/white.iconset/icon_16x16.pngbin0 -> 3303 bytes
-rw-r--r--tests/auto/blackbox/testdata/ib/iconset/white.iconset/icon_16x16@2x.pngbin0 -> 3336 bytes
-rw-r--r--tests/auto/blackbox/testdata/ib/iconsetapp/iconsetapp.qbs6
-rw-r--r--tests/auto/blackbox/testdata/ib/iconsetapp/main.c4
-rw-r--r--tests/auto/blackbox/testdata/ib/iconsetapp/white.iconset/icon_16x16.pngbin0 -> 3303 bytes
-rw-r--r--tests/auto/blackbox/testdata/ib/iconsetapp/white.iconset/icon_16x16@2x.pngbin0 -> 3336 bytes
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp30
-rw-r--r--tests/auto/blackbox/tst_blackbox.h2
11 files changed, 82 insertions, 2 deletions
diff --git a/share/qbs/modules/cpp/DarwinGCC.qbs b/share/qbs/modules/cpp/DarwinGCC.qbs
index e74d4b84b..1081d3dc5 100644
--- a/share/qbs/modules/cpp/DarwinGCC.qbs
+++ b/share/qbs/modules/cpp/DarwinGCC.qbs
@@ -332,7 +332,7 @@ UnixGCC {
Rule {
multiplex: true
- inputs: ["application", "infoplist", "pkginfo", "application_dsym", "compiled_nib",
+ inputs: ["application", "infoplist", "pkginfo", "icns", "application_dsym", "compiled_nib",
"resourcerules", "ipa"]
Artifact {
@@ -351,7 +351,7 @@ UnixGCC {
Rule {
multiplex: true
- inputs: ["dynamiclibrary", "infoplist", "pkginfo", "dynamiclibrary_dsym", "compiled_nib"]
+ inputs: ["dynamiclibrary", "infoplist", "pkginfo", "icns", "dynamiclibrary_dsym", "compiled_nib"]
Artifact {
filePath: product.destinationDirectory + "/" + BundleTools.wrapperName(product)
diff --git a/share/qbs/modules/ib/IBModule.qbs b/share/qbs/modules/ib/IBModule.qbs
index 6f30fb0a2..bee1dd9e4 100644
--- a/share/qbs/modules/ib/IBModule.qbs
+++ b/share/qbs/modules/ib/IBModule.qbs
@@ -14,6 +14,10 @@ Module {
property stringList flags
+ // iconutil specific
+ property string iconutilName: "iconutil"
+ property string iconutilPath: iconutilName
+
// XIB/NIB specific
property string ibtoolName: "ibtool"
property string ibtoolPath: ibtoolName
@@ -21,6 +25,7 @@ Module {
// private properties
property string outputFormat: "human-readable-text"
+ property string appleIconSuffix: ".icns"
property string compiledNibSuffix: ".nib"
property string ibtoolVersion: { return Ib.ibtoolVersion(ibtoolPath); }
@@ -43,11 +48,37 @@ Module {
}
FileTagger {
+ patterns: ["*.iconset"] // bundle
+ fileTags: ["iconset"]
+ }
+
+ FileTagger {
patterns: ["*.nib", "*.xib"]
fileTags: ["nib"]
}
Rule {
+ inputs: ["iconset"]
+
+ Artifact {
+ filePath: {
+ var outputDirectory = BundleTools.isBundleProduct(product)
+ ? BundleTools.unlocalizedResourcesFolderPath(product)
+ : product.destinationDirectory;
+ return FileInfo.joinPaths(outputDirectory, input.completeBaseName + ModUtils.moduleProperty(product, "appleIconSuffix"))
+ }
+ fileTags: ["icns"]
+ }
+
+ prepare: {
+ var args = ["--convert", "icns", "--output", output.filePath, input.filePath];
+ var cmd = new Command(ModUtils.moduleProperty(product, "iconutilPath"), args);
+ cmd.description = ModUtils.moduleProperty(product, "iconutilName") + ' ' + input.fileName;
+ return cmd;
+ }
+ }
+
+ Rule {
inputs: ["nib"]
explicitlyDependsOn: ["infoplist"]
diff --git a/tests/auto/blackbox/testdata/ib/iconset/iconset.qbs b/tests/auto/blackbox/testdata/ib/iconset/iconset.qbs
new file mode 100644
index 000000000..1d563f180
--- /dev/null
+++ b/tests/auto/blackbox/testdata/ib/iconset/iconset.qbs
@@ -0,0 +1,7 @@
+import qbs
+
+Product {
+ Depends { name: "ib" }
+ type: ["icns"]
+ files: ["white.iconset"]
+}
diff --git a/tests/auto/blackbox/testdata/ib/iconset/white.iconset/icon_16x16.png b/tests/auto/blackbox/testdata/ib/iconset/white.iconset/icon_16x16.png
new file mode 100644
index 000000000..65ff1ff57
--- /dev/null
+++ b/tests/auto/blackbox/testdata/ib/iconset/white.iconset/icon_16x16.png
Binary files differ
diff --git a/tests/auto/blackbox/testdata/ib/iconset/white.iconset/icon_16x16@2x.png b/tests/auto/blackbox/testdata/ib/iconset/white.iconset/icon_16x16@2x.png
new file mode 100644
index 000000000..a5c69bccd
--- /dev/null
+++ b/tests/auto/blackbox/testdata/ib/iconset/white.iconset/icon_16x16@2x.png
Binary files differ
diff --git a/tests/auto/blackbox/testdata/ib/iconsetapp/iconsetapp.qbs b/tests/auto/blackbox/testdata/ib/iconsetapp/iconsetapp.qbs
new file mode 100644
index 000000000..7e5323a0c
--- /dev/null
+++ b/tests/auto/blackbox/testdata/ib/iconsetapp/iconsetapp.qbs
@@ -0,0 +1,6 @@
+import qbs
+
+CppApplication {
+ Depends { name: "ib" }
+ files: ["main.c", "white.iconset"]
+}
diff --git a/tests/auto/blackbox/testdata/ib/iconsetapp/main.c b/tests/auto/blackbox/testdata/ib/iconsetapp/main.c
new file mode 100644
index 000000000..905869dfa
--- /dev/null
+++ b/tests/auto/blackbox/testdata/ib/iconsetapp/main.c
@@ -0,0 +1,4 @@
+int main()
+{
+ return 0;
+}
diff --git a/tests/auto/blackbox/testdata/ib/iconsetapp/white.iconset/icon_16x16.png b/tests/auto/blackbox/testdata/ib/iconsetapp/white.iconset/icon_16x16.png
new file mode 100644
index 000000000..65ff1ff57
--- /dev/null
+++ b/tests/auto/blackbox/testdata/ib/iconsetapp/white.iconset/icon_16x16.png
Binary files differ
diff --git a/tests/auto/blackbox/testdata/ib/iconsetapp/white.iconset/icon_16x16@2x.png b/tests/auto/blackbox/testdata/ib/iconsetapp/white.iconset/icon_16x16@2x.png
new file mode 100644
index 000000000..a5c69bccd
--- /dev/null
+++ b/tests/auto/blackbox/testdata/ib/iconsetapp/white.iconset/icon_16x16@2x.png
Binary files differ
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index 605582961..c791a6993 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -2265,6 +2265,36 @@ void TestBlackbox::testTypeScript()
QVERIFY(regularFileExists(productBuildDir("animals") + "/main.js"));
}
+void TestBlackbox::testIconset()
+{
+ if (!HostOsInfo::isOsxHost())
+ SKIP_TEST("only applies on OS X");
+
+ QDir::setCurrent(testDataDir + QLatin1String("/ib/iconset"));
+
+ QbsRunParameters params;
+ params.arguments = QStringList() << "-f" << "iconset.qbs";
+ QCOMPARE(runQbs(params), 0);
+
+ QVERIFY((bool)m_qbsStdout.contains("warning")); // because some images are missing
+ QVERIFY(regularFileExists(productBuildDir("iconset") + "/white.icns"));
+}
+
+void TestBlackbox::testIconsetApp()
+{
+ if (!HostOsInfo::isOsxHost())
+ SKIP_TEST("only applies on OS X");
+
+ QDir::setCurrent(testDataDir + QLatin1String("/ib/iconsetapp"));
+
+ QbsRunParameters params;
+ params.arguments = QStringList() << "-f" << "iconsetapp.qbs";
+ QCOMPARE(runQbs(params), 0);
+
+ QVERIFY((bool)m_qbsStdout.contains("warning")); // because some images are missing
+ QVERIFY(regularFileExists(productBuildDir("iconsetapp") + "/iconsetapp.app/Contents/Resources/white.icns"));
+}
+
QString TestBlackbox::uniqueProductName(const QString &productName) const
{
return productName + '.' + buildProfileName;
diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h
index cf3ebb146..0ac522d76 100644
--- a/tests/auto/blackbox/tst_blackbox.h
+++ b/tests/auto/blackbox/tst_blackbox.h
@@ -185,6 +185,8 @@ private slots:
void testWiX();
void testNodeJs();
void testTypeScript();
+ void testIconset();
+ void testIconsetApp();
private:
QString uniqueProductName(const QString &productName) const;