diff options
author | Brad King <brad.king@kitware.com> | 2012-06-13 12:42:39 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2012-06-13 12:50:44 (GMT) |
commit | a41557a2c8e92f1720b6a38688275c5afa9cc67b (patch) | |
tree | 877ba2d19162578eaae0b4f449f798f71ae26dfd /Source/cmFileCommand.cxx | |
parent | d17c58c8534ba68e527a79f33fad60c502ebdde1 (diff) | |
download | CMake-a41557a2c8e92f1720b6a38688275c5afa9cc67b.zip CMake-a41557a2c8e92f1720b6a38688275c5afa9cc67b.tar.gz CMake-a41557a2c8e92f1720b6a38688275c5afa9cc67b.tar.bz2 |
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.
Diffstat (limited to 'Source/cmFileCommand.cxx')
-rw-r--r-- | Source/cmFileCommand.cxx | 6 |
1 files 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<MatchRule>::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; |