From 3bb6a279885055acc412a3e46b525116b080da46 Mon Sep 17 00:00:00 2001 From: bug22 Date: Wed, 7 Dec 2016 18:03:46 +0200 Subject: [PATCH] Fixed #7791 (Cppcheck does not expand Visual Studio macros): --project option will now accumulate defines/includes of all applicable item definition groups, and will push back FileSetting items per project configurations only --- lib/importproject.cpp | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/lib/importproject.cpp b/lib/importproject.cpp index 58442dfd7..569918fad 100644 --- a/lib/importproject.cpp +++ b/lib/importproject.cpp @@ -290,6 +290,8 @@ namespace { } bool conditionIsTrue(const ProjectConfiguration &p) const { + if (condition.empty()) + return true; std::string c = '(' + condition + ");"; replaceAll(c, "$(Configuration)", p.configuration); replaceAll(c, "$(Platform)", p.platform); @@ -443,25 +445,28 @@ void ImportProject::importVcxproj(const std::string &filename, std::map::const_iterator c = compileList.begin(); c != compileList.end(); ++c) { for (std::list::const_iterator p = projectConfigurationList.begin(); p != projectConfigurationList.end(); ++p) { + FileSettings fs; + fs.filename = Path::simplifyPath(Path::getPathFromFilename(filename) + *c); + fs.cfg = p->name; + fs.defines = "_MSC_VER=1900;_WIN32=1"; + if (p->platform == "Win32") + fs.platformType = cppcheck::Platform::Win32W; + else if (p->platform == "x64") { + fs.platformType = cppcheck::Platform::Win64; + fs.defines += ";_WIN64=1"; + } + if (useOfMfc) + fs.defines += ";__AFXWIN_H__"; + std::string additionalIncludePaths; for (std::list::const_iterator i = itemDefinitionGroupList.begin(); i != itemDefinitionGroupList.end(); ++i) { if (!i->conditionIsTrue(*p)) continue; - FileSettings fs; - fs.filename = Path::simplifyPath(Path::getPathFromFilename(filename) + *c); - fs.cfg = p->name; - fs.defines = "_MSC_VER=1900;_WIN32=1;" + i->preprocessorDefinitions; - if (p->platform == "Win32") - fs.platformType = cppcheck::Platform::Win32W; - else if (p->platform == "x64") { - fs.platformType = cppcheck::Platform::Win64; - fs.defines += ";_WIN64=1"; - } - if (useOfMfc) - fs.defines += ";__AFXWIN_H__"; - fs.setDefines(fs.defines); - fs.setIncludePaths(Path::getPathFromFilename(filename), toStringList(includePath + ';' + i->additionalIncludePaths), variables); - fileSettings.push_back(fs); + fs.defines += ';' + i->preprocessorDefinitions; + additionalIncludePaths += ';' + i->additionalIncludePaths; } + fs.setDefines(fs.defines); + fs.setIncludePaths(Path::getPathFromFilename(filename), toStringList(includePath + ';' + additionalIncludePaths), variables); + fileSettings.push_back(fs); } } }