diff options
author | Kyle Edwards <kyle.edwards@kitware.com> | 2022-07-27 13:29:09 -0400 |
---|---|---|
committer | Kyle Edwards <kyle.edwards@kitware.com> | 2022-07-27 13:29:09 -0400 |
commit | 41f15193e5adfaaf9990b2d8d81bb0ec6c05572c (patch) | |
tree | 76edc6bb52a361a66ae085e11bd9a3baadd1ea24 | |
parent | 22c535299019eb835dd0d5793d3b40e59d0cc6ee (diff) | |
download | cmake-41f15193e5adfaaf9990b2d8d81bb0ec6c05572c.tar.gz |
VERIFY_INTERFACE_HEADER_SETS: Fall back to global languages
If a target doesn't have any source files, fall back to the global
list of enabled languages to determine the language of the header
file to verify.
Fixes: #23774
-rw-r--r-- | Help/prop_tgt/VERIFY_INTERFACE_HEADER_SETS.rst | 4 | ||||
-rw-r--r-- | Source/cmGeneratorTarget.cxx | 6 | ||||
-rw-r--r-- | Tests/RunCMake/VerifyHeaderSets/RunCMakeTest.cmake | 1 | ||||
-rw-r--r-- | Tests/RunCMake/VerifyHeaderSets/VerifyHeaderSets.cmake | 4 |
4 files changed, 14 insertions, 1 deletions
diff --git a/Help/prop_tgt/VERIFY_INTERFACE_HEADER_SETS.rst b/Help/prop_tgt/VERIFY_INTERFACE_HEADER_SETS.rst index 30c02f5b00..cbe8a6a4b6 100644 --- a/Help/prop_tgt/VERIFY_INTERFACE_HEADER_SETS.rst +++ b/Help/prop_tgt/VERIFY_INTERFACE_HEADER_SETS.rst @@ -22,7 +22,9 @@ If the header's :prop_sf:`LANGUAGE` property is set, the value of that property is used to determine the language with which to compile the header file. Otherwise, if the target has any C++ sources, the header is compiled as C++. Otherwise, if the target has any C sources, the header is compiled as C. -Otherwise, the header file is not compiled. +Otherwise, if C++ is enabled globally, the header is compiled as C++. +Otherwise, if C is enabled globally, the header is compiled as C. Otherwise, +the header file is not compiled. If the project wishes to control which header sets are verified by this property, you can set :prop_tgt:`INTERFACE_HEADER_SETS_TO_VERIFY`. diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index 8a7215b127..ee4d2e3c09 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -8662,6 +8662,12 @@ std::string cmGeneratorTarget::GenerateHeaderSetVerificationFile( languages->insert("C"); } } + + if (languages->empty()) { + std::vector<std::string> languagesVector; + this->GlobalGenerator->GetEnabledLanguages(languagesVector); + languages->insert(languagesVector.begin(), languagesVector.end()); + } } if (languages->count("CXX")) { diff --git a/Tests/RunCMake/VerifyHeaderSets/RunCMakeTest.cmake b/Tests/RunCMake/VerifyHeaderSets/RunCMakeTest.cmake index f022a43c47..9f9a1e70bd 100644 --- a/Tests/RunCMake/VerifyHeaderSets/RunCMakeTest.cmake +++ b/Tests/RunCMake/VerifyHeaderSets/RunCMakeTest.cmake @@ -40,6 +40,7 @@ endif() run_cmake_build(VerifyHeaderSets lang_test_c_verify_interface_header_sets) run_cmake_build(VerifyHeaderSets lang_test_cxx_verify_interface_header_sets) +run_cmake_build(VerifyHeaderSets interface_lang_test_cxx_verify_interface_header_sets) run_cmake_build(VerifyHeaderSets list_verify_interface_header_sets) set(RunCMake_TEST_OPTIONS -DCMAKE_VERIFY_INTERFACE_HEADER_SETS=ON) diff --git a/Tests/RunCMake/VerifyHeaderSets/VerifyHeaderSets.cmake b/Tests/RunCMake/VerifyHeaderSets/VerifyHeaderSets.cmake index 82ed935a62..70dc89b55c 100644 --- a/Tests/RunCMake/VerifyHeaderSets/VerifyHeaderSets.cmake +++ b/Tests/RunCMake/VerifyHeaderSets/VerifyHeaderSets.cmake @@ -59,6 +59,10 @@ add_library(lang_test_cxx STATIC lib.c lib.cxx) target_compile_definitions(lang_test_cxx INTERFACE EXPECT_CXX) target_sources(lang_test_cxx INTERFACE FILE_SET HEADERS FILES lang_test.h) +add_library(interface_lang_test_cxx INTERFACE) +target_compile_definitions(interface_lang_test_cxx INTERFACE EXPECT_CXX) +target_sources(interface_lang_test_cxx INTERFACE FILE_SET HEADERS FILES lang_test.h) + set_property(SOURCE error.h PROPERTY LANGUAGE C) add_library(list STATIC lib.c) |