diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2014-05-09 17:17:42 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2014-05-13 10:40:53 +0200 |
commit | 6d5de545c4e67289f973cf6ba9bdbbaeb4eb4a99 (patch) | |
tree | 275df0914bd1e47fc0120ce5da9857c4cf690e84 /src/lib/corelib/language/projectresolver.cpp | |
parent | 33f0e83c0cd2c2f149f2b03ac7cb4ba9dd22fb1a (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.cpp | 18 |
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()); |