Browse Source

Fixes #401: when parsing header files, try use the same flags as source files in the same folder

merge-requests/395/head
eidheim 7 years ago
parent
commit
0434a40379
  1. 25
      src/compile_commands.cc

25
src/compile_commands.cc

@ -82,12 +82,33 @@ CompileCommands::CompileCommands(const boost::filesystem::path &build_path) {
} }
} }
std::vector<std::string> CompileCommands::get_arguments(const boost::filesystem::path &build_path, const boost::filesystem::path &file_path) { std::vector<std::string> CompileCommands::get_arguments(const boost::filesystem::path &build_path, const boost::filesystem::path &file_path_) {
auto file_path = file_path_;
std::string default_std_argument = "-std=c++1y"; std::string default_std_argument = "-std=c++1y";
auto extension = file_path.extension().string(); auto extension = file_path.extension().string();
bool is_header = CompileCommands::is_header(file_path) || extension.empty(); // Include std C++ headers that are without extensions bool is_header = CompileCommands::is_header(file_path) || extension.empty(); // Include std C++ headers that are without extensions
// If header file, use a source file in the same folder if one exists
if(is_header && !extension.empty()) {
auto parent_path = file_path.parent_path();
auto stem = file_path.stem();
CompileCommands compile_commands(build_path);
bool found = false;
for(auto &command : compile_commands.commands) {
// Priority on source file with the same filename (extension excluded) as the header file
if(command.file.stem() == stem) {
file_path = command.file;
break;
}
if(!found && command.file.parent_path() == parent_path) {
file_path = command.file;
found = true;
}
}
}
std::vector<std::string> arguments; std::vector<std::string> arguments;
if(!build_path.empty()) { if(!build_path.empty()) {
clangmm::CompilationDatabase db(build_path.string()); clangmm::CompilationDatabase db(build_path.string());
@ -137,7 +158,7 @@ std::vector<std::string> CompileCommands::get_arguments(const boost::filesystem:
arguments.emplace_back("-I" + (boost::filesystem::path(env_msystem_prefix) / "lib/clang" / clang_version / "include").string()); arguments.emplace_back("-I" + (boost::filesystem::path(env_msystem_prefix) / "lib/clang" / clang_version / "include").string());
#endif #endif
} }
// Do not add -fretain-comments-from-system-headers if pch is used, since the pch was most likely made without this flag // Do not add -fretain-comments-from-system-headers if pch is used, since the pch was most likely made without this flag
if(std::none_of(arguments.begin(), arguments.end(), [](const std::string &argument) { return argument == "-include-pch"; })) if(std::none_of(arguments.begin(), arguments.end(), [](const std::string &argument) { return argument == "-include-pch"; }))
arguments.emplace_back("-fretain-comments-from-system-headers"); arguments.emplace_back("-fretain-comments-from-system-headers");

Loading…
Cancel
Save