aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2012-11-16 11:55:50 +0100
committerJoerg Bornemann <joerg.bornemann@digia.com>2012-11-16 17:19:45 +0100
commitec7d046c7f04abb9c627b0daf1e02f460bbda228 (patch)
treee0b43ed22745b2bfb764f1f4ccffdd22e0e0e4d8
parentea1099c3b5bf36e3ef945f2ae177263b1b41acaa (diff)
Create one BuildGraph per Buildproject.
Currently all Buildprojects in a QbsEngine share the same BuildGraph, which can't be right. Note that the design is still awkward, because the BuildGraph exists before the BuildProject is created. Changing this is rather complicated and needs to be done incrementally. Change-Id: Iebf9f2ebc2543dde63448667f180d09f1497e5cc Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r--src/lib/buildgraph/buildgraph.cpp1
-rw-r--r--src/lib/language/qbsengine.cpp13
2 files changed, 9 insertions, 5 deletions
diff --git a/src/lib/buildgraph/buildgraph.cpp b/src/lib/buildgraph/buildgraph.cpp
index e288e047b..d2789c6ad 100644
--- a/src/lib/buildgraph/buildgraph.cpp
+++ b/src/lib/buildgraph/buildgraph.cpp
@@ -848,6 +848,7 @@ BuildProject::BuildProject(BuildGraph *bg)
BuildProject::~BuildProject()
{
+ delete m_buildGraph;
qDeleteAll(m_dependencyArtifacts);
}
diff --git a/src/lib/language/qbsengine.cpp b/src/lib/language/qbsengine.cpp
index b73c07535..05fff8162 100644
--- a/src/lib/language/qbsengine.cpp
+++ b/src/lib/language/qbsengine.cpp
@@ -57,8 +57,7 @@ using namespace Internal;
class QbsEngine::QbsEnginePrivate
{
public:
- QbsEnginePrivate()
- : observer(0), buildGraph(new BuildGraph(&engine)) {}
+ QbsEnginePrivate() : observer(0) {}
void loadPlugins();
BuildProject::Ptr setupBuildProject(const ResolvedProject::ConstPtr &project);
@@ -78,7 +77,6 @@ public:
QList<ResolvedProject::Ptr> resolvedProjects;
QList<BuildProject::Ptr> buildProjects;
Settings settings;
- const QSharedPointer<BuildGraph> buildGraph;
PublicObjectsMap publicObjectsMap;
// Potentially stored temporarily between calls to setupResolvedProject() and setupBuildProject().
@@ -129,7 +127,6 @@ QbsEngine::~QbsEngine()
void QbsEngine::setProgressObserver(ProgressObserver *observer)
{
d->observer = observer;
- d->buildGraph->setProgressObserver(observer);
}
/*!
@@ -152,11 +149,15 @@ Project::Id QbsEngine::setupProject(const QString &projectFilePath, const QVaria
const QString &buildRoot)
{
const QVariantMap buildConfig = d->expandedBuildConfiguration(_buildConfig);
+ QScopedPointer<BuildGraph> buildGraph(new BuildGraph(&d->engine));
+ buildGraph->setProgressObserver(d->observer);
const BuildProject::LoadResult loadResult = BuildProject::load(projectFilePath,
- d->buildGraph.data(), buildRoot, buildConfig, d->settings.searchPaths());
+ buildGraph.data(), buildRoot, buildConfig, d->settings.searchPaths());
BuildProject::Ptr bProject;
ResolvedProject::Ptr rProject;
+ if (loadResult.loadedProject)
+ buildGraph.take();
if (!loadResult.discardLoadedProject)
bProject = loadResult.loadedProject;
if (bProject) {
@@ -476,6 +477,8 @@ BuildProject::Ptr QbsEngine::QbsEnginePrivate::setupBuildProject(const ResolvedP
throw Error(Tr::tr("Unknown project."));
TimedActivityLogger resolveLogger(QLatin1String("Resolving build project"));
+ BuildGraph * const buildGraph = new BuildGraph(&engine);
+ buildGraph->setProgressObserver(observer);
const BuildProject::Ptr buildProject = buildGraph->resolveProject(mutableRProject);
const QHash<ResolvedProject::ConstPtr, BuildProject::Ptr>::Iterator it
= discardedBuildProjects.find(project);