|
@@ -151,7 +151,9 @@ cmArgumentParser<Arguments> makeTryRunParser(
|
|
|
auto const TryCompileBaseArgParser =
|
|
auto const TryCompileBaseArgParser =
|
|
|
cmArgumentParser<Arguments>{}
|
|
cmArgumentParser<Arguments>{}
|
|
|
.Bind(0, &Arguments::CompileResultVariable)
|
|
.Bind(0, &Arguments::CompileResultVariable)
|
|
|
|
|
+ .Bind("LOG_DESCRIPTION"_s, &Arguments::LogDescription)
|
|
|
.Bind("NO_CACHE"_s, &Arguments::NoCache)
|
|
.Bind("NO_CACHE"_s, &Arguments::NoCache)
|
|
|
|
|
+ .Bind("NO_LOG"_s, &Arguments::NoLog)
|
|
|
.Bind("CMAKE_FLAGS"_s, &Arguments::CMakeFlags)
|
|
.Bind("CMAKE_FLAGS"_s, &Arguments::CMakeFlags)
|
|
|
.Bind("__CMAKE_INTERNAL"_s, &Arguments::CMakeInternal)
|
|
.Bind("__CMAKE_INTERNAL"_s, &Arguments::CMakeInternal)
|
|
|
/* keep semicolon on own line */;
|
|
/* keep semicolon on own line */;
|
|
@@ -1099,23 +1101,35 @@ cm::optional<cmTryCompileResult> cmCoreTryCompile::TryCompileCode(
|
|
|
|
|
|
|
|
if ((res == 0) && arguments.CopyFileTo) {
|
|
if ((res == 0) && arguments.CopyFileTo) {
|
|
|
std::string const& copyFile = *arguments.CopyFileTo;
|
|
std::string const& copyFile = *arguments.CopyFileTo;
|
|
|
- if (this->OutputFile.empty() ||
|
|
|
|
|
- !cmSystemTools::CopyFileAlways(this->OutputFile, copyFile)) {
|
|
|
|
|
- std::ostringstream emsg;
|
|
|
|
|
|
|
+ cmsys::SystemTools::CopyStatus status =
|
|
|
|
|
+ cmSystemTools::CopyFileAlways(this->OutputFile, copyFile);
|
|
|
|
|
+ if (!status) {
|
|
|
|
|
+ std::string err = status.GetString();
|
|
|
|
|
+ switch (status.Path) {
|
|
|
|
|
+ case cmsys::SystemTools::CopyStatus::SourcePath:
|
|
|
|
|
+ err = cmStrCat(err, " (input)");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case cmsys::SystemTools::CopyStatus::DestPath:
|
|
|
|
|
+ err = cmStrCat(err, " (output)");
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
/* clang-format off */
|
|
/* clang-format off */
|
|
|
- emsg << "Cannot copy output executable\n"
|
|
|
|
|
- << " '" << this->OutputFile << "'\n"
|
|
|
|
|
- << "to destination specified by COPY_FILE:\n"
|
|
|
|
|
- << " '" << copyFile << "'\n";
|
|
|
|
|
|
|
+ err = cmStrCat(
|
|
|
|
|
+ "Cannot copy output executable\n",
|
|
|
|
|
+ " '", this->OutputFile, "'\n",
|
|
|
|
|
+ "to destination specified by COPY_FILE:\n",
|
|
|
|
|
+ " '", copyFile, "'\n",
|
|
|
|
|
+ "because:\n",
|
|
|
|
|
+ " ", err, "\n",
|
|
|
|
|
+ this->FindErrorMessage);
|
|
|
/* clang-format on */
|
|
/* clang-format on */
|
|
|
- if (!this->FindErrorMessage.empty()) {
|
|
|
|
|
- emsg << this->FindErrorMessage;
|
|
|
|
|
- }
|
|
|
|
|
if (!arguments.CopyFileError) {
|
|
if (!arguments.CopyFileError) {
|
|
|
- this->Makefile->IssueMessage(MessageType::FATAL_ERROR, emsg.str());
|
|
|
|
|
|
|
+ this->Makefile->IssueMessage(MessageType::FATAL_ERROR, err);
|
|
|
return cm::nullopt;
|
|
return cm::nullopt;
|
|
|
}
|
|
}
|
|
|
- copyFileErrorMessage = emsg.str();
|
|
|
|
|
|
|
+ copyFileErrorMessage = std::move(err);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1126,6 +1140,9 @@ cm::optional<cmTryCompileResult> cmCoreTryCompile::TryCompileCode(
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
cmTryCompileResult result;
|
|
cmTryCompileResult result;
|
|
|
|
|
+ if (arguments.LogDescription) {
|
|
|
|
|
+ result.LogDescription = *arguments.LogDescription;
|
|
|
|
|
+ }
|
|
|
result.SourceDirectory = sourceDirectory;
|
|
result.SourceDirectory = sourceDirectory;
|
|
|
result.BinaryDirectory = this->BinaryDirectory;
|
|
result.BinaryDirectory = this->BinaryDirectory;
|
|
|
result.Variable = *arguments.CompileResultVariable;
|
|
result.Variable = *arguments.CompileResultVariable;
|
|
@@ -1278,6 +1295,9 @@ void cmCoreTryCompile::WriteTryCompileEventFields(
|
|
|
cmConfigureLog& log, cmTryCompileResult const& compileResult)
|
|
cmConfigureLog& log, cmTryCompileResult const& compileResult)
|
|
|
{
|
|
{
|
|
|
#ifndef CMAKE_BOOTSTRAP
|
|
#ifndef CMAKE_BOOTSTRAP
|
|
|
|
|
+ if (compileResult.LogDescription) {
|
|
|
|
|
+ log.WriteValue("description"_s, *compileResult.LogDescription);
|
|
|
|
|
+ }
|
|
|
log.BeginObject("directories"_s);
|
|
log.BeginObject("directories"_s);
|
|
|
log.WriteValue("source"_s, compileResult.SourceDirectory);
|
|
log.WriteValue("source"_s, compileResult.SourceDirectory);
|
|
|
log.WriteValue("binary"_s, compileResult.BinaryDirectory);
|
|
log.WriteValue("binary"_s, compileResult.BinaryDirectory);
|