mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-01-26 11:04:33 +00:00
try_compile: Record propagated CMake variables in configure log
These provide more detailed information about how the test project was configured. Issue: #23200
This commit is contained in:
parent
0a48d8fe5c
commit
5252c88569
@ -190,6 +190,8 @@ A ``try_compile-v1`` event is a YAML mapping:
|
||||
directories:
|
||||
source: "/path/to/.../TryCompile-01234"
|
||||
binary: "/path/to/.../TryCompile-01234"
|
||||
cmakeVariables:
|
||||
SOME_VARIABLE: "Some Value"
|
||||
buildResult:
|
||||
variable: "COMPILE_RESULT"
|
||||
cached: true
|
||||
@ -217,6 +219,12 @@ The keys specific to ``try_compile-v1`` mappings are:
|
||||
For non-project invocations, this is often the same as
|
||||
the source directory.
|
||||
|
||||
``cmakeVariables``
|
||||
An optional key that is present when CMake propagates variables
|
||||
into the test project, either automatically or due to the
|
||||
:variable:`CMAKE_TRY_COMPILE_PLATFORM_VARIABLES` variable.
|
||||
Its value is a mapping from variable names to their values.
|
||||
|
||||
``buildResult``
|
||||
A mapping describing the result of compiling the test code.
|
||||
It has the following keys:
|
||||
|
||||
@ -193,6 +193,30 @@ void cmConfigureLog::WriteValue(cm::string_view key,
|
||||
this->EndObject();
|
||||
}
|
||||
|
||||
void cmConfigureLog::WriteValue(cm::string_view key,
|
||||
std::map<std::string, std::string> const& map)
|
||||
{
|
||||
static const std::string rawKeyChars = //
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" //
|
||||
"abcdefghijklmnopqrstuvwxyz" //
|
||||
"0123456789" //
|
||||
"-_" //
|
||||
;
|
||||
this->BeginObject(key);
|
||||
for (auto const& entry : map) {
|
||||
if (entry.first.find_first_not_of(rawKeyChars) == std::string::npos) {
|
||||
this->WriteValue(entry.first, entry.second);
|
||||
} else {
|
||||
this->BeginLine();
|
||||
this->Encoder->write(entry.first, &this->Stream);
|
||||
this->Stream << ": ";
|
||||
this->Encoder->write(entry.second, &this->Stream);
|
||||
this->EndLine();
|
||||
}
|
||||
}
|
||||
this->EndObject();
|
||||
}
|
||||
|
||||
void cmConfigureLog::WriteLiteralTextBlock(cm::string_view key,
|
||||
cm::string_view text)
|
||||
{
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
file Copyright.txt or https://cmake.org/licensing for details. */
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@ -42,6 +43,8 @@ public:
|
||||
void WriteValue(cm::string_view key, int value);
|
||||
void WriteValue(cm::string_view key, std::string const& value);
|
||||
void WriteValue(cm::string_view key, std::vector<std::string> const& list);
|
||||
void WriteValue(cm::string_view key,
|
||||
std::map<std::string, std::string> const& map);
|
||||
|
||||
void WriteTextBlock(cm::string_view key, cm::string_view text);
|
||||
void WriteLiteralTextBlock(cm::string_view key, cm::string_view text);
|
||||
|
||||
@ -471,6 +471,8 @@ cm::optional<cmTryCompileResult> cmCoreTryCompile::TryCompileCode(
|
||||
return cm::nullopt;
|
||||
}
|
||||
|
||||
std::map<std::string, std::string> cmakeVariables;
|
||||
|
||||
std::string outFileName = this->BinaryDirectory + "/CMakeLists.txt";
|
||||
// which signature are we using? If we are using var srcfile bindir
|
||||
if (this->SrcFileSignature) {
|
||||
@ -592,6 +594,7 @@ cm::optional<cmTryCompileResult> cmCoreTryCompile::TryCompileCode(
|
||||
cmVersion::GetPatchVersion(), cmVersion::GetTweakVersion());
|
||||
if (def) {
|
||||
fprintf(fout, "set(CMAKE_MODULE_PATH \"%s\")\n", def->c_str());
|
||||
cmakeVariables.emplace("CMAKE_MODULE_PATH", *def);
|
||||
}
|
||||
|
||||
/* Set MSVC runtime library policy to match our selection. */
|
||||
@ -653,10 +656,12 @@ cm::optional<cmTryCompileResult> cmCoreTryCompile::TryCompileCode(
|
||||
this->Makefile->GetDefinition(rulesOverrideLang)) {
|
||||
fprintf(fout, "set(%s \"%s\")\n", rulesOverrideLang.c_str(),
|
||||
rulesOverridePath->c_str());
|
||||
cmakeVariables.emplace(rulesOverrideLang, *rulesOverridePath);
|
||||
} else if (cmValue rulesOverridePath2 =
|
||||
this->Makefile->GetDefinition(rulesOverrideBase)) {
|
||||
fprintf(fout, "set(%s \"%s\")\n", rulesOverrideBase.c_str(),
|
||||
rulesOverridePath2->c_str());
|
||||
cmakeVariables.emplace(rulesOverrideBase, *rulesOverridePath2);
|
||||
}
|
||||
}
|
||||
fprintf(fout, "project(CMAKE_TRY_COMPILE%s)\n", projectLangs.c_str());
|
||||
@ -687,6 +692,9 @@ cm::optional<cmTryCompileResult> cmCoreTryCompile::TryCompileCode(
|
||||
"set(CMAKE_%s_FLAGS \"${CMAKE_%s_FLAGS}"
|
||||
" ${COMPILE_DEFINITIONS}\")\n",
|
||||
li.c_str(), li.c_str());
|
||||
if (flags) {
|
||||
cmakeVariables.emplace(langFlags, *flags);
|
||||
}
|
||||
}
|
||||
switch (this->Makefile->GetPolicyStatus(cmPolicies::CMP0066)) {
|
||||
case cmPolicies::WARN:
|
||||
@ -723,6 +731,9 @@ cm::optional<cmTryCompileResult> cmCoreTryCompile::TryCompileCode(
|
||||
cmValue flagsCfg = this->Makefile->GetDefinition(langFlagsCfg);
|
||||
fprintf(fout, "set(%s %s)\n", langFlagsCfg.c_str(),
|
||||
cmOutputConverter::EscapeForCMake(*flagsCfg).c_str());
|
||||
if (flagsCfg) {
|
||||
cmakeVariables.emplace(langFlagsCfg, *flagsCfg);
|
||||
}
|
||||
}
|
||||
} break;
|
||||
}
|
||||
@ -757,6 +768,9 @@ cm::optional<cmTryCompileResult> cmCoreTryCompile::TryCompileCode(
|
||||
this->Makefile->GetDefinition("CMAKE_EXE_LINKER_FLAGS");
|
||||
fprintf(fout, "set(CMAKE_EXE_LINKER_FLAGS %s)\n",
|
||||
cmOutputConverter::EscapeForCMake(*exeLinkFlags).c_str());
|
||||
if (exeLinkFlags) {
|
||||
cmakeVariables.emplace("CMAKE_EXE_LINKER_FLAGS", *exeLinkFlags);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1044,12 +1058,14 @@ cm::optional<cmTryCompileResult> cmCoreTryCompile::TryCompileCode(
|
||||
vars.erase(kCMAKE_OSX_ARCHITECTURES);
|
||||
std::string flag = "-DCMAKE_OSX_ARCHITECTURES=" + *tcArchs;
|
||||
arguments.CMakeFlags.emplace_back(std::move(flag));
|
||||
cmakeVariables.emplace("CMAKE_OSX_ARCHITECTURES", *tcArchs);
|
||||
}
|
||||
|
||||
for (std::string const& var : vars) {
|
||||
if (cmValue val = this->Makefile->GetDefinition(var)) {
|
||||
std::string flag = "-D" + var + "=" + *val;
|
||||
arguments.CMakeFlags.emplace_back(std::move(flag));
|
||||
cmakeVariables.emplace(var, *val);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1060,6 +1076,7 @@ cm::optional<cmTryCompileResult> cmCoreTryCompile::TryCompileCode(
|
||||
if (cmValue val = this->Makefile->GetDefinition(var)) {
|
||||
std::string flag = "-D" + var + "=" + "'" + *val + "'";
|
||||
arguments.CMakeFlags.emplace_back(std::move(flag));
|
||||
cmakeVariables.emplace(var, *val);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1145,6 +1162,7 @@ cm::optional<cmTryCompileResult> cmCoreTryCompile::TryCompileCode(
|
||||
if (arguments.LogDescription) {
|
||||
result.LogDescription = *arguments.LogDescription;
|
||||
}
|
||||
result.CMakeVariables = std::move(cmakeVariables);
|
||||
result.SourceDirectory = sourceDirectory;
|
||||
result.BinaryDirectory = this->BinaryDirectory;
|
||||
result.Variable = *arguments.CompileResultVariable;
|
||||
@ -1304,6 +1322,9 @@ void cmCoreTryCompile::WriteTryCompileEventFields(
|
||||
log.WriteValue("source"_s, compileResult.SourceDirectory);
|
||||
log.WriteValue("binary"_s, compileResult.BinaryDirectory);
|
||||
log.EndObject();
|
||||
if (!compileResult.CMakeVariables.empty()) {
|
||||
log.WriteValue("cmakeVariables"_s, compileResult.CMakeVariables);
|
||||
}
|
||||
log.BeginObject("buildResult"_s);
|
||||
log.WriteValue("variable"_s, compileResult.Variable);
|
||||
log.WriteValue("cached"_s, compileResult.VariableCached);
|
||||
|
||||
@ -22,6 +22,7 @@ class cmRange;
|
||||
struct cmTryCompileResult
|
||||
{
|
||||
cm::optional<std::string> LogDescription;
|
||||
std::map<std::string, std::string> CMakeVariables;
|
||||
|
||||
std::string SourceDirectory;
|
||||
std::string BinaryDirectory;
|
||||
|
||||
@ -20,6 +20,9 @@ events:(
|
||||
directories:
|
||||
source: "[^"]*/Tests/RunCMake/try_compile/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
binary: "[^"]*/Tests/RunCMake/try_compile/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
cmakeVariables:(
|
||||
CMAKE_[^
|
||||
]*)+
|
||||
buildResult:
|
||||
variable: "CMAKE_C_ABI_COMPILED"
|
||||
cached: true
|
||||
@ -41,6 +44,13 @@ events:(
|
||||
directories:
|
||||
source: "[^"]*/Tests/RunCMake/try_compile/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
binary: "[^"]*/Tests/RunCMake/try_compile/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
cmakeVariables:
|
||||
ABCDEFGHIJKLMNOPQRSTUVWXYZ: "Upper case"(
|
||||
CMAKE_[^
|
||||
]*)+
|
||||
"WITH SPACE": "Space"
|
||||
_-0123456789: "Other chars"
|
||||
abcdefghijklmnopqrstuvwxyz: "Lower case"
|
||||
buildResult:
|
||||
variable: "COMPILE_RESULT"
|
||||
cached: true
|
||||
@ -58,6 +68,9 @@ events:(
|
||||
directories:
|
||||
source: "[^"]*/Tests/RunCMake/try_compile/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
binary: "[^"]*/Tests/RunCMake/try_compile/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
cmakeVariables:(
|
||||
CMAKE_[^
|
||||
]*)+
|
||||
buildResult:
|
||||
variable: "COMPILE_RESULT"
|
||||
cached: true
|
||||
|
||||
@ -1,10 +1,23 @@
|
||||
enable_language(C)
|
||||
|
||||
set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
|
||||
ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
||||
abcdefghijklmnopqrstuvwxyz
|
||||
_-0123456789
|
||||
"WITH SPACE"
|
||||
)
|
||||
set(ABCDEFGHIJKLMNOPQRSTUVWXYZ "Upper case")
|
||||
set(abcdefghijklmnopqrstuvwxyz "Lower case")
|
||||
set(_-0123456789 "Other chars")
|
||||
set("WITH SPACE" "Space")
|
||||
|
||||
try_compile(COMPILE_RESULT
|
||||
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/ConfigureLog-bad.c
|
||||
LOG_DESCRIPTION "Source that should not compile."
|
||||
)
|
||||
|
||||
unset(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES)
|
||||
|
||||
try_compile(COMPILE_RESULT
|
||||
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/ConfigureLog-test.c
|
||||
NO_LOG
|
||||
|
||||
@ -20,6 +20,9 @@ events:(
|
||||
directories:
|
||||
source: "[^"]*/Tests/RunCMake/try_compile/Inspect-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
binary: "[^"]*/Tests/RunCMake/try_compile/Inspect-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
cmakeVariables:(
|
||||
CMAKE_[^
|
||||
]*)+
|
||||
buildResult:
|
||||
variable: "CMAKE_C_ABI_COMPILED"
|
||||
cached: true
|
||||
@ -44,6 +47,9 @@ events:(
|
||||
directories:
|
||||
source: "[^"]*/Tests/RunCMake/try_compile/Inspect-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
binary: "[^"]*/Tests/RunCMake/try_compile/Inspect-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
cmakeVariables:(
|
||||
CMAKE_[^
|
||||
]*)+
|
||||
buildResult:
|
||||
variable: "CMAKE_CXX_ABI_COMPILED"
|
||||
cached: true
|
||||
|
||||
@ -19,6 +19,9 @@ events:(
|
||||
directories:
|
||||
source: "[^"]*/Tests/RunCMake/try_run/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
binary: "[^"]*/Tests/RunCMake/try_run/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
cmakeVariables:(
|
||||
CMAKE_[^
|
||||
]*)+
|
||||
buildResult:
|
||||
variable: "CMAKE_C_ABI_COMPILED"
|
||||
cached: true
|
||||
@ -40,6 +43,9 @@ events:(
|
||||
directories:
|
||||
source: "[^"]*/Tests/RunCMake/try_run/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
binary: "[^"]*/Tests/RunCMake/try_run/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
cmakeVariables:(
|
||||
CMAKE_[^
|
||||
]*)+
|
||||
buildResult:
|
||||
variable: "COMPILE_RESULT"
|
||||
cached: true
|
||||
@ -59,6 +65,9 @@ events:(
|
||||
directories:
|
||||
source: "[^"]*/Tests/RunCMake/try_run/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
binary: "[^"]*/Tests/RunCMake/try_run/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
cmakeVariables:(
|
||||
CMAKE_[^
|
||||
]*)+
|
||||
buildResult:
|
||||
variable: "COMPILE_RESULT"
|
||||
cached: true
|
||||
@ -83,6 +92,9 @@ events:(
|
||||
directories:
|
||||
source: "[^"]*/Tests/RunCMake/try_run/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
binary: "[^"]*/Tests/RunCMake/try_run/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
cmakeVariables:(
|
||||
CMAKE_[^
|
||||
]*)+
|
||||
buildResult:
|
||||
variable: "COMPILE_RESULT"
|
||||
cached: true
|
||||
@ -103,6 +115,9 @@ events:(
|
||||
directories:
|
||||
source: "[^"]*/Tests/RunCMake/try_run/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
binary: "[^"]*/Tests/RunCMake/try_run/ConfigureLog-build/CMakeFiles/CMakeScratch/TryCompile-[^/"]+"
|
||||
cmakeVariables:(
|
||||
CMAKE_[^
|
||||
]*)+
|
||||
buildResult:
|
||||
variable: "COMPILE_RESULT"
|
||||
cached: true
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user