mirror of
https://github.com/reactos/CMake.git
synced 2024-11-24 20:19:53 +00:00
test: add a test for PARENT_SCOPE with multiple scopes
See the comment in the test for what is being tested here.
This commit is contained in:
parent
064c415d27
commit
e0c0b1ace5
144
Tests/RunCMake/set/ParentPullingRecursive-stderr.txt
Normal file
144
Tests/RunCMake/set/ParentPullingRecursive-stderr.txt
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
----------
|
||||||
|
variable values at top before calls:
|
||||||
|
top_implicit_inner_set: -->top<--
|
||||||
|
top_implicit_inner_unset: <undefined>
|
||||||
|
top_explicit_inner_set: -->top<--
|
||||||
|
top_explicit_inner_unset: <undefined>
|
||||||
|
top_explicit_inner_tounset: -->top<--
|
||||||
|
top_implicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: <undefined>
|
||||||
|
top_explicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: <undefined>
|
||||||
|
top_explicit_outer_tounset: -->top<--
|
||||||
|
outer_implicit_inner_set: <undefined>
|
||||||
|
outer_implicit_inner_unset: <undefined>
|
||||||
|
outer_explicit_inner_set: <undefined>
|
||||||
|
outer_explicit_inner_unset: <undefined>
|
||||||
|
outer_explicit_inner_tounset: <undefined>
|
||||||
|
----------
|
||||||
|
----------
|
||||||
|
variable values at outer start:
|
||||||
|
top_implicit_inner_set: -->top<--
|
||||||
|
top_implicit_inner_unset: <undefined>
|
||||||
|
top_explicit_inner_set: -->top<--
|
||||||
|
top_explicit_inner_unset: <undefined>
|
||||||
|
top_explicit_inner_tounset: -->top<--
|
||||||
|
top_implicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: <undefined>
|
||||||
|
top_explicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: <undefined>
|
||||||
|
top_explicit_outer_tounset: -->top<--
|
||||||
|
outer_implicit_inner_set: <undefined>
|
||||||
|
outer_implicit_inner_unset: <undefined>
|
||||||
|
outer_explicit_inner_set: <undefined>
|
||||||
|
outer_explicit_inner_unset: <undefined>
|
||||||
|
outer_explicit_inner_tounset: <undefined>
|
||||||
|
----------
|
||||||
|
----------
|
||||||
|
variable values at outer before inner:
|
||||||
|
top_implicit_inner_set: -->top<--
|
||||||
|
top_implicit_inner_unset: <undefined>
|
||||||
|
top_explicit_inner_set: -->top<--
|
||||||
|
top_explicit_inner_unset: <undefined>
|
||||||
|
top_explicit_inner_tounset: -->top<--
|
||||||
|
top_implicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: <undefined>
|
||||||
|
top_explicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: <undefined>
|
||||||
|
top_explicit_outer_tounset: -->top<--
|
||||||
|
outer_implicit_inner_set: -->outer<--
|
||||||
|
outer_implicit_inner_unset: <undefined>
|
||||||
|
outer_explicit_inner_set: -->outer<--
|
||||||
|
outer_explicit_inner_unset: <undefined>
|
||||||
|
outer_explicit_inner_tounset: -->outer<--
|
||||||
|
----------
|
||||||
|
----------
|
||||||
|
variable values at inner start:
|
||||||
|
top_implicit_inner_set: -->top<--
|
||||||
|
top_implicit_inner_unset: <undefined>
|
||||||
|
top_explicit_inner_set: -->top<--
|
||||||
|
top_explicit_inner_unset: <undefined>
|
||||||
|
top_explicit_inner_tounset: -->top<--
|
||||||
|
top_implicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: <undefined>
|
||||||
|
top_explicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: <undefined>
|
||||||
|
top_explicit_outer_tounset: -->top<--
|
||||||
|
outer_implicit_inner_set: -->outer<--
|
||||||
|
outer_implicit_inner_unset: <undefined>
|
||||||
|
outer_explicit_inner_set: -->outer<--
|
||||||
|
outer_explicit_inner_unset: <undefined>
|
||||||
|
outer_explicit_inner_tounset: -->outer<--
|
||||||
|
----------
|
||||||
|
----------
|
||||||
|
variable values at inner end:
|
||||||
|
top_implicit_inner_set: -->top<--
|
||||||
|
top_implicit_inner_unset: <undefined>
|
||||||
|
top_explicit_inner_set: -->top<--
|
||||||
|
top_explicit_inner_unset: <undefined>
|
||||||
|
top_explicit_inner_tounset: -->top<--
|
||||||
|
top_implicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: <undefined>
|
||||||
|
top_explicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: <undefined>
|
||||||
|
top_explicit_outer_tounset: -->top<--
|
||||||
|
outer_implicit_inner_set: -->outer<--
|
||||||
|
outer_implicit_inner_unset: <undefined>
|
||||||
|
outer_explicit_inner_set: -->outer<--
|
||||||
|
outer_explicit_inner_unset: <undefined>
|
||||||
|
outer_explicit_inner_tounset: -->outer<--
|
||||||
|
----------
|
||||||
|
----------
|
||||||
|
variable values at outer after inner:
|
||||||
|
top_implicit_inner_set: -->top<--
|
||||||
|
top_implicit_inner_unset: <undefined>
|
||||||
|
top_explicit_inner_set: -->inner<--
|
||||||
|
top_explicit_inner_unset: -->inner<--
|
||||||
|
top_explicit_inner_tounset: <undefined>
|
||||||
|
top_implicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: <undefined>
|
||||||
|
top_explicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: <undefined>
|
||||||
|
top_explicit_outer_tounset: -->top<--
|
||||||
|
outer_implicit_inner_set: -->outer<--
|
||||||
|
outer_implicit_inner_unset: <undefined>
|
||||||
|
outer_explicit_inner_set: -->inner<--
|
||||||
|
outer_explicit_inner_unset: -->inner<--
|
||||||
|
outer_explicit_inner_tounset: <undefined>
|
||||||
|
----------
|
||||||
|
----------
|
||||||
|
variable values at outer end:
|
||||||
|
top_implicit_inner_set: -->top<--
|
||||||
|
top_implicit_inner_unset: <undefined>
|
||||||
|
top_explicit_inner_set: -->inner<--
|
||||||
|
top_explicit_inner_unset: -->inner<--
|
||||||
|
top_explicit_inner_tounset: <undefined>
|
||||||
|
top_implicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: <undefined>
|
||||||
|
top_explicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: <undefined>
|
||||||
|
top_explicit_outer_tounset: -->top<--
|
||||||
|
outer_implicit_inner_set: -->outer<--
|
||||||
|
outer_implicit_inner_unset: <undefined>
|
||||||
|
outer_explicit_inner_set: -->inner<--
|
||||||
|
outer_explicit_inner_unset: -->inner<--
|
||||||
|
outer_explicit_inner_tounset: <undefined>
|
||||||
|
----------
|
||||||
|
----------
|
||||||
|
variable values at top after calls:
|
||||||
|
top_implicit_inner_set: -->top<--
|
||||||
|
top_implicit_inner_unset: <undefined>
|
||||||
|
top_explicit_inner_set: -->outer<--
|
||||||
|
top_explicit_inner_unset: -->outer<--
|
||||||
|
top_explicit_inner_tounset: <undefined>
|
||||||
|
top_implicit_outer_set: -->top<--
|
||||||
|
top_explicit_outer_unset: -->outer<--
|
||||||
|
top_explicit_outer_set: -->outer<--
|
||||||
|
top_explicit_outer_unset: -->outer<--
|
||||||
|
top_explicit_outer_tounset: <undefined>
|
||||||
|
outer_implicit_inner_set: <undefined>
|
||||||
|
outer_implicit_inner_unset: <undefined>
|
||||||
|
outer_explicit_inner_set: <undefined>
|
||||||
|
outer_explicit_inner_unset: <undefined>
|
||||||
|
outer_explicit_inner_tounset: <undefined>
|
||||||
|
----------
|
104
Tests/RunCMake/set/ParentPullingRecursive.cmake
Normal file
104
Tests/RunCMake/set/ParentPullingRecursive.cmake
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.0)
|
||||||
|
project(Minimal NONE)
|
||||||
|
|
||||||
|
function(report where)
|
||||||
|
message("----------")
|
||||||
|
message("variable values at ${where}:")
|
||||||
|
foreach(var IN ITEMS
|
||||||
|
top_implicit_inner_set top_implicit_inner_unset
|
||||||
|
top_explicit_inner_set top_explicit_inner_unset top_explicit_inner_tounset
|
||||||
|
top_implicit_outer_set top_explicit_outer_unset
|
||||||
|
top_explicit_outer_set top_explicit_outer_unset top_explicit_outer_tounset
|
||||||
|
|
||||||
|
outer_implicit_inner_set outer_implicit_inner_unset
|
||||||
|
outer_explicit_inner_set outer_explicit_inner_unset outer_explicit_inner_tounset)
|
||||||
|
if(DEFINED ${var})
|
||||||
|
message("${var}: -->${${var}}<--")
|
||||||
|
else()
|
||||||
|
message("${var}: <undefined>")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
message("----------")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
macro(set_values upscope downscope value)
|
||||||
|
# Pull the value in implicitly.
|
||||||
|
set(dummy ${${upscope}_implicit_${downscope}_set})
|
||||||
|
set(dummy ${${upscope}_implicit_${downscope}_unset})
|
||||||
|
# Pull it down explicitly.
|
||||||
|
set(${upscope}_explicit_${downscope}_set "${value}" PARENT_SCOPE)
|
||||||
|
set(${upscope}_explicit_${downscope}_unset "${value}" PARENT_SCOPE)
|
||||||
|
set(${upscope}_explicit_${downscope}_tounset PARENT_SCOPE)
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
function(inner)
|
||||||
|
report("inner start")
|
||||||
|
|
||||||
|
set_values(top inner inner)
|
||||||
|
set_values(outer inner inner)
|
||||||
|
|
||||||
|
report("inner end")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(outer)
|
||||||
|
report("outer start")
|
||||||
|
|
||||||
|
set_values(top outer outer)
|
||||||
|
|
||||||
|
# Set values for inner to manipulate.
|
||||||
|
set(outer_implicit_inner_set outer)
|
||||||
|
set(outer_implicit_inner_unset)
|
||||||
|
set(outer_explicit_inner_set outer)
|
||||||
|
set(outer_explicit_inner_unset)
|
||||||
|
set(outer_explicit_inner_tounset outer)
|
||||||
|
|
||||||
|
report("outer before inner")
|
||||||
|
|
||||||
|
inner()
|
||||||
|
|
||||||
|
report("outer after inner")
|
||||||
|
|
||||||
|
# Do what inner does so that we can test the values that inner should have
|
||||||
|
# pulled through to here.
|
||||||
|
set_values(top inner outer)
|
||||||
|
|
||||||
|
report("outer end")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# variable name is:
|
||||||
|
#
|
||||||
|
# <upscope>_<pulltype>_<downscope>_<settype>
|
||||||
|
#
|
||||||
|
# where the value is the name of the scope it was set in. The scopes available
|
||||||
|
# are "top", "outer", and "inner". The pull type may either be "implicit" or
|
||||||
|
# "explicit" based on whether the pull is due to a variable dereference or a
|
||||||
|
# PARENT_SCOPE setting. The settype is "set" where both scopes set a value,
|
||||||
|
# "unset" where upscope unsets it and downscope sets it, and "tounset" where
|
||||||
|
# upscope sets it and downscope unsets it.
|
||||||
|
#
|
||||||
|
# We test the following combinations:
|
||||||
|
#
|
||||||
|
# - outer overriding top's values;
|
||||||
|
# - inner overriding top's values;
|
||||||
|
# - inner overriding outer's values; and
|
||||||
|
# - outer overriding inner's values in top after inner has run.
|
||||||
|
|
||||||
|
# Set values for inner to manipulate.
|
||||||
|
set(top_implicit_inner_set top)
|
||||||
|
set(top_implicit_inner_unset)
|
||||||
|
set(top_explicit_inner_set top)
|
||||||
|
set(top_explicit_inner_unset)
|
||||||
|
set(top_explicit_inner_tounset top)
|
||||||
|
|
||||||
|
# Set values for outer to manipulate.
|
||||||
|
set(top_implicit_outer_set top)
|
||||||
|
set(top_implicit_outer_unset)
|
||||||
|
set(top_explicit_outer_set top)
|
||||||
|
set(top_explicit_outer_unset)
|
||||||
|
set(top_explicit_outer_tounset top)
|
||||||
|
|
||||||
|
report("top before calls")
|
||||||
|
|
||||||
|
outer()
|
||||||
|
|
||||||
|
report("top after calls")
|
@ -2,3 +2,4 @@ include(RunCMake)
|
|||||||
|
|
||||||
run_cmake(PARENT_SCOPE)
|
run_cmake(PARENT_SCOPE)
|
||||||
run_cmake(ParentPulling)
|
run_cmake(ParentPulling)
|
||||||
|
run_cmake(ParentPullingRecursive)
|
||||||
|
Loading…
Reference in New Issue
Block a user