diff options
author | Brad King <brad.king@kitware.com> | 2009-01-22 18:18:40 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-01-22 18:18:40 (GMT) |
commit | c332e0bf3c4e619358322bd0d0961af45653eb5b (patch) | |
tree | 3e31da4052687557169b0e8da2cf897f42cbcb63 /Tests | |
parent | 3028ca756c8621b3cc37032987eb01fbe61da248 (diff) | |
download | CMake-c332e0bf3c4e619358322bd0d0961af45653eb5b.zip CMake-c332e0bf3c4e619358322bd0d0961af45653eb5b.tar.gz CMake-c332e0bf3c4e619358322bd0d0961af45653eb5b.tar.bz2 |
ENH: Isolate policy changes in included scripts
Isolation of policy changes inside scripts is important for protecting
the including context. This teaches include() and find_package() to
imply a cmake_policy(PUSH) and cmake_policy(POP) around the scripts they
load, with a NO_POLICY_SCOPE option to disable the behavior. This also
creates CMake Policy CMP0011 to provide compatibility. See issue #8192.
Diffstat (limited to 'Tests')
-rw-r--r-- | Tests/PolicyScope/Bar.cmake | 8 | ||||
-rw-r--r-- | Tests/PolicyScope/CMakeLists.txt | 33 | ||||
-rw-r--r-- | Tests/PolicyScope/FindFoo.cmake | 2 |
3 files changed, 42 insertions, 1 deletions
diff --git a/Tests/PolicyScope/Bar.cmake b/Tests/PolicyScope/Bar.cmake new file mode 100644 index 0000000..cf1904c --- /dev/null +++ b/Tests/PolicyScope/Bar.cmake @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 2.6.3) + +# Make sure a policy set differently by our includer is now correct. +cmake_policy(GET CMP0003 cmp) +check(CMP0003 "NEW" "${cmp}") + +# Test allowing the top-level file to not have cmake_minimum_required. +cmake_policy(SET CMP0000 OLD) diff --git a/Tests/PolicyScope/CMakeLists.txt b/Tests/PolicyScope/CMakeLists.txt index ccb64de..89a89ee 100644 --- a/Tests/PolicyScope/CMakeLists.txt +++ b/Tests/PolicyScope/CMakeLists.txt @@ -1,5 +1,5 @@ -cmake_minimum_required(VERSION 2.6.3) project(PolicyScope C) +# No cmake_minimum_required(VERSION), it's in FindFoo. #----------------------------------------------------------------------------- # Helper function to report results. @@ -10,6 +10,37 @@ function(check msg lhs rhs) 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. diff --git a/Tests/PolicyScope/FindFoo.cmake b/Tests/PolicyScope/FindFoo.cmake new file mode 100644 index 0000000..5b441e2 --- /dev/null +++ b/Tests/PolicyScope/FindFoo.cmake @@ -0,0 +1,2 @@ +cmake_minimum_required(VERSION 2.6.3) +cmake_policy(SET CMP0003 OLD) |