cmake: Ignore any empty "" command line arguments

Don't treat empty quote arguments("") as the current working
directory but instead ignore them.

Fixes #23217
This commit is contained in:
Robert Maynard
2022-02-14 10:23:46 -05:00
committed by Brad King
parent 67f97f5478
commit f73457ca2e
14 changed files with 45 additions and 4 deletions

View File

@@ -544,6 +544,10 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
"-C", "-C must be followed by a file name.",
CommandArgument::Values::One, CommandArgument::RequiresSeparator::No,
[&](std::string const& value, cmake* state) -> bool {
if (value.empty()) {
cmSystemTools::Error("No file name specified for -C");
return false;
}
cmSystemTools::Stdout("loading initial cache file " + value + "\n");
// Resolve script path specified on command line
// relative to $PWD.
@@ -800,7 +804,18 @@ void cmake::SetArgs(const std::vector<std::string>& args)
ListPresets listPresets = ListPresets::None;
#endif
auto EmptyStringArgLambda = [](std::string const&, cmake* state) -> bool {
state->IssueMessage(
MessageType::WARNING,
"Ignoring empty string (\"\") provided on the command line.");
return true;
};
auto SourceArgLambda = [](std::string const& value, cmake* state) -> bool {
if (value.empty()) {
cmSystemTools::Error("No source directory specified for -S");
return false;
}
std::string path = cmSystemTools::CollapseFullPath(value);
cmSystemTools::ConvertToUnixSlashes(path);
state->SetHomeDirectory(path);
@@ -808,6 +823,10 @@ void cmake::SetArgs(const std::vector<std::string>& args)
};
auto BuildArgLambda = [&](std::string const& value, cmake* state) -> bool {
if (value.empty()) {
cmSystemTools::Error("No build directory specified for -B");
return false;
}
std::string path = cmSystemTools::CollapseFullPath(value);
cmSystemTools::ConvertToUnixSlashes(path);
state->SetHomeOutputDirectory(path);
@@ -836,6 +855,7 @@ void cmake::SetArgs(const std::vector<std::string>& args)
};
std::vector<CommandArgument> arguments = {
CommandArgument{ "", CommandArgument::Values::Zero, EmptyStringArgLambda },
CommandArgument{ "-S", "No source directory specified for -S",
CommandArgument::Values::One,
CommandArgument::RequiresSeparator::No, SourceArgLambda },
@@ -1179,8 +1199,8 @@ void cmake::SetArgs(const std::vector<std::string>& args)
if (!extraProvidedPath.empty() && !scriptMode) {
this->IssueMessage(MessageType::WARNING,
cmStrCat("Ignoring extra path from command line:\n ",
extraProvidedPath));
cmStrCat("Ignoring extra path from command line:\n \"",
extraProvidedPath, "\""));
}
if (!possibleUnknownArg.empty() && !scriptMode) {
cmSystemTools::Error(cmStrCat("Unknown argument ", possibleUnknownArg));