diff options
author | David Cole <david.cole@kitware.com> | 2008-08-23 17:33:13 (GMT) |
---|---|---|
committer | David Cole <david.cole@kitware.com> | 2008-08-23 17:33:13 (GMT) |
commit | ccf603f0c2570247b97fb6289aa4990302ada3fb (patch) | |
tree | 2c8f030131c043878b0caf30a908dfe080b8f66c /Source | |
parent | 2e0dd809575c13624a4ae0958fc8293d0f3e1e00 (diff) | |
download | CMake-ccf603f0c2570247b97fb6289aa4990302ada3fb.zip CMake-ccf603f0c2570247b97fb6289aa4990302ada3fb.tar.gz CMake-ccf603f0c2570247b97fb6289aa4990302ada3fb.tar.bz2 |
ENH: Add the RECURSE_SYMLINKS_OFF flag to the FILE GLOB_RECURSE command. Exposes the recently added kwsys capability that prevents recursing through symlinks to CMake scripts.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmFileCommand.cxx | 14 | ||||
-rw-r--r-- | Source/cmFileCommand.h | 6 |
2 files changed, 18 insertions, 2 deletions
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index e8e64a4..bbd8396 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 4173859..5d63fca 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 " |