From d6ea2945f0a5bdc8c5bd8673241deb7bd046ea17 Mon Sep 17 00:00:00 2001 From: Milian Wolff Date: Thu, 3 Mar 2011 16:12:00 +0100 Subject: [PATCH] add API to query build type (unknown, release, debug) to BuildConfiguration Merge-request: 261 Reviewed-by: dt --- .../cmakebuildconfiguration.cpp | 33 +++++++++++++++++++ .../cmakebuildconfiguration.h | 2 ++ .../genericbuildconfiguration.cpp | 6 ++++ .../genericbuildconfiguration.h | 2 ++ .../projectexplorer/buildconfiguration.h | 7 ++++ .../qt4buildconfiguration.cpp | 9 +++++ .../qt4projectmanager/qt4buildconfiguration.h | 2 ++ 7 files changed, 61 insertions(+) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 4f06f5bf8d1..1f497bbef55 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -273,3 +273,36 @@ CMakeBuildConfiguration *CMakeBuildConfigurationFactory::restore(ProjectExplorer delete bc; return 0; } + +ProjectExplorer::BuildConfiguration::BuildType CMakeBuildConfiguration::buildType() const +{ + QString cmakeBuildType; + QFile cmakeCache(buildDirectory() + "/CMakeCache.txt"); + if (cmakeCache.open(QIODevice::ReadOnly)) { + while (!cmakeCache.atEnd()) { + QString line = cmakeCache.readLine(); + if (line.startsWith("CMAKE_BUILD_TYPE")) { + if (int pos = line.indexOf('=')) { + cmakeBuildType = line.mid(pos + 1).trimmed(); + } + break; + } + } + cmakeCache.close(); + } + + // Cover all common CMake build types + if (cmakeBuildType.compare("Release", Qt::CaseInsensitive) == 0 + || cmakeBuildType.compare("MinSizeRel", Qt::CaseInsensitive) == 0) + { + return Release; + } else if (cmakeBuildType.compare("Debug", Qt::CaseInsensitive) == 0 + || cmakeBuildType.compare("debugfull", Qt::CaseInsensitive) == 0 + || cmakeBuildType.compare("RelWithDebInfo", Qt::CaseInsensitive) == 0) + { + return Debug; + } + + return Unknown; +} + diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index 94411e1a0ec..9c30c3e73aa 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -68,6 +68,8 @@ public: Utils::Environment baseEnvironment() const; + BuildType buildType() const; + protected: CMakeBuildConfiguration(CMakeTarget *parent, CMakeBuildConfiguration *source); virtual bool fromMap(const QVariantMap &map); diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp index ca16ff6c86e..d0f7117a301 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp @@ -223,3 +223,9 @@ BuildConfiguration *GenericBuildConfigurationFactory::restore(ProjectExplorer::T delete bc; return 0; } + +BuildConfiguration::BuildType GenericBuildConfiguration::buildType() const +{ + return Unknown; +} + diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h index 19e7dea045d..37f5fbd8144 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h @@ -62,6 +62,8 @@ public: ProjectExplorer::IOutputParser *createOutputParser() const; + BuildType buildType() const; + protected: GenericBuildConfiguration(GenericTarget *parent, GenericBuildConfiguration *source); GenericBuildConfiguration(GenericTarget *parent, const QString &id); diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index f60597bcad4..6d1a97cb928 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -99,6 +99,13 @@ public: virtual ProjectExplorer::ToolChain *toolChain() const; virtual void setToolChain(ProjectExplorer::ToolChain *tc); + enum BuildType { + Unknown, + Debug, + Release + }; + virtual BuildType buildType() const = 0; + signals: void environmentChanged(); void buildDirectoryChanged(); diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index 84de59dfed3..1a0f67175bd 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -868,3 +868,12 @@ void Qt4BuildConfiguration::importFromBuildDirectory() } } } + +BuildConfiguration::BuildType Qt4BuildConfiguration::buildType() const +{ + if (qmakeBuildConfiguration() & QtVersion::DebugBuild) + return Debug; + else + return Release; +} + diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index d194a4f502f..e645253e724 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -124,6 +124,8 @@ public: /// \internal For Qt4Project, since that manages the parsing information void setEnabled(bool enabled); + BuildType buildType() const; + public slots: void importFromBuildDirectory();