include(RunCMake) function(configure_and_build case) set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build) run_cmake(${case}) set(RunCMake_TEST_NO_CLEAN 1) set(RunCMake_TEST_OUTPUT_MERGE 1) run_cmake_command(${case}-build ${CMAKE_COMMAND} --build . --target main) unset(RunCMake_TEST_NO_CLEAN) unset(RunCMake_TEST_OUTPUT_MERGE) unset(RunCMake_TEST_BINARY_DIR) endfunction() # CMP0220 policy behavior. These cases are language-agnostic (they use CXX) # and configure-only, so they run on every platform regardless of CMake_TEST_CUDA. # NEW: language configuration propagates up out of the enabling scope. run_cmake(CMP0220-NEW) run_cmake(CMP0220-NEW-function) run_cmake(CMP0220-NEW-multilevel) # OLD: language configuration stays in the scope that enabled it. run_cmake(CMP0220-OLD) # MIXED: NEW and OLD set at different scope levels around the enabling scope. run_cmake(CMP0220-MIXED-block) run_cmake(CMP0220-MIXED-nested-block) # WARN: whether the optional CMP0220 warning is emitted. run_cmake(CMP0220-WARN) run_cmake(CMP0220-WARN-default) run_cmake(CMP0220-WARN-block) run_cmake(CMP0220-WARN-top-level) # These cases enable CXX in a subdirectory and verify that its implicit RC # language state is usable from an ancestor scope. if(CMake_TEST_RESOURCES) configure_and_build(CXXImplicitRC) run_cmake(CMP0220-MIXED-implicit-RC) endif() # The following cases enable CUDA in a subdirectory and build a target in an # ancestor scope, so they require a working CUDA toolchain. if(CMake_TEST_CUDA) foreach(case IN ITEMS CUDAParent CUDASibling) configure_and_build(${case}) endforeach() endif()