mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-06 22:30:07 -05:00
Merge branch 'backport-3.23-cmake-P-path-args' into release-3.23
Merge-request: !7494
This commit is contained in:
+9
-18
@@ -405,9 +405,6 @@ void cmake::PrintPresetEnvironment()
|
||||
// Parse the args
|
||||
bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||
{
|
||||
auto findPackageMode = false;
|
||||
auto seenScriptOption = false;
|
||||
|
||||
auto DefineLambda = [](std::string const& entry, cmake* state) -> bool {
|
||||
std::string var;
|
||||
std::string value;
|
||||
@@ -498,10 +495,10 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||
GetProjectCommandsInScriptMode(state->GetState());
|
||||
// Documented behavior of CMAKE{,_CURRENT}_{SOURCE,BINARY}_DIR is to be
|
||||
// set to $PWD for -P mode.
|
||||
state->SetWorkingMode(SCRIPT_MODE);
|
||||
state->SetHomeDirectory(cmSystemTools::GetCurrentWorkingDirectory());
|
||||
state->SetHomeOutputDirectory(cmSystemTools::GetCurrentWorkingDirectory());
|
||||
state->ReadListFile(args, path);
|
||||
seenScriptOption = true;
|
||||
return true;
|
||||
};
|
||||
|
||||
@@ -565,15 +562,12 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||
"No install directory specified for --install-prefix",
|
||||
CommandArgument::Values::One, PrefixLambda },
|
||||
CommandArgument{ "--find-package", CommandArgument::Values::Zero,
|
||||
[&](std::string const&, cmake*) -> bool {
|
||||
findPackageMode = true;
|
||||
return true;
|
||||
} },
|
||||
IgnoreAndTrueLambda },
|
||||
};
|
||||
for (decltype(args.size()) i = 1; i < args.size(); ++i) {
|
||||
std::string const& arg = args[i];
|
||||
|
||||
if (arg == "--" && seenScriptOption) {
|
||||
if (arg == "--" && this->GetWorkingMode() == SCRIPT_MODE) {
|
||||
// Stop processing CMake args and avoid possible errors
|
||||
// when arbitrary args are given to CMake script.
|
||||
break;
|
||||
@@ -588,7 +582,7 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||
}
|
||||
}
|
||||
|
||||
if (findPackageMode) {
|
||||
if (this->GetWorkingMode() == FIND_PACKAGE_MODE) {
|
||||
return this->FindPackage(args);
|
||||
}
|
||||
|
||||
@@ -793,7 +787,6 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
bool haveToolset = false;
|
||||
bool havePlatform = false;
|
||||
bool haveBArg = false;
|
||||
bool scriptMode = false;
|
||||
std::string possibleUnknownArg;
|
||||
std::string extraProvidedPath;
|
||||
#if !defined(CMAKE_BOOTSTRAP)
|
||||
@@ -871,10 +864,7 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
CommandArgument{ "-P", "-P must be followed by a file name.",
|
||||
CommandArgument::Values::One,
|
||||
CommandArgument::RequiresSeparator::No,
|
||||
[&](std::string const&, cmake*) -> bool {
|
||||
scriptMode = true;
|
||||
return true;
|
||||
} },
|
||||
IgnoreAndTrueLambda },
|
||||
CommandArgument{ "-D", "-D must be followed with VAR=VALUE.",
|
||||
CommandArgument::Values::One,
|
||||
CommandArgument::RequiresSeparator::No,
|
||||
@@ -1198,12 +1188,12 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
}
|
||||
}
|
||||
|
||||
if (!extraProvidedPath.empty() && !scriptMode) {
|
||||
if (!extraProvidedPath.empty() && this->GetWorkingMode() == NORMAL_MODE) {
|
||||
this->IssueMessage(MessageType::WARNING,
|
||||
cmStrCat("Ignoring extra path from command line:\n \"",
|
||||
extraProvidedPath, "\""));
|
||||
}
|
||||
if (!possibleUnknownArg.empty() && !scriptMode) {
|
||||
if (!possibleUnknownArg.empty() && this->GetWorkingMode() != SCRIPT_MODE) {
|
||||
cmSystemTools::Error(cmStrCat("Unknown argument ", possibleUnknownArg));
|
||||
cmSystemTools::Error("Run 'cmake --help' for all supported options.");
|
||||
exit(1);
|
||||
@@ -1787,7 +1777,8 @@ void cmake::SetHomeDirectoryViaCommandLine(std::string const& path)
|
||||
}
|
||||
|
||||
auto prev_path = this->GetHomeDirectory();
|
||||
if (prev_path != path && !prev_path.empty()) {
|
||||
if (prev_path != path && !prev_path.empty() &&
|
||||
this->GetWorkingMode() == NORMAL_MODE) {
|
||||
this->IssueMessage(MessageType::WARNING,
|
||||
cmStrCat("Ignoring extra path from command line:\n \"",
|
||||
prev_path, "\""));
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
^-- CMAKE_ARGC='5'
|
||||
-- CMAKE_ARGV1='-P'
|
||||
-- CMAKE_ARGV2='[^']*/Tests/RunCMake/CommandLine/P_args.cmake'
|
||||
-- CMAKE_ARGV3='relative/path'
|
||||
-- CMAKE_ARGV4='[^']*/Tests/RunCMake/CommandLine'
|
||||
-- CMAKE_ARGV5=''$
|
||||
@@ -0,0 +1,6 @@
|
||||
message(STATUS "CMAKE_ARGC='${CMAKE_ARGC}'")
|
||||
message(STATUS "CMAKE_ARGV1='${CMAKE_ARGV1}'")
|
||||
message(STATUS "CMAKE_ARGV2='${CMAKE_ARGV2}'")
|
||||
message(STATUS "CMAKE_ARGV3='${CMAKE_ARGV3}'")
|
||||
message(STATUS "CMAKE_ARGV4='${CMAKE_ARGV4}'")
|
||||
message(STATUS "CMAKE_ARGV5='${CMAKE_ARGV5}'")
|
||||
@@ -52,6 +52,7 @@ run_cmake_command(G_no-arg ${CMAKE_COMMAND} -B DummyBuildDir -G)
|
||||
run_cmake_command(G_bad-arg ${CMAKE_COMMAND} -B DummyBuildDir -G NoSuchGenerator)
|
||||
run_cmake_command(P_no-arg ${CMAKE_COMMAND} -P)
|
||||
run_cmake_command(P_no-file ${CMAKE_COMMAND} -P nosuchscriptfile.cmake)
|
||||
run_cmake_command(P_args ${CMAKE_COMMAND} -P "${RunCMake_SOURCE_DIR}/P_args.cmake" relative/path "${RunCMake_SOURCE_DIR}")
|
||||
run_cmake_command(P_arbitrary_args ${CMAKE_COMMAND} -P "${RunCMake_SOURCE_DIR}/P_arbitrary_args.cmake" -- -DFOO)
|
||||
|
||||
run_cmake_command(build-no-dir
|
||||
|
||||
Reference in New Issue
Block a user