diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2012-11-16 11:55:50 +0100 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2012-11-16 17:19:45 +0100 |
commit | ec7d046c7f04abb9c627b0daf1e02f460bbda228 (patch) | |
tree | e0b43ed22745b2bfb764f1f4ccffdd22e0e0e4d8 | |
parent | ea1099c3b5bf36e3ef945f2ae177263b1b41acaa (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.cpp | 1 | ||||
-rw-r--r-- | src/lib/language/qbsengine.cpp | 13 |
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); |