| project(PolicyScope C) |
| # No cmake_minimum_required(VERSION), it's in FindFoo. |
| |
| #----------------------------------------------------------------------------- |
| # Helper function to report results. |
| function(check msg lhs rhs) |
| if(NOT "${lhs}" STREQUAL "${rhs}") |
| message(FATAL_ERROR "${msg}: expected [${lhs}], got [${rhs}]") |
| endif() |
| endfunction() |
| |
| #----------------------------------------------------------------------------- |
| # Test using a development framework that sets policies for us. |
| |
| # Policy CMP0011 should not be set at this point. |
| cmake_policy(GET CMP0011 cmp) |
| check(CMP0011 "" "${cmp}") |
| |
| # Put the test modules in the search path. |
| list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) |
| |
| # The included file should set policies for us. |
| find_package(Foo) |
| |
| # Check policies set by the package. |
| cmake_policy(GET CMP0003 cmp) |
| check(CMP0003 "OLD" "${cmp}") |
| cmake_policy(GET CMP0002 cmp) |
| check(CMP0002 "NEW" "${cmp}") |
| cmake_policy(GET CMP0011 cmp) |
| check(CMP0011 "NEW" "${cmp}") |
| |
| # Make sure an included file cannot change policies. |
| include(Bar) |
| cmake_policy(GET CMP0003 cmp) |
| check(CMP0003 "OLD" "${cmp}") |
| |
| # Allow the included file to change policies. |
| include(Bar NO_POLICY_SCOPE) |
| cmake_policy(GET CMP0003 cmp) |
| check(CMP0003 "NEW" "${cmp}") |
| |
| #----------------------------------------------------------------------------- |
| # Test function and macro policy recording. |
| |
| # Create the functions in an isolated scope in which we change policies. |
| cmake_policy(PUSH) |
| if(1) |
| # Change CMP0002 |
| cmake_policy(SET CMP0002 OLD) |
| function(func1) |
| # CMP0002 should be changed when this function is invoked |
| cmake_policy(GET CMP0002 cmp) |
| check(CMP0002 "OLD" "${cmp}") |
| endfunction() |
| |
| # Unset CMP0002 |
| cmake_policy(VERSION 2.4) |
| macro(macro1) |
| # CMP0002 should be unset when this macro is invoked |
| cmake_policy(GET CMP0002 cmp) |
| check(CMP0002 "" "${cmp}") |
| |
| # Setting the policy should work here and also in the caller. |
| cmake_policy(SET CMP0002 OLD) |
| cmake_policy(GET CMP0002 cmp) |
| check(CMP0002 "OLD" "${cmp}") |
| endmacro() |
| endif() |
| cmake_policy(POP) |
| |
| # CMP0002 should still be NEW in this context. |
| cmake_policy(GET CMP0002 cmp) |
| check(CMP0002 "NEW" "${cmp}") |
| |
| # Check the recorded policies |
| func1() |
| macro1() |
| |
| # The macro should have changed CMP0002. |
| cmake_policy(GET CMP0002 cmp) |
| check(CMP0002 "OLD" "${cmp}") |
| |
| #----------------------------------------------------------------------------- |
| # Test CMAKE_POLICY_DEFAULT_CMP<NNNN> variable. |
| cmake_policy(PUSH) |
| set(CMAKE_POLICY_DEFAULT_CMP0010 OLD) # ignored |
| set(CMAKE_POLICY_DEFAULT_CMP0012 OLD) # honored |
| set(CMAKE_POLICY_DEFAULT_CMP0013 NEW) # honored |
| set(CMAKE_POLICY_DEFAULT_CMP0014 "") # noop |
| cmake_policy(VERSION 2.6.3) |
| cmake_policy(GET CMP0010 cmp) |
| check(CMP0010 "NEW" "${cmp}") |
| cmake_policy(GET CMP0012 cmp) |
| check(CMP0012 "OLD" "${cmp}") |
| cmake_policy(GET CMP0013 cmp) |
| check(CMP0013 "NEW" "${cmp}") |
| cmake_policy(GET CMP0014 cmp) |
| check(CMP0014 "" "${cmp}") |
| cmake_policy(POP) |
| |
| #----------------------------------------------------------------------------- |
| # Dummy executable so the project can build and run. |
| add_executable(PolicyScope main.c) |