aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/api
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2014-02-10 18:08:01 +0100
committerJoerg Bornemann <joerg.bornemann@digia.com>2014-02-13 15:33:27 +0100
commite73f60919079fc7cb0f0ad6d50b1a364c7b0d2a6 (patch)
tree3ce15f1f9b336063d591999ce325ce28a6e21320 /src/lib/corelib/api
parenta3634a6bbb193c47cdec887a6b29356c979961aa (diff)
support transformers with an unknown number of outputs
To support different types of nodes in the build graph, we introduce the base class BuildGraphNode. Artifact now derives from BuildGraphNode. A RuleNode class is introduced that represents a rule in the build graph. Rules are applied in the build phase and not in a pre-build phase anymore. The handling of moc has been revisited. The fixed automoc pre-build phase is no more. This is the squashed merge of a feature branch. Task-number: QBS-370 Change-Id: If27cdc51cba8c9542e4282c2caa456faa723aeff Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
Diffstat (limited to 'src/lib/corelib/api')
-rw-r--r--src/lib/corelib/api/project.cpp25
1 files changed, 7 insertions, 18 deletions
diff --git a/src/lib/corelib/api/project.cpp b/src/lib/corelib/api/project.cpp
index b9e9b4583..99b2eeac0 100644
--- a/src/lib/corelib/api/project.cpp
+++ b/src/lib/corelib/api/project.cpp
@@ -438,18 +438,10 @@ void ProjectPrivate::addFiles(const ProductData &product, const GroupData &group
groupContext.resolvedGroup->files << artifact;
}
if (groupContext.resolvedProduct->enabled) {
- ArtifactsPerFileTagMap artifactsPerFileTag;
foreach (const SourceArtifactConstPtr &sa, addedSourceArtifacts) {
Artifact * const artifact = createArtifact(groupContext.resolvedProduct, sa, logger);
- foreach (const FileTag &ft, artifact->fileTags)
- artifactsPerFileTag[ft] += artifact;
+ groupContext.resolvedProduct->registerAddedArtifact(artifact);
}
- RulesEvaluationContextPtr &evalContext
- = groupContext.resolvedProduct->topLevelProject()->buildData->evaluationContext;
- evalContext = QSharedPointer<RulesEvaluationContext>(new RulesEvaluationContext(logger));
- RulesApplicator(groupContext.resolvedProduct, artifactsPerFileTag, logger).applyAllRules();
- addTargetArtifacts(groupContext.resolvedProduct, artifactsPerFileTag, logger);
- evalContext.clear();
}
doSanityChecks(internalProject, logger);
groupContext.currentGroup.d->filePaths << filesContext.absoluteFilePaths;
@@ -521,14 +513,10 @@ void ProjectPrivate::removeFilesFromBuildGraph(const ResolvedProductConstPtr &pr
QBS_CHECK(internalProject->buildData);
foreach (const SourceArtifactPtr &sa, files) {
Artifact * const artifact = lookupArtifact(product, sa->absoluteFilePath);
- QBS_CHECK(artifact);
- internalProject->buildData->removeArtifactAndExclusiveDependents(artifact, logger);
+ if (artifact) // Can be null if the executor has not yet applied the respective rule.
+ internalProject->buildData->removeArtifactAndExclusiveDependents(artifact, logger);
+ delete artifact;
}
- RulesEvaluationContextPtr &evalContext
- = internalProject->buildData->evaluationContext;
- evalContext = QSharedPointer<RulesEvaluationContext>(new RulesEvaluationContext(logger));
- internalProject->buildData->updateNodesThatMustGetNewTransformer(logger);
- evalContext.clear();
}
static void updateLocationIfNecessary(CodeLocation &location, const CodeLocation &changeLocation,
@@ -611,7 +599,7 @@ void ProjectPrivate::retrieveProjectData(ProjectData &projectData,
product.d->groups << createGroupDataFromGroup(resolvedGroup);
if (resolvedProduct->enabled) {
QBS_CHECK(resolvedProduct->buildData);
- foreach (const Artifact * const a, resolvedProduct->buildData->targetArtifacts) {
+ foreach (const Artifact * const a, resolvedProduct->buildData->targetArtifacts()) {
TargetArtifact ta;
ta.d->filePath = a->filePath();
ta.d->fileTags = a->fileTags.toStringList();
@@ -864,7 +852,8 @@ QList<InstallableFile> Project::installableFilesForProduct(const ProductData &pr
}
if (internalProduct->enabled) {
QBS_CHECK(internalProduct->buildData);
- foreach (const Artifact * const artifact, internalProduct->buildData->artifacts) {
+ foreach (const Artifact * const artifact,
+ ArtifactSet::fromNodeSet(internalProduct->buildData->nodes)) {
if (artifact->artifactType == Artifact::SourceFile)
continue;
InstallableFile f;