From 80fc564dd7cbebc374a18fb57c71472dac5de6c1 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 22 Nov 2022 11:19:39 -0500 Subject: try_compile: Restore COPY_FILE with CMAKE_TRY_COMPILE_CONFIGURATION Since commit 0c141b0393 (try_compile: Record output location instead of reverse computing it, 2022-08-31, v3.25.0-rc1~154^2) we always look for the "Debug" configuration's output binary from the test project. Restore looking for the `CMAKE_TRY_COMPILE_CONFIGURATION`. Fixes: #24180 --- Source/cmCoreTryCompile.cxx | 15 +++++++++++---- Tests/RunCMake/try_compile/CopyFileConfig.cmake | 8 ++++++++ .../try_compile/old_and_new_signature_tests.cmake | 1 + 3 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 Tests/RunCMake/try_compile/CopyFileConfig.cmake diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx index 867f984..b44111d 100644 --- a/Source/cmCoreTryCompile.cxx +++ b/Source/cmCoreTryCompile.cxx @@ -206,6 +206,8 @@ auto const TryRunSourcesArgParser = auto const TryRunOldArgParser = makeTryRunParser(TryCompileOldArgParser); #undef BIND_LANG_PROPS + +std::string const TryCompileDefaultConfig = "DEBUG"; } Arguments cmCoreTryCompile::ParseArgs( @@ -706,9 +708,9 @@ bool cmCoreTryCompile::TryCompileCode(Arguments& arguments, CM_FALLTHROUGH; case cmPolicies::NEW: { // NEW behavior is to pass config-specific compiler flags. - static std::string const cfgDefault = "DEBUG"; - std::string const cfg = - !tcConfig.empty() ? cmSystemTools::UpperCase(tcConfig) : cfgDefault; + std::string const cfg = !tcConfig.empty() + ? cmSystemTools::UpperCase(tcConfig) + : TryCompileDefaultConfig; for (std::string const& li : testLangs) { std::string const langFlagsCfg = cmStrCat("CMAKE_", li, "_FLAGS_", cfg); @@ -1199,7 +1201,12 @@ void cmCoreTryCompile::FindOutputFile(const std::string& targetName) tmpOutputFile += targetName; if (this->Makefile->GetGlobalGenerator()->IsMultiConfig()) { - tmpOutputFile += "_DEBUG"; + std::string const tcConfig = + this->Makefile->GetSafeDefinition("CMAKE_TRY_COMPILE_CONFIGURATION"); + std::string const cfg = !tcConfig.empty() + ? cmSystemTools::UpperCase(tcConfig) + : TryCompileDefaultConfig; + tmpOutputFile = cmStrCat(tmpOutputFile, '_', cfg); } tmpOutputFile += "_loc"; diff --git a/Tests/RunCMake/try_compile/CopyFileConfig.cmake b/Tests/RunCMake/try_compile/CopyFileConfig.cmake new file mode 100644 index 0000000..22d20b7 --- /dev/null +++ b/Tests/RunCMake/try_compile/CopyFileConfig.cmake @@ -0,0 +1,8 @@ +enable_language(C) +set(CMAKE_TRY_COMPILE_CONFIGURATION Release) + +include(${CMAKE_CURRENT_SOURCE_DIR}/${try_compile_DEFS}) +try_compile(RESULT + ${try_compile_bindir_or_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/src.c + COPY_FILE "${CMAKE_CURRENT_BINARY_DIR}/out.bin" + ) diff --git a/Tests/RunCMake/try_compile/old_and_new_signature_tests.cmake b/Tests/RunCMake/try_compile/old_and_new_signature_tests.cmake index ac07ad3..3158e32 100644 --- a/Tests/RunCMake/try_compile/old_and_new_signature_tests.cmake +++ b/Tests/RunCMake/try_compile/old_and_new_signature_tests.cmake @@ -23,6 +23,7 @@ run_cmake(TryRunArgs) run_cmake(BuildType) run_cmake(BuildTypeAsFlag) run_cmake(OutputDirAsFlag) +run_cmake(CopyFileConfig) run_cmake(EnvConfig) -- cgit v0.12