aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@theqtcompany.com>2015-06-01 14:14:07 +0200
committerChristian Kandeler <christian.kandeler@theqtcompany.com>2015-06-01 12:48:14 +0000
commit10b6fb8d6b18d144fb191ad2eb9749c68886b5fa (patch)
tree4161610cad12c06e11fbe2b1c09b64eb94ad63c3
parentcbdaffd79f31c990aae2822a380221ac57b353e1 (diff)
Allow to attach properties only to selected (sub-)projects.
Change-Id: I04ff63af5055694854a8b015e7a317becdfb4d9e Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
-rw-r--r--src/lib/corelib/language/moduleloader.cpp3
-rw-r--r--tests/auto/api/testdata/project-properties-by-name/main1.cpp10
-rw-r--r--tests/auto/api/testdata/project-properties-by-name/main2.cpp10
-rw-r--r--tests/auto/api/testdata/project-properties-by-name/project.qbs22
-rw-r--r--tests/auto/api/tst_api.cpp18
-rw-r--r--tests/auto/api/tst_api.h1
6 files changed, 64 insertions, 0 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp
index dc2766820..9ecf7cfff 100644
--- a/src/lib/corelib/language/moduleloader.cpp
+++ b/src/lib/corelib/language/moduleloader.cpp
@@ -238,6 +238,9 @@ void ModuleLoader::handleProject(ModuleLoaderResult *loadResult, Item *item,
dummyProductContext.moduleProperties = m_parameters.finalBuildConfigurationTree();
loadBaseModule(&dummyProductContext, item);
overrideItemProperties(item, QLatin1String("project"), m_parameters.overriddenValuesTree());
+ const QString projectName = m_evaluator->stringValue(item, QLatin1String("name"));
+ if (!projectName.isEmpty())
+ overrideItemProperties(item, projectName, m_parameters.overriddenValuesTree());
m_reader->pushExtraSearchPaths(readExtraSearchPaths(item) << item->file()->dirPath());
projectContext.item = item;
diff --git a/tests/auto/api/testdata/project-properties-by-name/main1.cpp b/tests/auto/api/testdata/project-properties-by-name/main1.cpp
new file mode 100644
index 000000000..ccea09298
--- /dev/null
+++ b/tests/auto/api/testdata/project-properties-by-name/main1.cpp
@@ -0,0 +1,10 @@
+#ifndef SUB1
+#error "Missing define"
+#endif
+#ifdef SUB2
+#error "Extraneous define"
+#endif
+
+int main()
+{
+}
diff --git a/tests/auto/api/testdata/project-properties-by-name/main2.cpp b/tests/auto/api/testdata/project-properties-by-name/main2.cpp
new file mode 100644
index 000000000..2aefb3ddf
--- /dev/null
+++ b/tests/auto/api/testdata/project-properties-by-name/main2.cpp
@@ -0,0 +1,10 @@
+#ifndef SUB2
+#error "Missing define"
+#endif
+#ifdef SUB1
+#error "Extraneous define"
+#endif
+
+int main()
+{
+}
diff --git a/tests/auto/api/testdata/project-properties-by-name/project.qbs b/tests/auto/api/testdata/project-properties-by-name/project.qbs
new file mode 100644
index 000000000..b90068f87
--- /dev/null
+++ b/tests/auto/api/testdata/project-properties-by-name/project.qbs
@@ -0,0 +1,22 @@
+import qbs
+
+Project {
+ name: "toplevel"
+ property stringList theDefines: []
+ Project {
+ name: "subproject1"
+ CppApplication {
+ name: "subproduct1"
+ files: ["main1.cpp"]
+ cpp.defines: project.theDefines
+ }
+ }
+ Project {
+ name: "subproject2"
+ CppApplication {
+ name: "subproduct2"
+ files: ["main2.cpp"]
+ cpp.defines: project.theDefines
+ }
+ }
+}
diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp
index 1a0aa2ed1..40e50cd4e 100644
--- a/tests/auto/api/tst_api.cpp
+++ b/tests/auto/api/tst_api.cpp
@@ -1329,6 +1329,24 @@ void TestApi::projectLocking()
QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString()));
}
+void TestApi::projectPropertiesByName()
+{
+ const QString projectFile = "project-properties-by-name/project.qbs";
+ qbs::ErrorInfo errorInfo = doBuildProject(projectFile);
+ QVERIFY(errorInfo.hasError());
+ QVariantMap overridden;
+ overridden.insert("project.theDefines", QStringList() << "SUB1" << "SUB2");
+ errorInfo = doBuildProject(projectFile, 0, 0, 0, qbs::BuildOptions(), overridden);
+ QVERIFY(errorInfo.hasError());
+ overridden.clear();
+ overridden.insert("subproject1.theDefines", QStringList() << "SUB1");
+ errorInfo = doBuildProject(projectFile, 0, 0, 0, qbs::BuildOptions(), overridden);
+ QVERIFY(errorInfo.hasError());
+ overridden.insert("subproject2.theDefines", QStringList() << "SUB2");
+ errorInfo = doBuildProject(projectFile, 0, 0, 0, qbs::BuildOptions(), overridden);
+ VERIFY_NO_ERROR(errorInfo);
+}
+
void TestApi::projectWithPropertiesItem()
{
const qbs::ErrorInfo errorInfo = doBuildProject("project-with-properties-item/project.qbs");
diff --git a/tests/auto/api/tst_api.h b/tests/auto/api/tst_api.h
index 82b7a3da9..b5a64fab5 100644
--- a/tests/auto/api/tst_api.h
+++ b/tests/auto/api/tst_api.h
@@ -98,6 +98,7 @@ private slots:
void objC();
void projectInvalidation();
void projectLocking();
+ void projectPropertiesByName();
void projectWithPropertiesItem();
void propertiesBlocks();
void rc();