Refactor: Modify file(RPATH_*) to use cmArgumentParser

This commit is contained in:
Kyle Edwards
2021-05-05 11:32:15 -04:00
parent f73027b182
commit fac22d6596
+61 -77
View File
@@ -990,50 +990,42 @@ bool HandleRPathChangeCommand(std::vector<std::string> const& args,
{
// Evaluate arguments.
std::string file;
const char* oldRPath = nullptr;
const char* newRPath = nullptr;
std::string oldRPath;
std::string newRPath;
bool removeEnvironmentRPath = false;
enum Doing
{
DoingNone,
DoingFile,
DoingOld,
DoingNew
};
Doing doing = DoingNone;
for (unsigned int i = 1; i < args.size(); ++i) {
if (args[i] == "OLD_RPATH") {
doing = DoingOld;
} else if (args[i] == "NEW_RPATH") {
doing = DoingNew;
} else if (args[i] == "FILE") {
doing = DoingFile;
} else if (args[i] == "INSTALL_REMOVE_ENVIRONMENT_RPATH") {
removeEnvironmentRPath = true;
} else if (doing == DoingFile) {
file = args[i];
doing = DoingNone;
} else if (doing == DoingOld) {
oldRPath = args[i].c_str();
doing = DoingNone;
} else if (doing == DoingNew) {
newRPath = args[i].c_str();
doing = DoingNone;
} else {
status.SetError(
cmStrCat("RPATH_CHANGE given unknown argument ", args[i]));
return false;
}
cmArgumentParser<void> parser;
std::vector<std::string> unknownArgs;
std::vector<std::string> missingArgs;
std::vector<std::string> parsedArgs;
parser.Bind("FILE"_s, file)
.Bind("OLD_RPATH"_s, oldRPath)
.Bind("NEW_RPATH"_s, newRPath)
.Bind("INSTALL_REMOVE_ENVIRONMENT_RPATH"_s, removeEnvironmentRPath);
parser.Parse(cmMakeRange(args).advance(1), &unknownArgs, &missingArgs,
&parsedArgs);
if (!unknownArgs.empty()) {
status.SetError(
cmStrCat("RPATH_CHANGE given unknown argument ", unknownArgs.front()));
return false;
}
if (!missingArgs.empty()) {
status.SetError(cmStrCat("RPATH_CHANGE \"", missingArgs.front(),
"\" argument not given value."));
return false;
}
if (file.empty()) {
status.SetError("RPATH_CHANGE not given FILE option.");
return false;
}
if (!oldRPath) {
if (oldRPath.empty() &&
std::find(parsedArgs.begin(), parsedArgs.end(), "OLD_RPATH") ==
parsedArgs.end()) {
status.SetError("RPATH_CHANGE not given OLD_RPATH option.");
return false;
}
if (!newRPath) {
if (newRPath.empty() &&
std::find(parsedArgs.begin(), parsedArgs.end(), "NEW_RPATH") ==
parsedArgs.end()) {
status.SetError("RPATH_CHANGE not given NEW_RPATH option.");
return false;
}
@@ -1070,23 +1062,20 @@ bool HandleRPathRemoveCommand(std::vector<std::string> const& args,
{
// Evaluate arguments.
std::string file;
enum Doing
{
DoingNone,
DoingFile
};
Doing doing = DoingNone;
for (unsigned int i = 1; i < args.size(); ++i) {
if (args[i] == "FILE") {
doing = DoingFile;
} else if (doing == DoingFile) {
file = args[i];
doing = DoingNone;
} else {
status.SetError(
cmStrCat("RPATH_REMOVE given unknown argument ", args[i]));
return false;
}
cmArgumentParser<void> parser;
std::vector<std::string> unknownArgs;
std::vector<std::string> missingArgs;
parser.Bind("FILE"_s, file);
parser.Parse(cmMakeRange(args).advance(1), &unknownArgs, &missingArgs);
if (!unknownArgs.empty()) {
status.SetError(
cmStrCat("RPATH_REMOVE given unknown argument ", unknownArgs.front()));
return false;
}
if (!missingArgs.empty()) {
status.SetError(cmStrCat("RPATH_REMOVE \"", missingArgs.front(),
"\" argument not given value."));
return false;
}
if (file.empty()) {
status.SetError("RPATH_REMOVE not given FILE option.");
@@ -1123,36 +1112,31 @@ bool HandleRPathCheckCommand(std::vector<std::string> const& args,
{
// Evaluate arguments.
std::string file;
const char* rpath = nullptr;
enum Doing
{
DoingNone,
DoingFile,
DoingRPath
};
Doing doing = DoingNone;
for (unsigned int i = 1; i < args.size(); ++i) {
if (args[i] == "RPATH") {
doing = DoingRPath;
} else if (args[i] == "FILE") {
doing = DoingFile;
} else if (doing == DoingFile) {
file = args[i];
doing = DoingNone;
} else if (doing == DoingRPath) {
rpath = args[i].c_str();
doing = DoingNone;
} else {
status.SetError(
cmStrCat("RPATH_CHECK given unknown argument ", args[i]));
return false;
}
std::string rpath;
cmArgumentParser<void> parser;
std::vector<std::string> unknownArgs;
std::vector<std::string> missingArgs;
std::vector<std::string> parsedArgs;
parser.Bind("FILE"_s, file).Bind("RPATH"_s, rpath);
parser.Parse(cmMakeRange(args).advance(1), &unknownArgs, &missingArgs,
&parsedArgs);
if (!unknownArgs.empty()) {
status.SetError(
cmStrCat("RPATH_CHECK given unknown argument ", unknownArgs.front()));
return false;
}
if (!missingArgs.empty()) {
status.SetError(cmStrCat("RPATH_CHECK \"", missingArgs.front(),
"\" argument not given value."));
return false;
}
if (file.empty()) {
status.SetError("RPATH_CHECK not given FILE option.");
return false;
}
if (!rpath) {
if (rpath.empty() &&
std::find(parsedArgs.begin(), parsedArgs.end(), "RPATH") ==
parsedArgs.end()) {
status.SetError("RPATH_CHECK not given RPATH option.");
return false;
}