Ninja: Fail early on when ninja build tool does not run

Diagnose failure to run `ninja --version` and abort early.  Otherwise we
end up aborting with a confusing message about ninja version "" being
too old.

Closes: #16378
This commit is contained in:
Brad King 2016-10-20 10:38:00 -04:00
parent 2d3aa94225
commit 010560be66
5 changed files with 24 additions and 2 deletions

View File

@ -564,8 +564,17 @@ bool cmGlobalNinjaGenerator::FindMakeProgram(cmMakefile* mf)
command.push_back(this->NinjaCommand);
command.push_back("--version");
std::string version;
cmSystemTools::RunSingleCommand(command, &version, CM_NULLPTR, CM_NULLPTR,
CM_NULLPTR, cmSystemTools::OUTPUT_NONE);
std::string error;
if (!cmSystemTools::RunSingleCommand(command, &version, &error, CM_NULLPTR,
CM_NULLPTR,
cmSystemTools::OUTPUT_NONE)) {
mf->IssueMessage(cmake::FATAL_ERROR, "Running\n '" +
cmJoin(command, "' '") + "'\n"
"failed with:\n " +
error);
cmSystemTools::SetFatalErrorOccured();
return false;
}
this->NinjaVersion = cmSystemTools::TrimWhitespace(version);
this->CheckNinjaFeatures();
}

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,6 @@
^CMake Error at CMakeLists.txt:[0-9]+ \(project\):
Running
'ninja-tool-missing' '--version'
failed with:

View File

@ -15,6 +15,12 @@ else()
message(FATAL_ERROR "'ninja --version' reported:\n${ninja_out}")
endif()
function(run_NinjaToolMissing)
set(RunCMake_MAKE_PROGRAM ninja-tool-missing)
run_cmake(NinjaToolMissing)
endfunction()
run_NinjaToolMissing()
function(run_CMP0058 case)
# Use a single build tree for a few tests without cleaning.
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0058-${case}-build)