mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-31 03:40:32 -06:00
The languages used in compiling STATIC libraries need to be propagated to dependents regardless of the settings of INTERFACE_LINK_LIBRARIES or CMP0022. They are independent of the libraries in the link interface. Prior to commit v2.8.12~192^2~2 (Introduce the INTERFACE_LINK_LIBRARIES property, 2013-06-04) the cmTarget::ComputeLinkInterface code path for "explicitLibraries" could never be taken for STATIC libraries, so the logic to propagate languages existed only in the non-explicitLibraries code path. After that commit, INTERFACE_LINK_LIBRARIES could be set for STATIC libraries to cause the "explicitLibraries" code path to be taken. The commit also left the old non-explicitLibraries code path conditional on CMP0022 not being set to NEW. Thus link language propagation was left missing from two cases by that commit. The explicitLibraries code path was fixed to propagate languages by commit v2.8.12~149^2~1 (cmTarget: Fix iface libraries and languages for static libraries, 2013-07-26). However, the non-explicitLibraries case was never taught to propagate languages when CMP0022 is set to NEW. Fix that now. Factor the logic to propagate link languages out of the link interface libraries conditions so that it always occurs. Update Tests/Fortran to set CMP0022 to NEW to test this case (because the test passes only if link language propagation works).
If you think about adding a new testcase then here is a small checklist you can run through to find a proper place for it. Go through the list from the beginning and stop once you find something that matches your tests needs, i.e. if you will test a module and only need the configure mode use the instructions from section 2, not 3. 1. Your testcase can run in CMake script mode, i.e. "cmake -P something" Put your test in Tests/CMakeTests/ directory as a .cmake.in file. It will be put into the test binary directory by configure_file(... @ONLY) and run from there. Use the AddCMakeTest() macro in Tests/CMakeTests/CMakeLists.txt to add your test to the test runs. 2. Your test needs CMake to run in configure mode, but will not build anything This includes tests that will build something using try_compile() and friends, but nothing that expects add_executable(), add_library(), or add_test() to run. If the test configures the project only once and it must succeed then put it into the Tests/CMakeOnly/ directory. Create a subdirectory named like your test and write the CMakeLists.txt you need into that subdirectory. Use the add_CMakeOnly_test() macro from Tests/CMakeOnly/CMakeLists.txt to add your test to the test runs. If the test configures the project with multiple variations and verifies success or failure each time then put it into the Tests/RunCMake/ directory. Read the instructions in Tests/RunCMake/CMakeLists.txt to add a test. 3. If you are testing something from the Modules directory Put your test in the Tests/Modules/ directory. Create a subdirectory there named after your test. Use the ADD_TEST_MACRO macro from Tests/CMakeLists.txt to add your test to the test run. If you have put your stuff in Tests/Modules/Foo then you call it using ADD_TEST_MACRO(Module.Foo Foo). 4. You are doing other stuff. Find a good place ;) In doubt mail to cmake-developers@cmake.org and ask for advise.