mirror of
https://github.com/Kitware/CMake.git
synced 2026-03-10 02:19:10 -05:00
try_run: Do not require unrequested stdout/stderr when cross-compiling
Since commit 048a02d5bb (ConfigureLog: Log try_compile and try_run
checks, 2022-11-23) we always capture the stdout/stderr for logging.
When cross-compiling, do not require `__TRYRUN_OUTPUT_STD{OUT,ERR}`
variables to be populated just for the logging.
This commit is contained in:
@@ -90,7 +90,8 @@ public:
|
|||||||
std::string const& compileResultVariable,
|
std::string const& compileResultVariable,
|
||||||
std::string* runOutputContents,
|
std::string* runOutputContents,
|
||||||
std::string* runOutputStdOutContents,
|
std::string* runOutputStdOutContents,
|
||||||
std::string* runOutputStdErrContents);
|
std::string* runOutputStdErrContents,
|
||||||
|
bool stdOutErrRequired);
|
||||||
|
|
||||||
bool NoCache;
|
bool NoCache;
|
||||||
std::string RunResultVariable;
|
std::string RunResultVariable;
|
||||||
@@ -185,12 +186,17 @@ bool TryRunCommandImpl::TryRunCode(std::vector<std::string> const& argv)
|
|||||||
std::string runOutputStdErrContents;
|
std::string runOutputStdErrContents;
|
||||||
if (this->Makefile->IsOn("CMAKE_CROSSCOMPILING") &&
|
if (this->Makefile->IsOn("CMAKE_CROSSCOMPILING") &&
|
||||||
!this->Makefile->IsDefinitionSet("CMAKE_CROSSCOMPILING_EMULATOR")) {
|
!this->Makefile->IsDefinitionSet("CMAKE_CROSSCOMPILING_EMULATOR")) {
|
||||||
|
// We only require the stdout/stderr cache entries if the project
|
||||||
|
// actually asked for the values, not just for logging.
|
||||||
|
bool const stdOutErrRequired = (arguments.RunOutputStdOutVariable ||
|
||||||
|
arguments.RunOutputStdErrVariable);
|
||||||
this->DoNotRunExecutable(
|
this->DoNotRunExecutable(
|
||||||
runArgs, *arguments.SourceDirectoryOrFile,
|
runArgs, *arguments.SourceDirectoryOrFile,
|
||||||
*arguments.CompileResultVariable,
|
*arguments.CompileResultVariable,
|
||||||
captureRunOutput ? &runOutputContents : nullptr,
|
captureRunOutput ? &runOutputContents : nullptr,
|
||||||
captureRunOutputStdOutErr ? &runOutputStdOutContents : nullptr,
|
captureRunOutputStdOutErr ? &runOutputStdOutContents : nullptr,
|
||||||
captureRunOutputStdOutErr ? &runOutputStdErrContents : nullptr);
|
captureRunOutputStdOutErr ? &runOutputStdErrContents : nullptr,
|
||||||
|
stdOutErrRequired);
|
||||||
} else {
|
} else {
|
||||||
this->RunExecutable(
|
this->RunExecutable(
|
||||||
runArgs, arguments.RunWorkingDirectory,
|
runArgs, arguments.RunWorkingDirectory,
|
||||||
@@ -311,7 +317,7 @@ void TryRunCommandImpl::RunExecutable(const std::string& runArgs,
|
|||||||
void TryRunCommandImpl::DoNotRunExecutable(
|
void TryRunCommandImpl::DoNotRunExecutable(
|
||||||
const std::string& runArgs, const std::string& srcFile,
|
const std::string& runArgs, const std::string& srcFile,
|
||||||
std::string const& compileResultVariable, std::string* out,
|
std::string const& compileResultVariable, std::string* out,
|
||||||
std::string* stdOut, std::string* stdErr)
|
std::string* stdOut, std::string* stdErr, bool stdOutErrRequired)
|
||||||
{
|
{
|
||||||
// copy the executable out of the CMakeFiles/ directory, so it is not
|
// copy the executable out of the CMakeFiles/ directory, so it is not
|
||||||
// removed at the end of try_run() and the user can run it manually
|
// removed at the end of try_run() and the user can run it manually
|
||||||
@@ -357,7 +363,7 @@ void TryRunCommandImpl::DoNotRunExecutable(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// is the output from the executable used ?
|
// is the output from the executable used ?
|
||||||
if (stdOut || stdErr) {
|
if (stdOutErrRequired) {
|
||||||
if (!this->Makefile->GetDefinition(internalRunOutputStdOutName)) {
|
if (!this->Makefile->GetDefinition(internalRunOutputStdOutName)) {
|
||||||
// if the variables doesn't exist, create it with a helpful error text
|
// if the variables doesn't exist, create it with a helpful error text
|
||||||
// and mark it as advanced
|
// and mark it as advanced
|
||||||
|
|||||||
Reference in New Issue
Block a user