aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/language/projectresolver.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-05-09 17:17:42 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2014-05-13 10:40:53 +0200
commit6d5de545c4e67289f973cf6ba9bdbbaeb4eb4a99 (patch)
tree275df0914bd1e47fc0120ce5da9857c4cf690e84 /src/lib/corelib/language/projectresolver.cpp
parent33f0e83c0cd2c2f149f2b03ac7cb4ba9dd22fb1a (diff)
Introduce sensible build directory values.
Currently, all products share the same build directory, and rules are responsible for making their artifact file paths unique, which is annoying for module authors and introduces lots of code duplication. Instead, make the product build directories unique and let these directories be the base directory of relative artifact file paths. Also export the top-level build dir as project.buildDirectory to the JavaScript side so rules can refer to that one if necessary. Task-number: QBS-567 Change-Id: I257d37cad01ec6dece3e214799b917149677d80c Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/lib/corelib/language/projectresolver.cpp')
-rw-r--r--src/lib/corelib/language/projectresolver.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp
index 178e8e46d..3ae9a114f 100644
--- a/src/lib/corelib/language/projectresolver.cpp
+++ b/src/lib/corelib/language/projectresolver.cpp
@@ -287,6 +287,8 @@ void ProjectResolver::resolveProduct(Item *item, ProjectContext *projectContext)
item->setProperty(QLatin1String("name"), VariantValue::create(product->name));
}
m_logger.qbsTrace() << "[PR] resolveProduct " << product->name;
+ item->setProperty(QLatin1String("buildDirectory"),
+ VariantValue::create(product->buildDirectory()));
if (std::find_if(item->modules().begin(), item->modules().end(),
ModuleNameEquals(product->name)) != item->modules().end()) {
@@ -312,10 +314,18 @@ void ProjectResolver::resolveProduct(Item *item, ProjectContext *projectContext)
product->fileTags = m_evaluator->fileTagsValue(item, QLatin1String("type"));
product->targetName = m_evaluator->stringValue(item, QLatin1String("targetName"));
product->sourceDirectory = m_evaluator->stringValue(item, QLatin1String("sourceDirectory"));
- product->destinationDirectory
- = m_evaluator->stringValue(item, QLatin1String("destinationDirectory"));
+ const QString destDirKey = QLatin1String("destinationDirectory");
+ product->destinationDirectory = m_evaluator->stringValue(item, destDirKey);
+ if (product->destinationDirectory.isEmpty()) {
+ product->destinationDirectory = product->buildDirectory();
+ } else {
+ product->destinationDirectory = FileInfo::resolvePath(
+ product->topLevelProject()->buildDirectory,
+ product->destinationDirectory);
+ }
product->location = item->location();
product->productProperties = createProductConfig();
+ product->productProperties.insert(destDirKey, product->destinationDirectory);
QVariantMap moduleProperties;
moduleProperties.insert(QLatin1String("modules"),
product->productProperties.take(QLatin1String("modules")));
@@ -738,8 +748,8 @@ void ProjectResolver::resolveTransformer(Item *item, ProjectContext *projectCont
QString fileName = m_evaluator->stringValue(child, QLatin1String("fileName"));
if (Q_UNLIKELY(fileName.isEmpty()))
throw ErrorInfo(Tr::tr("Artifact fileName must not be empty."));
- artifact->absoluteFilePath = FileInfo::resolvePath(m_productContext->product->topLevelProject()->buildDirectory,
- fileName);
+ artifact->absoluteFilePath
+ = FileInfo::resolvePath(m_productContext->product->buildDirectory(), fileName);
artifact->fileTags = m_evaluator->fileTagsValue(child, QLatin1String("fileTags"));
if (artifact->fileTags.isEmpty())
artifact->fileTags.insert(unknownFileTag());