diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index e8e64a4438616389a559b9e58ab42df7ec025a8b..bbd8396978aaceae831f4e00369fc6fc8a098c15 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 41738598765ced29bfe0d520428e5ba2846567ca..5d63fca2ca13407803d9e7334a5176b40937d2f9 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 "