diff options
author | Christian Kandeler <christian.kandeler@theqtcompany.com> | 2015-06-01 14:14:07 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@theqtcompany.com> | 2015-06-01 12:48:14 +0000 |
commit | 10b6fb8d6b18d144fb191ad2eb9749c68886b5fa (patch) | |
tree | 4161610cad12c06e11fbe2b1c09b64eb94ad63c3 | |
parent | cbdaffd79f31c990aae2822a380221ac57b353e1 (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.cpp | 3 | ||||
-rw-r--r-- | tests/auto/api/testdata/project-properties-by-name/main1.cpp | 10 | ||||
-rw-r--r-- | tests/auto/api/testdata/project-properties-by-name/main2.cpp | 10 | ||||
-rw-r--r-- | tests/auto/api/testdata/project-properties-by-name/project.qbs | 22 | ||||
-rw-r--r-- | tests/auto/api/tst_api.cpp | 18 | ||||
-rw-r--r-- | tests/auto/api/tst_api.h | 1 |
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(); |