]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
fix: Handle case-insensitive filesystems when ignoring headers (#1764) master
authortrustytrojan <87675609+trustytrojan@users.noreply.github.com>
Thu, 6 Aug 2026 09:07:19 +0000 (03:07 -0600)
committerGitHub <noreply@github.com>
Thu, 6 Aug 2026 09:07:19 +0000 (11:07 +0200)
Handle case-insensitive filesystems when ignoring headers on Windows.

src/ccache/ccache.cpp
src/ccache/context.cpp

index 6382ea5ef8ce03e82865630a3d42b717f3faa47a..5949319043fc7c4922f369c5d11258b0d8020ec1 100644 (file)
@@ -429,8 +429,12 @@ remember_include_file(Context& ctx,
 
   if (!ctx.ignore_header_paths.empty()) {
     // Canonicalize path for comparison; Clang uses ./header.h.
 
   if (!ctx.ignore_header_paths.empty()) {
     // Canonicalize path for comparison; Clang uses ./header.h.
-    const std::string& canonical_path_str =
+    auto canonical_path_str =
       path_str.str().starts_with("./") ? path_str.str().substr(2) : path_str;
       path_str.str().starts_with("./") ? path_str.str().substr(2) : path_str;
+#ifdef _WIN32
+    // Handle case-insensitive paths by converting to lowercase.
+    canonical_path_str = util::to_lowercase(canonical_path_str);
+#endif
     for (const auto& ignore_header_path : ctx.ignore_header_paths) {
       if (file_path_matches_dir_prefix_or_file(ignore_header_path,
                                                canonical_path_str)) {
     for (const auto& ignore_header_path : ctx.ignore_header_paths) {
       if (file_path_matches_dir_prefix_or_file(ignore_header_path,
                                                canonical_path_str)) {
index adcf9f4565ef18a49c4b269aaa020498412dc2e7..99ff4ec4e5202207c95da69a424eefee4efd809c 100644 (file)
@@ -59,6 +59,12 @@ Context::initialize(util::Args&& compiler_and_args,
   util::logging::init(config.debug(), config.log_file());
   ignore_header_paths =
     util::split_path_list(config.ignore_headers_in_manifest());
   util::logging::init(config.debug(), config.log_file());
   ignore_header_paths =
     util::split_path_list(config.ignore_headers_in_manifest());
+#ifdef _WIN32
+  // Handle case-insensitive paths by converting to lowercase.
+  for (auto& path : ignore_header_paths) {
+    path = util::to_lowercase(path.string());
+  }
+#endif
   set_ignore_options(util::split_into_strings(config.ignore_options(), " "));
 
   // Set default umask for all files created by ccache from now on (if
   set_ignore_options(util::split_into_strings(config.ignore_options(), " "));
 
   // Set default umask for all files created by ccache from now on (if