| include(RunCMake) | |
| if(CMake_TEST_SYCL) | |
| list(APPEND RunCMake_TEST_OPTIONS -Wno-experimental) | |
| endif() | |
| 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() | |
| if(CMake_TEST_SYCL) | |
| foreach(case IN ITEMS SYCLParent SYCLSibling) | |
| configure_and_build(${case}) | |
| endforeach() | |
| endif() |