summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/cmFileCommand.cxx14
-rw-r--r--Source/cmFileCommand.h6
2 files changed, 18 insertions, 2 deletions
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index e8e64a4438..bbd8396978 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -672,6 +672,18 @@ bool cmFileCommand::HandleGlobCommand(std::vector<std::string> const& args,
bool first = true;
for ( ; i != args.end(); ++i )
{
+ if ( *i == "RECURSE_SYMLINKS_OFF" )
+ {
+ g.RecurseThroughSymlinksOff();
+ ++i;
+ if ( i == args.end() )
+ {
+ this->SetError(
+ "GLOB requires a glob expression after RECURSE_SYMLINKS_OFF");
+ return false;
+ }
+ }
+
if ( *i == "RELATIVE" )
{
++i; // skip RELATIVE
@@ -688,6 +700,7 @@ bool cmFileCommand::HandleGlobCommand(std::vector<std::string> const& args,
return false;
}
}
+
if ( !cmsys::SystemTools::FileIsFullPath(i->c_str()) )
{
std::string expr = this->Makefile->GetCurrentDirectory();
@@ -706,6 +719,7 @@ bool cmFileCommand::HandleGlobCommand(std::vector<std::string> const& args,
{
g.FindFiles(*i);
}
+
std::vector<std::string>::size_type cc;
std::vector<std::string>& files = g.GetFiles();
for ( cc = 0; cc < files.size(); cc ++ )
diff --git a/Source/cmFileCommand.h b/Source/cmFileCommand.h
index 4173859876..5d63fca2ca 100644
--- a/Source/cmFileCommand.h
+++ b/Source/cmFileCommand.h
@@ -77,7 +77,7 @@ public:
" [NO_HEX_CONVERSION])\n"
" file(GLOB variable [RELATIVE path] [globbing expressions]...)\n"
" file(GLOB_RECURSE variable [RELATIVE path] \n"
- " [globbing expressions]...)\n"
+ " [RECURSE_SYMLINKS_OFF] [globbing expressions]...)\n"
" file(REMOVE [file1 ...])\n"
" file(REMOVE_RECURSE [file1 ...])\n"
" file(MAKE_DIRECTORY [directory1 directory2 ...])\n"
@@ -126,7 +126,9 @@ public:
" f[3-5].txt - match files f3.txt, f4.txt, f5.txt\n"
"GLOB_RECURSE will generate similar list as the regular GLOB, except "
"it will traverse all the subdirectories of the matched directory and "
- "match the files.\n"
+ "match the files. Subdirectories that are symlinks are traversed by "
+ "default to match the behavior or older CMake releases. Use "
+ "RECURSE_SYMLINKS_OFF to prevent recursion through symlinks.\n"
"Examples of recursive globbing include:\n"
" /dir/*.py - match all python files in /dir and subdirectories\n"
"MAKE_DIRECTORY will create the given directories, also if their parent "