CMake/Tests/PolicyScope/CMakeLists.txt
Kitware Robot 9db3116226 Remove CMake-language block-end command arguments
Ancient versions of CMake required else(), endif(), and similar block
termination commands to have arguments matching the command starting the
block.  This is no longer the preferred style.

Run the following shell code:

for c in else endif endforeach endfunction endmacro endwhile; do
    echo 's/\b'"$c"'\(\s*\)(.\+)/'"$c"'\1()/'
done >convert.sed &&
git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' '*CMakeLists.txt' |
egrep -z -v '^(Utilities/cm|Source/kwsys/)' |
egrep -z -v 'Tests/CMakeTests/While-Endwhile-' |
xargs -0 sed -i -f convert.sed &&
rm convert.sed
2012-08-13 14:19:16 -04:00

105 lines
3.1 KiB
CMake

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)