From b75dd2abe1729465c32286b6e908662a5fd7d6f4 Mon Sep 17 00:00:00 2001 From: Manuel Dobusch Date: Wed, 30 Mar 2016 13:37:37 +0200 Subject: [PATCH] logic: vs compiler flags Added compiler flags from VS solution and vs compatibility flags. --- bin/test/data/log/test_log.txt | 287 +++++++++++------- src/lib/utility/solution/ISolutionParser.h | 1 + .../solution/SolutionParserCodeBlocks.cpp | 7 + .../solution/SolutionParserCodeBlocks.h | 1 + .../utility/solution/SolutionParserEclipse.h | 2 +- .../solution/SolutionParserVisualStudio.cpp | 102 ++++++- .../solution/SolutionParserVisualStudio.h | 6 + .../project_wizzard/QtProjectWizzard.cpp | 4 +- .../QtProjectWizzardContentSelect.cpp | 19 +- .../QtProjectWizzardContentSelect.h | 4 +- 10 files changed, 300 insertions(+), 133 deletions(-) diff --git a/bin/test/data/log/test_log.txt b/bin/test/data/log/test_log.txt index 92ffdb6b..523dd8f6 100644 --- a/bin/test/data/log/test_log.txt +++ b/bin/test/data/log/test_log.txt @@ -1,22 +1,171 @@ -ConfigManager.cpp WARNING: value path/to/nowhere is not present in config. -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:1:20 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:1:20 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:1:11 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:1:13 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:7:15 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:5:20 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:48 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:7:20 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:3:20 -CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml Token.cpp ERROR: Location Id was not referenced by this Token. Node.cpp WARNING: Cannot change NodeType after it was already set from namespace to class Edge.cpp ERROR: Nodes are not plain copies. @@ -65,106 +214,8 @@ Edge.cpp ERROR: Nodes are not plain copies. NetworkProtocolHelper.cpp ERROR: Failed to parse message, invalid type token NetworkProtocolHelper.cpp ERROR: Failed to parse setActiveToken message, invalid token count Settings.cpp WARNING: File for Settings not found: data/SettingsTestSuite/wrong_settings.xml -ConfigManager.cpp WARNING: value Bool is not present in config. -ConfigManager.cpp WARNING: value Int is not present in config. -ConfigManager.cpp WARNING: value Float is not present in config. -ConfigManager.cpp WARNING: value String is not present in config. Settings.cpp WARNING: File for Settings not found: data/SettingsTestSuite/wrong_settings.xml -ConfigManager.cpp WARNING: value Bool is not present in config. -ConfigManager.cpp WARNING: value Int is not present in config. -ConfigManager.cpp WARNING: value Float is not present in config. -ConfigManager.cpp WARNING: value String is not present in config. - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: typedef: type - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: class: Class - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: struct: Struct - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: global: Global - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: field: m_field - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: field: Struct::m_field - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: function: bool isTrue(char) - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: method: void isMethod(bool) - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: method: void Class::isMethod(bool) - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: namespace: utility - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: enum: Category - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: enum: Class::Category - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: enum constant: VALUE - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: class: ClassA - INFO: class: ClassB - INFO: inheritance: ClassB : ClassA - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: struct: StructA - INFO: struct: StructB - INFO: inheritance: StructB : StructA - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: method: void A::isMethod(bool) - INFO: method: void B::isMethod(bool) - INFO: override: void A::isMethod(bool) -> void B::isMethod(bool) - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: function: bool isTrue(char) - INFO: function: void func(bool) - INFO: call: bool isTrue(char) -> void func(bool) - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: global: global - INFO: function: bool isTrue(char) - INFO: call: global -> bool isTrue(char) - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: function: bool isTrue(char) - INFO: field: Foo::m_field - INFO: field usage: bool isTrue(char) -> Foo::m_field - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: function: bool isTrue(char) - INFO: global: global - INFO: global usage: bool isTrue(char) -> global - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: function: Struct isTrue(char) - INFO: struct: Struct - INFO: type usage: Struct isTrue(char) -> Struct - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: file: file.h < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.h - INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: file: file.h < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.h - INFO: file: file.cpp < 0:0 0:0> - INFO: include: file.h - INFO: file: file.cpp < 0:0 0:0> - INFO: file: file.h < 0:0 0:0> +TextAccess.cpp ERROR: Could not open file path/to/test.h TextAccess.cpp WARNING: Index 'firstLine' has to be lower or equal index 'lastLine', is 3 > 2 TextAccess.cpp WARNING: Tried to access index 10. Maximum index is 8 TextAccess.cpp WARNING: Tried to access index 10. Maximum index is 8 diff --git a/src/lib/utility/solution/ISolutionParser.h b/src/lib/utility/solution/ISolutionParser.h index 4c0ad5b1..6475a1fa 100644 --- a/src/lib/utility/solution/ISolutionParser.h +++ b/src/lib/utility/solution/ISolutionParser.h @@ -26,6 +26,7 @@ public: virtual std::vector getProjects() = 0; virtual std::vector getProjectFiles() = 0; virtual std::vector getProjectItems() = 0; + virtual std::vector getCompileFlags() = 0; virtual ProjectSettings getProjectSettings(const std::string& solutionFilePath) = 0; diff --git a/src/lib/utility/solution/SolutionParserCodeBlocks.cpp b/src/lib/utility/solution/SolutionParserCodeBlocks.cpp index f666c254..8b9eba0a 100644 --- a/src/lib/utility/solution/SolutionParserCodeBlocks.cpp +++ b/src/lib/utility/solution/SolutionParserCodeBlocks.cpp @@ -167,6 +167,13 @@ std::vector SolutionParserCodeBlocks::getIncludePaths() return includePaths; } +std::vector SolutionParserCodeBlocks::getCompileFlags() +{ + std::vector compilerFlags; + + return compilerFlags; +} + ProjectSettings SolutionParserCodeBlocks::getProjectSettings(const std::string& solutionFilePath) { openSolutionFile(solutionFilePath); diff --git a/src/lib/utility/solution/SolutionParserCodeBlocks.h b/src/lib/utility/solution/SolutionParserCodeBlocks.h index 077d1fd2..c60b5336 100644 --- a/src/lib/utility/solution/SolutionParserCodeBlocks.h +++ b/src/lib/utility/solution/SolutionParserCodeBlocks.h @@ -19,6 +19,7 @@ public: virtual std::vector getProjectFiles(); virtual std::vector getProjectItems(); virtual std::vector getIncludePaths(); + virtual std::vector getCompileFlags(); virtual ProjectSettings getProjectSettings(const std::string& solutionFilePath); diff --git a/src/lib/utility/solution/SolutionParserEclipse.h b/src/lib/utility/solution/SolutionParserEclipse.h index 127f64ec..b3033583 100644 --- a/src/lib/utility/solution/SolutionParserEclipse.h +++ b/src/lib/utility/solution/SolutionParserEclipse.h @@ -8,4 +8,4 @@ class SolutionParserEclipse }; -#endif // SOLUTION_PARSER_ECLIPSE_H \ No newline at end of file +#endif // SOLUTION_PARSER_ECLIPSE_H diff --git a/src/lib/utility/solution/SolutionParserVisualStudio.cpp b/src/lib/utility/solution/SolutionParserVisualStudio.cpp index 16f64dcf..043769e0 100644 --- a/src/lib/utility/solution/SolutionParserVisualStudio.cpp +++ b/src/lib/utility/solution/SolutionParserVisualStudio.cpp @@ -12,8 +12,11 @@ #include "utility/logging/logging.h" SolutionParserVisualStudio::SolutionParserVisualStudio() + : m_compatibilityFlags() { - + m_compatibilityFlags.push_back("-fms-extensions"); + m_compatibilityFlags.push_back("-fms-compatibility"); + m_compatibilityFlags.push_back("-fms-compatibility-version=19.00"); } SolutionParserVisualStudio::~SolutionParserVisualStudio() @@ -107,6 +110,62 @@ std::vector SolutionParserVisualStudio::getIncludePaths() return includePaths; } +std::vector SolutionParserVisualStudio::getCompileFlags() +{ + std::vector compilerFlags; + + std::vector projectFiles = getProjectFiles(); + + std::vector validExtensions; + validExtensions.push_back(".c"); + validExtensions.push_back(".cpp"); + validExtensions.push_back(".h"); + validExtensions.push_back(".hpp"); + + for (unsigned int i = 0; i < projectFiles.size(); i++) + { + TiXmlDocument doc; + doc.Parse(projectFiles[i].c_str(), 0, TIXML_ENCODING_UTF8); + + std::string error = doc.ErrorDesc(); + + if (error.length() > 0) + { + LOG_ERROR_STREAM(<< "Failed to parse project file " << i << ": " << error); + continue; + } + + std::vector nodes = SolutionParserUtility::getAllTagsByName(doc.RootElement(), "PreprocessorDefinitions"); + + for (unsigned int j = 0; j < nodes.size(); j++) + { + compilerFlags.push_back(std::string(nodes[j]->GetText())); + } + } + + compilerFlags = seperateCompilerFlags(compilerFlags); + + for (unsigned int i = 0; i < compilerFlags.size(); i++) + { + compilerFlags[i] = "-D " + compilerFlags[i]; + } + + for (unsigned int i = 0; i < m_compatibilityFlags.size(); i++) + { + compilerFlags.push_back(m_compatibilityFlags[i]); + } + + //for (unsigned int i = 0; i < compilerFlags.size(); i++) + //{ + // LOG_INFO_STREAM(<< "flag: " << compilerFlags[i]); + //} + + std::set s(compilerFlags.begin(), compilerFlags.end()); + compilerFlags.assign(s.begin(), s.end()); + + return compilerFlags; +} + ProjectSettings SolutionParserVisualStudio::getProjectSettings(const std::string& solutionFilePath) { openSolutionFile(solutionFilePath); @@ -131,6 +190,9 @@ ProjectSettings SolutionParserVisualStudio::getProjectSettings(const std::string headerPaths.push_back(FilePath(p)); } + std::vector compilerFlags = getCompileFlags(); + settings.setCompilerFlags(compilerFlags); + settings.setSourcePaths(sourcePaths); settings.setHeaderSearchPaths(headerPaths); @@ -462,3 +524,41 @@ std::vector SolutionParserVisualStudio::seperateIncludePaths(const return seperatedPaths; } + +std::vector SolutionParserVisualStudio::seperateCompilerFlags(const std::vector& compilerFlags) const +{ + std::vector seperatedFlags; + + for (unsigned int i = 0; i < compilerFlags.size(); i++) + { + std::vector paths = seperateCompilerFlags(compilerFlags[i]); + for (unsigned int j = 0; j < paths.size(); j++) + { + seperatedFlags.push_back(paths[j]); + } + } + + return seperatedFlags; +} + +std::vector SolutionParserVisualStudio::seperateCompilerFlags(const std::string& compilerFlags) const +{ + std::string flags = compilerFlags; + std::string seperator = ";"; + + std::vector seperatedFlags; + + size_t pos = flags.find(seperator); + + while (pos != std::string::npos) + { + std::string flag = flags.substr(0, pos); + flags = flags.substr(pos + 1); + + seperatedFlags.push_back(flag); + + pos = flags.find(seperator); + } + + return seperatedFlags; +} diff --git a/src/lib/utility/solution/SolutionParserVisualStudio.h b/src/lib/utility/solution/SolutionParserVisualStudio.h index 4e8644a7..d01d5da6 100644 --- a/src/lib/utility/solution/SolutionParserVisualStudio.h +++ b/src/lib/utility/solution/SolutionParserVisualStudio.h @@ -19,6 +19,7 @@ public: virtual std::vector getProjectFiles(); virtual std::vector getProjectItems(); virtual std::vector getIncludePaths(); + virtual std::vector getCompileFlags(); virtual ProjectSettings getProjectSettings(const std::string& solutionFilePath); @@ -39,6 +40,11 @@ private: std::vector seperateIncludePaths(const std::vector& includePaths) const; std::vector seperateIncludePaths(const std::string& includePaths) const; + + std::vector seperateCompilerFlags(const std::vector& compilerFlags) const; + std::vector seperateCompilerFlags(const std::string& compilerFlags) const; + + std::vector m_compatibilityFlags; }; #endif // SOLUTION_PARSER_VISUAL_STUDIO_H diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp index 6611f8e4..32c2a9a8 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp @@ -37,8 +37,8 @@ QtProjectWizzard::QtProjectWizzard(QWidget* parent) m_parserManager = std::make_shared(); // wip - /*m_parserManager->pushSolutionParser(std::make_shared()); - m_parserManager->pushSolutionParser(std::make_shared());*/ + m_parserManager->pushSolutionParser(std::make_shared()); + m_parserManager->pushSolutionParser(std::make_shared()); } void QtProjectWizzard::showWindow() diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.cpp index 54c4b43c..5cbfe636 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.cpp @@ -65,35 +65,36 @@ void QtProjectWizzardContentSelect::populateWindow(QGridLayout* layout) QToolButton* a = createProjectButton( "empty project", (ResourcePaths::getGuiPath() + "icon/project_256_256.png").c_str()); - QToolButton* b = createProjectButton( - "from Visual\nStudio Solution", (ResourcePaths::getGuiPath() + "icon/project_vs_256_256.png").c_str()); QToolButton* c = createProjectButton( "from Compilation\nDatabase", (ResourcePaths::getGuiPath() + "icon/project_cdb_256_256.png").c_str()); + /*QToolButton* b = createProjectButton( + "from Visual\nStudio Solution", (ResourcePaths::getGuiPath() + "icon/project_vs_256_256.png").c_str());*/ + m_solutionDescription.push_back("Create a new Coati project by defining what files will be analyzed and header search paths."); - m_solutionDescription.push_back("Create a new project from an existing Visual Studio Solution file."); m_solutionDescription.push_back("Create a project from an existing Compilation Database. Compilation Databases can be created from " "cmake projects. Have a look at the " "" "documentation to find out more."); + //m_solutionDescription.push_back("Create a new project from an existing Visual Studio Solution file."); m_buttons = new QButtonGroup(this); m_buttons->addButton(a); - m_buttons->addButton(b); m_buttons->addButton(c); + //m_buttons->addButton(b); m_buttons->setId(a, PROJECT_EMPTY); - m_buttons->setId(b, PROJECT_VS); m_buttons->setId(c, PROJECT_CDB); + //m_buttons->setId(b, PROJECT_VS); QHBoxLayout* hlayout = new QHBoxLayout(); hlayout->addWidget(a); - hlayout->addWidget(b); hlayout->addWidget(c); + //hlayout->addWidget(b); - unsigned int runningId = 3; + unsigned int runningId = 2; std::shared_ptr manager = m_solutionParserManager.lock(); if (manager != NULL) { @@ -177,8 +178,8 @@ void QtProjectWizzardContentSelect::save() switch (m_buttons->checkedId()) { case 0: type = PROJECT_EMPTY; break; - case 1: type = PROJECT_VS; break; - case 2: type = PROJECT_CDB; break; + case 1: type = PROJECT_CDB; break; + case 2: type = PROJECT_VS; break; default: type = PROJECT_VS; break; // use vs for "standard" solutions TODO: change name of enum to reflect this is the default type } diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.h b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.h index 5fcc4f14..37806467 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.h +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.h @@ -15,8 +15,8 @@ public: enum ProjectType : int { PROJECT_EMPTY = 0, - PROJECT_VS = 1, - PROJECT_CDB = 2 + PROJECT_CDB = 1, + PROJECT_VS = 2 }; QtProjectWizzardContentSelect(ProjectSettings* settings, QtProjectWizzardWindow* window, std::weak_ptr solutionParserManager);