summaryrefslogtreecommitdiffstats
path: root/Source/cmFileCommand.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2012-06-13 12:42:39 (GMT)
committerBrad King <brad.king@kitware.com>2012-06-13 12:50:44 (GMT)
commita41557a2c8e92f1720b6a38688275c5afa9cc67b (patch)
tree877ba2d19162578eaae0b4f449f798f71ae26dfd /Source/cmFileCommand.cxx
parentd17c58c8534ba68e527a79f33fad60c502ebdde1 (diff)
downloadCMake-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.cxx6
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;