summaryrefslogtreecommitdiffstats
path: root/Source/cmFileCommand.cxx
diff options
context:
space:
mode:
authorKyle Edwards <kyle.edwards@kitware.com>2018-12-05 20:27:08 (GMT)
committerKyle Edwards <kyle.edwards@kitware.com>2018-12-06 15:11:51 (GMT)
commit98a39be6cfb7b229ff78f7045c6d5bcd6b6c7509 (patch)
tree1f9810b45b6d79710d89457d2db530cf5be24613 /Source/cmFileCommand.cxx
parent81bea69bd1d52977c3782d26560f34563394f487 (diff)
downloadCMake-98a39be6cfb7b229ff78f7045c6d5bcd6b6c7509.zip
CMake-98a39be6cfb7b229ff78f7045c6d5bcd6b6c7509.tar.gz
CMake-98a39be6cfb7b229ff78f7045c6d5bcd6b6c7509.tar.bz2
file: Add READ_SYMLINK sub-command
Diffstat (limited to 'Source/cmFileCommand.cxx')
-rw-r--r--Source/cmFileCommand.cxx30
1 files changed, 30 insertions, 0 deletions
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index 73ff5a1..7fc717d 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -180,6 +180,9 @@ bool cmFileCommand::InitialPass(std::vector<std::string> const& args,
if (subCommand == "SIZE") {
return this->HandleSizeCommand(args);
}
+ if (subCommand == "READ_SYMLINK") {
+ return this->HandleReadSymlinkCommand(args);
+ }
std::string e = "does not recognize sub-command " + subCommand;
this->SetError(e);
@@ -3638,3 +3641,30 @@ bool cmFileCommand::HandleSizeCommand(std::vector<std::string> const& args)
return true;
}
+
+bool cmFileCommand::HandleReadSymlinkCommand(
+ std::vector<std::string> const& args)
+{
+ if (args.size() != 3) {
+ std::ostringstream e;
+ e << args[0] << " requires a file name and output variable";
+ this->SetError(e.str());
+ return false;
+ }
+
+ const std::string& filename = args[1];
+ const std::string& outputVariable = args[2];
+
+ std::string result;
+ if (!cmSystemTools::ReadSymlink(filename, result)) {
+ std::ostringstream e;
+ e << "READ_SYMLINK requested of path that is not a symlink:\n "
+ << filename;
+ this->SetError(e.str());
+ return false;
+ }
+
+ this->Makefile->AddDefinition(outputVariable, result.c_str());
+
+ return true;
+}