From 66bc3981831991a478fdca90d7ac1edd06557bc0 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Thu, 17 Jan 2013 15:12:46 +0100 Subject: [PATCH] CMake: Fix build directory for "Add Buildconfiguration" Task-number: QTCREATORBUG-8425 Change-Id: I58a47895fa882bcc53cad1ef764a307c714f2a1b Reviewed-by: Tobias Hunger --- .../cmakebuildconfiguration.cpp | 9 +++++++-- .../cmakeprojectmanager/cmakeproject.cpp | 20 ++++++++++++++++--- .../cmakeprojectmanager/cmakeproject.h | 4 ++-- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 6f8cf4541c6..b9469c932e9 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -57,7 +57,10 @@ const char USE_NINJA_KEY[] = "CMakeProjectManager.CMakeBuildConfiguration.UseNin CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent) : BuildConfiguration(parent, Core::Id(Constants::CMAKE_BC_ID)), m_useNinja(false) { - m_buildDirectory = static_cast(parent->project())->defaultBuildDirectory(); + CMakeProject *project = static_cast(parent->project()); + m_buildDirectory = project->shadowBuildDirectory(project->document()->fileName(), + parent->kit(), + displayName()); } CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent, @@ -184,7 +187,9 @@ CMakeBuildConfiguration *CMakeBuildConfigurationFactory::create(ProjectExplorer: info.sourceDirectory = project->projectDirectory(); info.environment = Utils::Environment::systemEnvironment(); parent->kit()->addToEnvironment(info.environment); - info.buildDirectory = project->defaultBuildDirectory(); + info.buildDirectory = project->shadowBuildDirectory(project->document()->fileName(), + parent->kit(), + buildConfigurationName); info.kit = parent->kit(); info.useNinja = false; // This is ignored anyway diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 09a938cfe12..05d85ad76de 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -48,7 +48,10 @@ #include #include #include +#include #include +#include +#include #include #include #include @@ -196,10 +199,21 @@ void CMakeProject::changeBuildDirectory(CMakeBuildConfiguration *bc, const QStri parseCMakeLists(); } -QString CMakeProject::defaultBuildDirectory() const +QString CMakeProject::shadowBuildDirectory(const QString &projectFilePath, const Kit *k, const QString &bcName) { - return Utils::expandMacros(Core::DocumentManager::instance()->buildDirectory(), - Core::VariableManager::instance()->macroExpander()); + if (projectFilePath.isEmpty()) + return QString(); + QFileInfo info(projectFilePath); + + QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); + if (version && !version->supportsShadowBuilds()) + return info.absolutePath(); + + const QString projectName = QFileInfo(info.absolutePath()).fileName(); + ProjectExplorer::ProjectExpander expander(projectFilePath, projectName, k, bcName); + QDir projectDir = QDir(projectDirectory(projectFilePath)); + QString buildPath = Utils::expandMacros(Core::DocumentManager::buildDirectory(), &expander); + return QDir::cleanPath(projectDir.absoluteFilePath(buildPath)); } bool CMakeProject::parseCMakeLists() diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h index 321b74cc9a4..a4e9927e183 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.h +++ b/src/plugins/cmakeprojectmanager/cmakeproject.h @@ -94,8 +94,8 @@ public: CMakeBuildTarget buildTargetForTitle(const QString &title); - QString defaultBuildDirectory() const; - + QString shadowBuildDirectory(const QString &projectFilePath, const ProjectExplorer::Kit *k, + const QString &bcName); QString uicCommand() const;