mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-02 03:39:43 -06:00
cmFileCommand: Use cmSubcommandTable
This commit is contained in:
@@ -41,6 +41,7 @@
|
||||
#include "cmRuntimeDependencyArchive.h"
|
||||
#include "cmState.h"
|
||||
#include "cmStringAlgorithms.h"
|
||||
#include "cmSubcommandTable.h"
|
||||
#include "cmSystemTools.h"
|
||||
#include "cmTimestamp.h"
|
||||
#include "cm_sys_stat.h"
|
||||
@@ -87,8 +88,8 @@ std::string fix_file_url_windows(const std::string& url)
|
||||
}
|
||||
#endif
|
||||
|
||||
bool HandleWriteCommand(std::vector<std::string> const& args, bool append,
|
||||
cmExecutionStatus& status)
|
||||
bool HandleWriteImpl(std::vector<std::string> const& args, bool append,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
std::vector<std::string>::const_iterator i = args.begin();
|
||||
|
||||
@@ -157,6 +158,18 @@ bool HandleWriteCommand(std::vector<std::string> const& args, bool append,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HandleWriteCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
return HandleWriteImpl(args, false, status);
|
||||
}
|
||||
|
||||
bool HandleAppendCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
return HandleWriteImpl(args, true, status);
|
||||
}
|
||||
|
||||
bool HandleReadCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
@@ -648,8 +661,8 @@ bool HandleStringsCommand(std::vector<std::string> const& args,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HandleGlobCommand(std::vector<std::string> const& args, bool recurse,
|
||||
cmExecutionStatus& status)
|
||||
bool HandleGlobImpl(std::vector<std::string> const& args, bool recurse,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
// File commands has at least one argument
|
||||
assert(args.size() > 1);
|
||||
@@ -836,6 +849,18 @@ bool HandleGlobCommand(std::vector<std::string> const& args, bool recurse,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HandleGlobCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
return HandleGlobImpl(args, false, status);
|
||||
}
|
||||
|
||||
bool HandleGlobRecurseCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
return HandleGlobImpl(args, true, status);
|
||||
}
|
||||
|
||||
bool HandleMakeDirectoryCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
@@ -868,8 +893,8 @@ bool HandleMakeDirectoryCommand(std::vector<std::string> const& args,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HandleTouchCommand(std::vector<std::string> const& args, bool create,
|
||||
cmExecutionStatus& status)
|
||||
bool HandleTouchImpl(std::vector<std::string> const& args, bool create,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
// File command has at least one argument
|
||||
assert(args.size() > 1);
|
||||
@@ -898,6 +923,18 @@ bool HandleTouchCommand(std::vector<std::string> const& args, bool create,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HandleTouchCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
return HandleTouchImpl(args, true, status);
|
||||
}
|
||||
|
||||
bool HandleTouchNocreateCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
return HandleTouchImpl(args, false, status);
|
||||
}
|
||||
|
||||
bool HandleDifferentCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
@@ -1296,8 +1333,8 @@ bool HandleRename(std::vector<std::string> const& args,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HandleRemove(std::vector<std::string> const& args, bool recurse,
|
||||
cmExecutionStatus& status)
|
||||
bool HandleRemoveImpl(std::vector<std::string> const& args, bool recurse,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
|
||||
std::string message;
|
||||
@@ -1327,6 +1364,18 @@ bool HandleRemove(std::vector<std::string> const& args, bool recurse,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HandleRemove(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
return HandleRemoveImpl(args, false, status);
|
||||
}
|
||||
|
||||
bool HandleRemoveRecurse(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
return HandleRemoveImpl(args, true, status);
|
||||
}
|
||||
|
||||
std::string ToNativePath(const std::string& path)
|
||||
{
|
||||
const auto& outPath = cmSystemTools::ConvertToOutputPath(path);
|
||||
@@ -1344,8 +1393,9 @@ std::string ToCMakePath(const std::string& path)
|
||||
return temp;
|
||||
}
|
||||
|
||||
bool HandleCMakePathCommand(std::vector<std::string> const& args,
|
||||
bool nativePath, cmExecutionStatus& status)
|
||||
bool HandlePathCommand(std::vector<std::string> const& args,
|
||||
std::string (*convert)(std::string const&),
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
if (args.size() != 3) {
|
||||
status.SetError("FILE([TO_CMAKE_PATH|TO_NATIVE_PATH] path result) must be "
|
||||
@@ -1359,12 +1409,23 @@ bool HandleCMakePathCommand(std::vector<std::string> const& args,
|
||||
#endif
|
||||
std::vector<std::string> path = cmSystemTools::SplitString(args[1], pathSep);
|
||||
|
||||
std::string value = cmJoin(
|
||||
cmMakeRange(path).transform(nativePath ? ToNativePath : ToCMakePath), ";");
|
||||
std::string value = cmJoin(cmMakeRange(path).transform(convert), ";");
|
||||
status.GetMakefile().AddDefinition(args[2], value);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HandleCMakePathCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
return HandlePathCommand(args, ToCMakePath, status);
|
||||
}
|
||||
|
||||
bool HandleNativePathCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
return HandlePathCommand(args, ToNativePath, status);
|
||||
}
|
||||
|
||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||
|
||||
// Stuff for curl download/upload
|
||||
@@ -2777,109 +2838,51 @@ bool cmFileCommand(std::vector<std::string> const& args,
|
||||
status.SetError("must be called with at least two arguments.");
|
||||
return false;
|
||||
}
|
||||
std::string const& subCommand = args[0];
|
||||
if (subCommand == "WRITE") {
|
||||
return HandleWriteCommand(args, false, status);
|
||||
}
|
||||
if (subCommand == "APPEND") {
|
||||
return HandleWriteCommand(args, true, status);
|
||||
}
|
||||
if (subCommand == "DOWNLOAD") {
|
||||
return HandleDownloadCommand(args, status);
|
||||
}
|
||||
if (subCommand == "UPLOAD") {
|
||||
return HandleUploadCommand(args, status);
|
||||
}
|
||||
if (subCommand == "READ") {
|
||||
return HandleReadCommand(args, status);
|
||||
}
|
||||
if (subCommand == "MD5" || subCommand == "SHA1" || subCommand == "SHA224" ||
|
||||
subCommand == "SHA256" || subCommand == "SHA384" ||
|
||||
subCommand == "SHA512" || subCommand == "SHA3_224" ||
|
||||
subCommand == "SHA3_256" || subCommand == "SHA3_384" ||
|
||||
subCommand == "SHA3_512") {
|
||||
return HandleHashCommand(args, status);
|
||||
}
|
||||
if (subCommand == "STRINGS") {
|
||||
return HandleStringsCommand(args, status);
|
||||
}
|
||||
if (subCommand == "GLOB") {
|
||||
return HandleGlobCommand(args, false, status);
|
||||
}
|
||||
if (subCommand == "GLOB_RECURSE") {
|
||||
return HandleGlobCommand(args, true, status);
|
||||
}
|
||||
if (subCommand == "MAKE_DIRECTORY") {
|
||||
return HandleMakeDirectoryCommand(args, status);
|
||||
}
|
||||
if (subCommand == "RENAME") {
|
||||
return HandleRename(args, status);
|
||||
}
|
||||
if (subCommand == "REMOVE") {
|
||||
return HandleRemove(args, false, status);
|
||||
}
|
||||
if (subCommand == "REMOVE_RECURSE") {
|
||||
return HandleRemove(args, true, status);
|
||||
}
|
||||
if (subCommand == "COPY") {
|
||||
return HandleCopyCommand(args, status);
|
||||
}
|
||||
if (subCommand == "INSTALL") {
|
||||
return HandleInstallCommand(args, status);
|
||||
}
|
||||
if (subCommand == "DIFFERENT") {
|
||||
return HandleDifferentCommand(args, status);
|
||||
}
|
||||
if (subCommand == "RPATH_CHANGE" || subCommand == "CHRPATH") {
|
||||
return HandleRPathChangeCommand(args, status);
|
||||
}
|
||||
if (subCommand == "RPATH_CHECK") {
|
||||
return HandleRPathCheckCommand(args, status);
|
||||
}
|
||||
if (subCommand == "RPATH_REMOVE") {
|
||||
return HandleRPathRemoveCommand(args, status);
|
||||
}
|
||||
if (subCommand == "READ_ELF") {
|
||||
return HandleReadElfCommand(args, status);
|
||||
}
|
||||
if (subCommand == "RELATIVE_PATH") {
|
||||
return HandleRelativePathCommand(args, status);
|
||||
}
|
||||
if (subCommand == "TO_CMAKE_PATH") {
|
||||
return HandleCMakePathCommand(args, false, status);
|
||||
}
|
||||
if (subCommand == "TO_NATIVE_PATH") {
|
||||
return HandleCMakePathCommand(args, true, status);
|
||||
}
|
||||
if (subCommand == "TOUCH") {
|
||||
return HandleTouchCommand(args, true, status);
|
||||
}
|
||||
if (subCommand == "TOUCH_NOCREATE") {
|
||||
return HandleTouchCommand(args, false, status);
|
||||
}
|
||||
if (subCommand == "TIMESTAMP") {
|
||||
return HandleTimestampCommand(args, status);
|
||||
}
|
||||
if (subCommand == "GENERATE") {
|
||||
return HandleGenerateCommand(args, status);
|
||||
}
|
||||
if (subCommand == "LOCK") {
|
||||
return HandleLockCommand(args, status);
|
||||
}
|
||||
if (subCommand == "SIZE") {
|
||||
return HandleSizeCommand(args, status);
|
||||
}
|
||||
if (subCommand == "READ_SYMLINK") {
|
||||
return HandleReadSymlinkCommand(args, status);
|
||||
}
|
||||
if (subCommand == "CREATE_LINK") {
|
||||
return HandleCreateLinkCommand(args, status);
|
||||
}
|
||||
if (subCommand == "GET_RUNTIME_DEPENDENCIES") {
|
||||
return HandleGetRuntimeDependenciesCommand(args, status);
|
||||
}
|
||||
|
||||
std::string e = "does not recognize sub-command " + subCommand;
|
||||
status.SetError(e);
|
||||
return false;
|
||||
static cmSubcommandTable const subcommand{
|
||||
{ "WRITE"_s, HandleWriteCommand },
|
||||
{ "APPEND"_s, HandleAppendCommand },
|
||||
{ "DOWNLOAD"_s, HandleDownloadCommand },
|
||||
{ "UPLOAD"_s, HandleUploadCommand },
|
||||
{ "READ"_s, HandleReadCommand },
|
||||
{ "MD5"_s, HandleHashCommand },
|
||||
{ "SHA1"_s, HandleHashCommand },
|
||||
{ "SHA224"_s, HandleHashCommand },
|
||||
{ "SHA256"_s, HandleHashCommand },
|
||||
{ "SHA384"_s, HandleHashCommand },
|
||||
{ "SHA512"_s, HandleHashCommand },
|
||||
{ "SHA3_224"_s, HandleHashCommand },
|
||||
{ "SHA3_256"_s, HandleHashCommand },
|
||||
{ "SHA3_384"_s, HandleHashCommand },
|
||||
{ "SHA3_512"_s, HandleHashCommand },
|
||||
{ "STRINGS"_s, HandleStringsCommand },
|
||||
{ "GLOB"_s, HandleGlobCommand },
|
||||
{ "GLOB_RECURSE"_s, HandleGlobRecurseCommand },
|
||||
{ "MAKE_DIRECTORY"_s, HandleMakeDirectoryCommand },
|
||||
{ "RENAME"_s, HandleRename },
|
||||
{ "REMOVE"_s, HandleRemove },
|
||||
{ "REMOVE_RECURSE"_s, HandleRemoveRecurse },
|
||||
{ "COPY"_s, HandleCopyCommand },
|
||||
{ "INSTALL"_s, HandleInstallCommand },
|
||||
{ "DIFFERENT"_s, HandleDifferentCommand },
|
||||
{ "RPATH_CHANGE"_s, HandleRPathChangeCommand },
|
||||
{ "CHRPATH"_s, HandleRPathChangeCommand },
|
||||
{ "RPATH_CHECK"_s, HandleRPathCheckCommand },
|
||||
{ "RPATH_REMOVE"_s, HandleRPathRemoveCommand },
|
||||
{ "READ_ELF"_s, HandleReadElfCommand },
|
||||
{ "RELATIVE_PATH"_s, HandleRelativePathCommand },
|
||||
{ "TO_CMAKE_PATH"_s, HandleCMakePathCommand },
|
||||
{ "TO_NATIVE_PATH"_s, HandleNativePathCommand },
|
||||
{ "TOUCH"_s, HandleTouchCommand },
|
||||
{ "TOUCH_NOCREATE"_s, HandleTouchNocreateCommand },
|
||||
{ "TIMESTAMP"_s, HandleTimestampCommand },
|
||||
{ "GENERATE"_s, HandleGenerateCommand },
|
||||
{ "LOCK"_s, HandleLockCommand },
|
||||
{ "SIZE"_s, HandleSizeCommand },
|
||||
{ "READ_SYMLINK"_s, HandleReadSymlinkCommand },
|
||||
{ "CREATE_LINK"_s, HandleCreateLinkCommand },
|
||||
{ "GET_RUNTIME_DEPENDENCIES"_s, HandleGetRuntimeDependenciesCommand },
|
||||
};
|
||||
|
||||
return subcommand(args[0], args, status);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user