diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index e68d3f0e390..10468ac7900 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -426,6 +426,33 @@ CMakeBuildConfigurationFactory::CMakeBuildConfigurationFactory(QObject *parent) ProjectExplorer::IBuildConfigurationFactory(parent) { } +CMakeBuildConfigurationFactory::BuildType CMakeBuildConfigurationFactory::buildTypeFromByteArray(const QByteArray &in) +{ + const QByteArray bt = in.toLower(); + if (bt == "debug") + return BuildTypeDebug; + if (bt == "release") + return BuildTypeRelease; + if (bt == "relwithdebinfo") + return BuildTypeRelWithDebInfo; + if (bt == "minsizerel") + return BuildTypeMinSizeRel; + return BuildTypeNone; +} + +BuildConfiguration::BuildType CMakeBuildConfigurationFactory::cmakeBuildTypeToBuildType(const CMakeBuildConfigurationFactory::BuildType &in) +{ + // Cover all common CMake build types + if (in == BuildTypeRelease || in == BuildTypeMinSizeRel) + return BuildConfiguration::Release; + else if (in == BuildTypeDebug) + return BuildConfiguration::Debug; + else if (in == BuildTypeRelWithDebInfo) + return BuildConfiguration::Profile; + else + return BuildConfiguration::Unknown; +} + int CMakeBuildConfigurationFactory::priority(const ProjectExplorer::Target *parent) const { return canHandle(parent) ? 0 : -1; @@ -603,14 +630,14 @@ CMakeBuildInfo *CMakeBuildConfigurationFactory::createBuildInfo(const ProjectExp ProjectExplorer::BuildConfiguration::BuildType CMakeBuildConfiguration::buildType() const { - QString cmakeBuildType; + QByteArray cmakeBuildTypeName; QFile cmakeCache(buildDirectory().toString() + QLatin1String("/CMakeCache.txt")); if (cmakeCache.open(QIODevice::ReadOnly)) { while (!cmakeCache.atEnd()) { QByteArray line = cmakeCache.readLine(); if (line.startsWith("CMAKE_BUILD_TYPE")) { if (int pos = line.indexOf('=')) - cmakeBuildType = QString::fromLocal8Bit(line.mid(pos + 1).trimmed()); + cmakeBuildTypeName = line.mid(pos + 1).trimmed(); break; } } @@ -618,17 +645,9 @@ ProjectExplorer::BuildConfiguration::BuildType CMakeBuildConfiguration::buildTyp } // Cover all common CMake build types - if (cmakeBuildType.compare(QLatin1String("Release"), Qt::CaseInsensitive) == 0 - || cmakeBuildType.compare(QLatin1String("MinSizeRel"), Qt::CaseInsensitive) == 0) { - return Release; - } else if (cmakeBuildType.compare(QLatin1String("Debug"), Qt::CaseInsensitive) == 0 - || cmakeBuildType.compare(QLatin1String("DebugFull"), Qt::CaseInsensitive) == 0) { - return Debug; - } else if (cmakeBuildType.compare(QLatin1String("RelWithDebInfo"), Qt::CaseInsensitive) == 0) { - return Profile; - } - - return Unknown; + const CMakeBuildConfigurationFactory::BuildType cmakeBuildType + = CMakeBuildConfigurationFactory::buildTypeFromByteArray(cmakeBuildTypeName); + return CMakeBuildConfigurationFactory::cmakeBuildTypeToBuildType(cmakeBuildType); } } // namespace Internal diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index c39a9d18316..bfbe5135a45 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -131,6 +131,15 @@ class CMakeBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurati public: CMakeBuildConfigurationFactory(QObject *parent = 0); + enum BuildType { BuildTypeNone = 0, + BuildTypeDebug = 1, + BuildTypeRelease = 2, + BuildTypeRelWithDebInfo = 3, + BuildTypeMinSizeRel = 4, + BuildTypeLast = 5 }; + static BuildType buildTypeFromByteArray(const QByteArray &in); + static ProjectExplorer::BuildConfiguration::BuildType cmakeBuildTypeToBuildType(const BuildType &in); + int priority(const ProjectExplorer::Target *parent) const override; QList availableBuilds(const ProjectExplorer::Target *parent) const override; int priority(const ProjectExplorer::Kit *k, const QString &projectPath) const override; @@ -147,13 +156,6 @@ public: private: bool canHandle(const ProjectExplorer::Target *t) const; - enum BuildType { BuildTypeNone = 0, - BuildTypeDebug = 1, - BuildTypeRelease = 2, - BuildTypeRelWithDebInfo = 3, - BuildTypeMinSizeRel = 4, - BuildTypeLast = 5 }; - CMakeBuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, const QString &sourceDir, BuildType buildType) const;