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(check) #----------------------------------------------------------------------------- # 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(func1) # 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(macro1) endif(1) 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)