aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Komissarov <abbapoh@gmail.com>2020-10-05 15:59:47 +0200
committerIvan Komissarov <ABBAPOH@gmail.com>2020-10-08 08:58:28 +0000
commit759ec8419abab4433bf0d85c2414708fd664db82 (patch)
treedbe388dc2b20d81589bb26ce8daa9f0ce6d77cd5
parent37c66211620ad37b61804adcc7ae0d8ed0d614be (diff)
Fix usage of @VAR@ in info plist files
Fixes: QBS-1601 Change-Id: Iead18bf5fd25f965cf9f9748469f2469488eabc8 Reviewed-by: Thorbjørn Lindeijer <bjorn@lindeijer.nl> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--share/qbs/imports/qbs/DarwinTools/darwin-tools.js9
-rw-r--r--share/qbs/modules/bundle/BundleModule.qbs2
-rw-r--r--tests/auto/blackbox/testdata-apple/infoPlistVariables/Info.plist22
-rw-r--r--tests/auto/blackbox/testdata-apple/infoPlistVariables/infoPlistVariables.qbs16
-rw-r--r--tests/auto/blackbox/testdata-apple/infoPlistVariables/main.c1
-rw-r--r--tests/auto/blackbox/tst_blackboxapple.cpp32
-rw-r--r--tests/auto/blackbox/tst_blackboxapple.h1
7 files changed, 81 insertions, 2 deletions
diff --git a/share/qbs/imports/qbs/DarwinTools/darwin-tools.js b/share/qbs/imports/qbs/DarwinTools/darwin-tools.js
index 5f9076004..9b81310f0 100644
--- a/share/qbs/imports/qbs/DarwinTools/darwin-tools.js
+++ b/share/qbs/imports/qbs/DarwinTools/darwin-tools.js
@@ -166,7 +166,14 @@ var PropertyListVariableExpander = (function () {
var syntax;
var idx = -1;
for (var i in syntaxes) {
- var j = str.lastIndexOf(syntaxes[i].open);
+ var j;
+ // normal case - we search for the last occurrence to do a correct replacement
+ // for nested variables, e.g. ${VAR1_${VAR2}}. This doesn't work in case
+ // when start == end, e.g. @VAR@ - in that case we search from the start
+ if (syntaxes[i].open !== syntaxes[i].close)
+ j = str.lastIndexOf(syntaxes[i].open);
+ else
+ j = str.indexOf(syntaxes[i].open);
if (j > idx) {
syntax = syntaxes[i];
idx = j;
diff --git a/share/qbs/modules/bundle/BundleModule.qbs b/share/qbs/modules/bundle/BundleModule.qbs
index bf2555fa3..05e77c81b 100644
--- a/share/qbs/modules/bundle/BundleModule.qbs
+++ b/share/qbs/modules/bundle/BundleModule.qbs
@@ -187,7 +187,7 @@ Module {
property bool _useXcodeBuildSpecs: true // false to use ONLY the qbs build specs
- readonly property var extraEnv: ({
+ property var extraEnv: ({
"PRODUCT_BUNDLE_IDENTIFIER": identifier
})
diff --git a/tests/auto/blackbox/testdata-apple/infoPlistVariables/Info.plist b/tests/auto/blackbox/testdata-apple/infoPlistVariables/Info.plist
new file mode 100644
index 000000000..b357378ac
--- /dev/null
+++ b/tests/auto/blackbox/testdata-apple/infoPlistVariables/Info.plist
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Curly</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>Braces</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>At</key>
+ <string>@EXECUTABLE_NAME@</string>
+ <key>CurlyMult</key>
+ <string>${EXECUTABLE_NAME}_${PRODUCT_NAME}</string>
+ <key>BracesMult</key>
+ <string>$(EXECUTABLE_NAME)_$(PRODUCT_NAME)</string>
+ <key>AtMult</key>
+ <string>@EXECUTABLE_NAME@_@PRODUCT_NAME@</string>
+ <key>CurlyNested</key>
+ <string>${${EXE}_NAME}</string>
+ <key>BracesNested</key>
+ <string>${${EXE}_NAME}</string>
+</dict>
+</plist>
diff --git a/tests/auto/blackbox/testdata-apple/infoPlistVariables/infoPlistVariables.qbs b/tests/auto/blackbox/testdata-apple/infoPlistVariables/infoPlistVariables.qbs
new file mode 100644
index 000000000..3f083278f
--- /dev/null
+++ b/tests/auto/blackbox/testdata-apple/infoPlistVariables/infoPlistVariables.qbs
@@ -0,0 +1,16 @@
+CppApplication {
+ Depends { name: "bundle" }
+ cpp.minimumMacosVersion: "10.7"
+ files: ["main.c", "Info.plist"]
+
+ Properties {
+ condition: qbs.targetOS.contains("darwin")
+ bundle.isBundle: true
+ bundle.identifierPrefix: "com.test"
+ bundle.extraEnv: {
+ var result = original;
+ result["EXE"] = "EXECUTABLE";
+ return result;
+ }
+ }
+}
diff --git a/tests/auto/blackbox/testdata-apple/infoPlistVariables/main.c b/tests/auto/blackbox/testdata-apple/infoPlistVariables/main.c
new file mode 100644
index 000000000..76e819701
--- /dev/null
+++ b/tests/auto/blackbox/testdata-apple/infoPlistVariables/main.c
@@ -0,0 +1 @@
+int main() { return 0; }
diff --git a/tests/auto/blackbox/tst_blackboxapple.cpp b/tests/auto/blackbox/tst_blackboxapple.cpp
index ea0d2ac58..a8f86aeba 100644
--- a/tests/auto/blackbox/tst_blackboxapple.cpp
+++ b/tests/auto/blackbox/tst_blackboxapple.cpp
@@ -897,6 +897,38 @@ void TestBlackboxApple::infoPlist()
}
}
+void TestBlackboxApple::infoPlistVariables()
+{
+ QDir::setCurrent(testDataDir + "/infoPlistVariables");
+
+ QbsRunParameters params;
+ params.arguments = QStringList() << "-f" << "infoPlistVariables.qbs";
+ QCOMPARE(runQbs(params), 0);
+
+ const auto infoPlistPath = getInfoPlistPath(
+ relativeProductBuildDir("infoPlistVariables") + "/infoPlistVariables.app");
+ QVERIFY(QFile::exists(infoPlistPath));
+ const auto content = readInfoPlistFile(infoPlistPath);
+ QVERIFY(!content.isEmpty());
+
+ QCOMPARE(content.value(QStringLiteral("Curly")),
+ QStringLiteral("infoPlistVariables"));
+ QCOMPARE(content.value(QStringLiteral("Braces")),
+ QStringLiteral("infoPlistVariables"));
+ QCOMPARE(content.value(QStringLiteral("At")),
+ QStringLiteral("infoPlistVariables"));
+ QCOMPARE(content.value(QStringLiteral("CurlyMult")),
+ QStringLiteral("infoPlistVariables_infoPlistVariables"));
+ QCOMPARE(content.value(QStringLiteral("BracesMult")),
+ QStringLiteral("infoPlistVariables_infoPlistVariables"));
+ QCOMPARE(content.value(QStringLiteral("AtMult")),
+ QStringLiteral("infoPlistVariables_infoPlistVariables"));
+ QCOMPARE(content.value(QStringLiteral("CurlyNested")),
+ QStringLiteral("infoPlistVariables"));
+ QCOMPARE(content.value(QStringLiteral("BracesNested")),
+ QStringLiteral("infoPlistVariables"));
+}
+
void TestBlackboxApple::objcArc()
{
QDir::setCurrent(testDataDir + QLatin1String("/objc-arc"));
diff --git a/tests/auto/blackbox/tst_blackboxapple.h b/tests/auto/blackbox/tst_blackboxapple.h
index be2e5c5b5..2a399ad7a 100644
--- a/tests/auto/blackbox/tst_blackboxapple.h
+++ b/tests/auto/blackbox/tst_blackboxapple.h
@@ -62,6 +62,7 @@ private slots:
void iconset();
void iconsetApp();
void infoPlist();
+ void infoPlistVariables();
void objcArc();
void overrideInfoPlist();
void xcode();