|
|
@@ -90,6 +90,7 @@ void CMakeCommandUsage(const char* program)
|
|
|
<< "Available commands: \n"
|
|
|
<< " capabilities - Report capabilities built into cmake "
|
|
|
"in JSON format\n"
|
|
|
+ << " cat <files>... - concat the files and print them to the standard output\n"
|
|
|
<< " chdir dir cmd [args...] - run command in a given directory\n"
|
|
|
<< " compare_files [--ignore-eol] file1 file2\n"
|
|
|
<< " - check if file1 is same as file2\n"
|
|
|
@@ -180,6 +181,13 @@ static bool cmTarFilesFrom(std::string const& file,
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+static void cmCatFile(const std::string& fileToAppend)
|
|
|
+{
|
|
|
+ cmsys::ifstream source(fileToAppend.c_str(),
|
|
|
+ (std::ios::binary | std::ios::in));
|
|
|
+ std::cout << source.rdbuf();
|
|
|
+}
|
|
|
+
|
|
|
static bool cmRemoveDirectory(const std::string& dir, bool recursive = true)
|
|
|
{
|
|
|
if (cmSystemTools::FileIsSymlink(dir)) {
|
|
|
@@ -927,6 +935,33 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string> const& args)
|
|
|
return HashSumFile(args, cmCryptoHash::AlgoSHA512);
|
|
|
}
|
|
|
|
|
|
+ // Command to concat files into one
|
|
|
+ if (args[1] == "cat" && args.size() >= 3) {
|
|
|
+ int return_value = 0;
|
|
|
+ for (auto const& arg : cmMakeRange(args).advance(2)) {
|
|
|
+ if (cmHasLiteralPrefix(arg, "-")) {
|
|
|
+ if (arg != "--") {
|
|
|
+ cmSystemTools::Error(arg + ": option not handled");
|
|
|
+ return_value = 1;
|
|
|
+ }
|
|
|
+ } else if (!cmSystemTools::TestFileAccess(arg,
|
|
|
+ cmsys::TEST_FILE_READ) &&
|
|
|
+ cmSystemTools::TestFileAccess(arg, cmsys::TEST_FILE_OK)) {
|
|
|
+ cmSystemTools::Error(arg + ": permission denied (ignoring)");
|
|
|
+ return_value = 1;
|
|
|
+ } else if (cmSystemTools::FileIsDirectory(arg)) {
|
|
|
+ cmSystemTools::Error(arg + ": is a directory (ignoring)");
|
|
|
+ return_value = 1;
|
|
|
+ } else if (!cmSystemTools::FileExists(arg)) {
|
|
|
+ cmSystemTools::Error(arg + ": no such file or directory (ignoring)");
|
|
|
+ return_value = 1;
|
|
|
+ } else {
|
|
|
+ cmCatFile(arg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return return_value;
|
|
|
+ }
|
|
|
+
|
|
|
// Command to change directory and run a program.
|
|
|
if (args[1] == "chdir" && args.size() >= 4) {
|
|
|
std::string const& directory = args[2];
|