From 6dd21b47db481a70c61698742438230e2399b639 Mon Sep 17 00:00:00 2001 From: helly25 Date: Sun, 18 Aug 2024 17:52:17 +0000 Subject: [PATCH 1/2] Add pre-processed header support. This is a expanded version of https://github.com/hedronvision/bazel-compile-commands-extractor/pull/205 It adds more header file extensions. --- refresh.template.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/refresh.template.py b/refresh.template.py index 194f365..063a21d 100644 --- a/refresh.template.py +++ b/refresh.template.py @@ -173,7 +173,7 @@ def _parse_headers_from_makefile_deps(d_file_content: str, source_path_for_sanit # For example, `d_file_content` might be: `"foo.o : foo.cc bar.h \\\n baz.hpp"`. target, dependencies = d_file_content.split(': ', 1) # Needs to handle absolute Windows paths, like C:\ target = target.strip() # Remove the optional trailing space. - assert target.endswith(('.o', '.obj')), "Something went wrong in makefile parsing to get headers. The target should be an object file. Output:\n" + d_file_content + assert target.endswith(('.o', '.obj', '.processed')), "Something went wrong in makefile parsing to get headers. The target should be an object file. Output:\n" + d_file_content # Undo shell-like line wrapping because the newlines aren't eaten by shlex.join. Note also that it's the line wrapping is inconsistently generated across compilers and depends on the lengths of the filenames, so you can't just split on the escaped newlines. dependencies = dependencies.replace('\\\n', '') # On Windows, swap out (single) backslash path directory separators for forward slash. Shlex otherwise eats the separators...and Windows gcc intermixes backslash separators with backslash escaped spaces. For a real example of gcc run from Windows, see https://github.com/hedronvision/bazel-compile-commands-extractor/issues/81 @@ -691,8 +691,8 @@ def _get_files(compile_action): _get_files.has_logged_missing_file_error = False # Setup extensions and flags for the whole C-language family. # Clang has a list: https://github.com/llvm/llvm-project/blob/b9f3b7f89a4cb4cf541b7116d9389c73690f78fa/clang/lib/Driver/Types.cpp#L293 -_get_files.c_source_extensions = ('.c', '.i') -_get_files.cpp_source_extensions = ('.cc', '.cpp', '.cxx', '.c++', '.C', '.CC', '.cp', '.CPP', '.C++', '.CXX', '.ii') +_get_files.c_source_extensions = ('.c', '.i', '.h') +_get_files.cpp_source_extensions = ('.cc', '.cpp', '.cxx', '.c++', '.C', '.CC', '.cp', '.CPP', '.C++', '.CXX', '.ii', '.hh', '.hpp', '.hxx') _get_files.objc_source_extensions = ('.m',) _get_files.objcpp_source_extensions = ('.mm', '.M') _get_files.cuda_source_extensions = ('.cu', '.cui') From 4f5eea2f2108651754e1d4b8a9568025fdcb1be9 Mon Sep 17 00:00:00 2001 From: helly25 Date: Tue, 27 Aug 2024 05:45:41 +0000 Subject: [PATCH 2/2] Add '.inl' as possible c source. There is an issue with those as they are typically not meant as stand alone sources. Nonetheless, the tool should just gracefully warn on failure. --- refresh.template.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refresh.template.py b/refresh.template.py index 063a21d..7b80eab 100644 --- a/refresh.template.py +++ b/refresh.template.py @@ -691,7 +691,7 @@ def _get_files(compile_action): _get_files.has_logged_missing_file_error = False # Setup extensions and flags for the whole C-language family. # Clang has a list: https://github.com/llvm/llvm-project/blob/b9f3b7f89a4cb4cf541b7116d9389c73690f78fa/clang/lib/Driver/Types.cpp#L293 -_get_files.c_source_extensions = ('.c', '.i', '.h') +_get_files.c_source_extensions = ('.c', '.i', '.h', '.inl') _get_files.cpp_source_extensions = ('.cc', '.cpp', '.cxx', '.c++', '.C', '.CC', '.cp', '.CPP', '.C++', '.CXX', '.ii', '.hh', '.hpp', '.hxx') _get_files.objc_source_extensions = ('.m',) _get_files.objcpp_source_extensions = ('.mm', '.M')