From a41557a2c8e92f1720b6a38688275c5afa9cc67b Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 13 Jun 2012 08:42:39 -0400 Subject: install: Fix FILES_MATCHING on case-sensitive Mac filesystems (#13177) Windows and Apple machines have predominantly used case-insensitive filesystems so our file(INSTALL) command uses case-insensitive pattern matching. It is implemented by converting the pattern and file path to lower case before matching. The FILES_MATCHING option is implemented by excluding a path that does not match any pattern unless it is a directory that must be searched recursively. However, the test that an excluded path is a directory is executed on the lower-case path and therefore fails on mixed-case input paths on case-sensitive filesystems. Fix the file(INSTALL) implementation to use the lower-case path only for pattern matching and preserve the original path for tests against the real filesystem. --- Source/cmFileCommand.cxx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index 3f14fa1..aab6446 100644 --- a/Source/cmFileCommand.cxx +++ b/Source/cmFileCommand.cxx @@ -1003,7 +1003,9 @@ protected: // Match rules are case-insensitive on some platforms. #if defined(_WIN32) || defined(__APPLE__) || defined(__CYGWIN__) std::string lower = cmSystemTools::LowerCase(file); - file = lower.c_str(); + const char* file_to_match = lower.c_str(); +#else + const char* file_to_match = file; #endif // Collect properties from all matching rules. @@ -1012,7 +1014,7 @@ protected: for(std::vector::iterator mr = this->MatchRules.begin(); mr != this->MatchRules.end(); ++mr) { - if(mr->Regex.find(file)) + if(mr->Regex.find(file_to_match)) { matched = true; result.Exclude |= mr->Properties.Exclude; -- cgit v0.12