Commit a7a5f376 authored by wahikihiki's avatar wahikihiki

cmFileCommand: Use cmSubcommandTable

parent b66b7464
......@@ -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);
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment