Browse Source

Improved resource path detection on systems without clang/clang++ installed

merge-requests/413/head
eidheim 3 years ago
parent
commit
ddd53d98fb
  1. 4
      CMakeLists.txt
  2. 24
      src/compile_commands.cpp

4
CMakeLists.txt

@ -100,9 +100,7 @@ else()
find_package(LibClang REQUIRED) find_package(LibClang REQUIRED)
endif() endif()
if(APPLE) add_definitions(-DLIBCLANG_LIBRARY_DIR="${LIBCLANG_LIBRARY_DIR}")
add_definitions(-DLIBCLANG_LIBRARY_DIR="${LIBCLANG_LIBRARY_DIR}")
endif()
set(BUILD_TESTING_SAVED ${BUILD_TESTING}) set(BUILD_TESTING_SAVED ${BUILD_TESTING})
set(BUILD_TESTING OFF CACHE BOOL "Disable sub-project tests" FORCE) set(BUILD_TESTING OFF CACHE BOOL "Disable sub-project tests" FORCE)

24
src/compile_commands.cpp

@ -107,14 +107,22 @@ std::vector<std::string> CompileCommands::get_arguments(const boost::filesystem:
} }
#else #else
static auto resource_path = []() -> std::string { static auto resource_path = []() -> std::string {
std::stringstream stdin_stream, stdout_stream; if(!filesystem::find_executable("clang++").empty()) {
auto exit_status = Terminal::get().process(stdin_stream, stdout_stream, "clang++ -print-resource-dir"); std::stringstream stdin_stream, stdout_stream;
if(exit_status != 0) auto exit_status = Terminal::get().process(stdin_stream, stdout_stream, "clang++ -print-resource-dir");
return {}; if(exit_status != 0)
auto path = stdout_stream.str(); return {};
if(!path.empty()) auto path = stdout_stream.str();
path.pop_back(); if(!path.empty())
return path; path.pop_back();
return path;
}
else {
boost::system::error_code ec;
for(boost::filesystem::directory_iterator it(boost::filesystem::path(LIBCLANG_LIBRARY_DIR) / "clang", ec), end; it != end; ++it)
return it->path().string();
}
return {};
}(); }();
if(!resource_path.empty()) { if(!resource_path.empty()) {
arguments.emplace_back("-resource-dir"); arguments.emplace_back("-resource-dir");

Loading…
Cancel
Save