Răsfoiți Sursa

Merge topic 'verify-interface-header-sets-interface-library-source-language' into release-3.24

41f15193e5 VERIFY_INTERFACE_HEADER_SETS: Fall back to global languages

Acked-by: Kitware Robot <[email protected]>
Tested-by: buildbot <[email protected]>
Merge-request: !7517
Brad King 3 ani în urmă
părinte
comite
12830cc2a9

+ 3 - 1
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.
 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, 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
 If the project wishes to control which header sets are verified by this
 property, you can set :prop_tgt:`INTERFACE_HEADER_SETS_TO_VERIFY`.
 property, you can set :prop_tgt:`INTERFACE_HEADER_SETS_TO_VERIFY`.

+ 6 - 0
Source/cmGeneratorTarget.cxx

@@ -8668,6 +8668,12 @@ std::string cmGeneratorTarget::GenerateHeaderSetVerificationFile(
           languages->insert("C");
           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")) {
     if (languages->count("CXX")) {

+ 1 - 0
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_c_verify_interface_header_sets)
 run_cmake_build(VerifyHeaderSets lang_test_cxx_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)
 run_cmake_build(VerifyHeaderSets list_verify_interface_header_sets)
 
 
 set(RunCMake_TEST_OPTIONS -DCMAKE_VERIFY_INTERFACE_HEADER_SETS=ON)
 set(RunCMake_TEST_OPTIONS -DCMAKE_VERIFY_INTERFACE_HEADER_SETS=ON)

+ 4 - 0
Tests/RunCMake/VerifyHeaderSets/VerifyHeaderSets.cmake

@@ -61,6 +61,10 @@ add_library(lang_test_cxx STATIC lib.c lib.cxx)
 target_compile_definitions(lang_test_cxx INTERFACE EXPECT_CXX)
 target_compile_definitions(lang_test_cxx INTERFACE EXPECT_CXX)
 target_sources(lang_test_cxx INTERFACE FILE_SET HEADERS FILES lang_test.h)
 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)
 set_property(SOURCE error.h PROPERTY LANGUAGE C)
 
 
 add_library(list STATIC lib.c)
 add_library(list STATIC lib.c)