logic: add clang msvc compatibility flags to newly created codeblocks and sonargraph sourcegroups

This commit is contained in:
mlangkabel
2018-06-15 14:01:56 +02:00
parent f0b423b319
commit 0a6347fa43
2 changed files with 51 additions and 46 deletions
@@ -42,6 +42,49 @@
#include "Application.h" #include "Application.h"
namespace
{
bool applicationSettingsContainVisualStudioHeaderSearchPaths()
{
std::vector<FilePath> expandedPaths;
const std::shared_ptr<CombinedPathDetector> headerPathDetector = utility::getCxxVsHeaderPathDetector();
for (const std::string& detectorName : headerPathDetector->getWorkingDetectorNames())
{
for (const FilePath& path : headerPathDetector->getPaths(detectorName))
{
utility::append(expandedPaths, path.expandEnvironmentVariables());
}
}
std::vector<FilePath> usedExpandedGlobalHeaderSearchPaths =
ApplicationSettings::getInstance()->getHeaderSearchPathsExpanded();
for (const FilePath& usedExpandedPath : usedExpandedGlobalHeaderSearchPaths)
{
for (const FilePath& expandedPath : expandedPaths)
{
if (expandedPath == usedExpandedPath)
{
return true;
}
}
}
return false;
}
void addMsvcCompatibilityFlagsOnDemand(std::shared_ptr<SourceGroupSettingsCxx> settings)
{
if (applicationSettingsContainVisualStudioHeaderSearchPaths())
{
std::vector<std::wstring> flags = settings->getCompilerFlags();
flags.push_back(L"-fms-extensions");
flags.push_back(L"-fms-compatibility");
flags.push_back(L"-fms-compatibility-version=19");
settings->setCompilerFlags(flags);
}
}
}
QtProjectWizzard::QtProjectWizzard(QWidget* parent) QtProjectWizzard::QtProjectWizzard(QWidget* parent)
: QtProjectWizzardWindow(parent, false) : QtProjectWizzardWindow(parent, false)
, m_windowStack(this) , m_windowStack(this)
@@ -256,34 +299,6 @@ void QtProjectWizzard::handlePrevious()
QtWindow::handlePrevious(); QtWindow::handlePrevious();
} }
bool QtProjectWizzard::applicationSettingsContainVisualStudioHeaderSearchPaths()
{
std::vector<FilePath> expandedPaths;
const std::shared_ptr<CombinedPathDetector> headerPathDetector = utility::getCxxVsHeaderPathDetector();
for (const std::string& detectorName : headerPathDetector->getWorkingDetectorNames())
{
for (const FilePath& path: headerPathDetector->getPaths(detectorName))
{
utility::append(expandedPaths, path.expandEnvironmentVariables());
}
}
std::vector<FilePath> usedExpandedGlobalHeaderSearchPaths =
ApplicationSettings::getInstance()->getHeaderSearchPathsExpanded();
for (const FilePath& usedExpandedPath: usedExpandedGlobalHeaderSearchPaths)
{
for (const FilePath& expandedPath: expandedPaths)
{
if (expandedPath == usedExpandedPath)
{
return true;
}
}
}
return false;
}
QtProjectWizzardWindow* QtProjectWizzard::createWindowWithContent( QtProjectWizzardWindow* QtProjectWizzard::createWindowWithContent(
std::function<QtProjectWizzardContent*(QtProjectWizzardWindow*)> func std::function<QtProjectWizzardContent*(QtProjectWizzardWindow*)> func
){ ){
@@ -748,23 +763,13 @@ void QtProjectWizzard::selectedProjectType(SourceGroupType sourceGroupType)
switch (sourceGroupType) switch (sourceGroupType)
{ {
case SOURCE_GROUP_C_EMPTY: case SOURCE_GROUP_C_EMPTY:
m_newSourceGroupSettings = std::make_shared<SourceGroupSettingsCEmpty>(sourceGroupId, m_projectSettings.get());
addMsvcCompatibilityFlagsOnDemand(std::dynamic_pointer_cast<SourceGroupSettingsCxx>(m_newSourceGroupSettings));
emptySourceGroup();
break;
case SOURCE_GROUP_CPP_EMPTY: case SOURCE_GROUP_CPP_EMPTY:
if (sourceGroupType == SOURCE_GROUP_C_EMPTY) m_newSourceGroupSettings = std::make_shared<SourceGroupSettingsCppEmpty>(sourceGroupId, m_projectSettings.get());
{ addMsvcCompatibilityFlagsOnDemand(std::dynamic_pointer_cast<SourceGroupSettingsCxx>(m_newSourceGroupSettings));
m_newSourceGroupSettings = std::make_shared<SourceGroupSettingsCEmpty>(sourceGroupId, m_projectSettings.get());
}
else
{
m_newSourceGroupSettings = std::make_shared<SourceGroupSettingsCppEmpty>(sourceGroupId, m_projectSettings.get());
}
if (applicationSettingsContainVisualStudioHeaderSearchPaths())
{
std::vector<std::wstring> flags;
flags.push_back(L"-fms-extensions");
flags.push_back(L"-fms-compatibility");
flags.push_back(L"-fms-compatibility-version=19");
std::dynamic_pointer_cast<SourceGroupSettingsCxx>(m_newSourceGroupSettings)->setCompilerFlags(flags);
}
emptySourceGroup(); emptySourceGroup();
break; break;
case SOURCE_GROUP_CXX_CDB: case SOURCE_GROUP_CXX_CDB:
@@ -773,10 +778,12 @@ void QtProjectWizzard::selectedProjectType(SourceGroupType sourceGroupType)
break; break;
case SOURCE_GROUP_CXX_CODEBLOCKS: case SOURCE_GROUP_CXX_CODEBLOCKS:
m_newSourceGroupSettings = std::make_shared<SourceGroupSettingsCxxCodeblocks>(sourceGroupId, m_projectSettings.get()); m_newSourceGroupSettings = std::make_shared<SourceGroupSettingsCxxCodeblocks>(sourceGroupId, m_projectSettings.get());
addMsvcCompatibilityFlagsOnDemand(std::dynamic_pointer_cast<SourceGroupSettingsCxx>(m_newSourceGroupSettings));
emptySourceGroupCxxCodeblocks(); emptySourceGroupCxxCodeblocks();
break; break;
case SOURCE_GROUP_CXX_SONARGRAPH: case SOURCE_GROUP_CXX_SONARGRAPH:
m_newSourceGroupSettings = std::make_shared<SourceGroupSettingsCxxSonargraph>(sourceGroupId, m_projectSettings.get()); m_newSourceGroupSettings = std::make_shared<SourceGroupSettingsCxxSonargraph>(sourceGroupId, m_projectSettings.get());
addMsvcCompatibilityFlagsOnDemand(std::dynamic_pointer_cast<SourceGroupSettingsCxx>(m_newSourceGroupSettings));
emptySourceGroupCxxSonargraph(); emptySourceGroupCxxSonargraph();
break; break;
case SOURCE_GROUP_CXX_VS: case SOURCE_GROUP_CXX_VS:
@@ -41,8 +41,6 @@ protected:
virtual void handlePrevious() override; virtual void handlePrevious() override;
private: private:
static bool applicationSettingsContainVisualStudioHeaderSearchPaths();
QtProjectWizzardWindow* createWindowWithContent( QtProjectWizzardWindow* createWindowWithContent(
std::function<QtProjectWizzardContent*(QtProjectWizzardWindow*)> func); std::function<QtProjectWizzardContent*(QtProjectWizzardWindow*)> func);