From 378185fb7f672113257502ef96cf7106c22dd39f Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 24 Nov 2015 09:12:58 -0500 Subject: [PATCH 1/3] Tests: Add case for unmatched cmake_policy({PUSH,POP}) --- Tests/RunCMake/PolicyScope/NotClosed-result.txt | 1 + Tests/RunCMake/PolicyScope/NotClosed-stderr.txt | 4 ++++ Tests/RunCMake/PolicyScope/NotClosed.cmake | 1 + Tests/RunCMake/PolicyScope/NotOpened-result.txt | 1 + Tests/RunCMake/PolicyScope/NotOpened-stderr.txt | 4 ++++ Tests/RunCMake/PolicyScope/NotOpened.cmake | 1 + Tests/RunCMake/PolicyScope/RunCMakeTest.cmake | 2 ++ 7 files changed, 14 insertions(+) create mode 100644 Tests/RunCMake/PolicyScope/NotClosed-result.txt create mode 100644 Tests/RunCMake/PolicyScope/NotClosed-stderr.txt create mode 100644 Tests/RunCMake/PolicyScope/NotClosed.cmake create mode 100644 Tests/RunCMake/PolicyScope/NotOpened-result.txt create mode 100644 Tests/RunCMake/PolicyScope/NotOpened-stderr.txt create mode 100644 Tests/RunCMake/PolicyScope/NotOpened.cmake diff --git a/Tests/RunCMake/PolicyScope/NotClosed-result.txt b/Tests/RunCMake/PolicyScope/NotClosed-result.txt new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/Tests/RunCMake/PolicyScope/NotClosed-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/PolicyScope/NotClosed-stderr.txt b/Tests/RunCMake/PolicyScope/NotClosed-stderr.txt new file mode 100644 index 000000000..293d16117 --- /dev/null +++ b/Tests/RunCMake/PolicyScope/NotClosed-stderr.txt @@ -0,0 +1,4 @@ +^CMake Error at NotClosed.cmake:[0-9]+ \(include\): + cmake_policy PUSH without matching POP +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/PolicyScope/NotClosed.cmake b/Tests/RunCMake/PolicyScope/NotClosed.cmake new file mode 100644 index 000000000..19b880efa --- /dev/null +++ b/Tests/RunCMake/PolicyScope/NotClosed.cmake @@ -0,0 +1 @@ +cmake_policy(PUSH) diff --git a/Tests/RunCMake/PolicyScope/NotOpened-result.txt b/Tests/RunCMake/PolicyScope/NotOpened-result.txt new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/Tests/RunCMake/PolicyScope/NotOpened-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/PolicyScope/NotOpened-stderr.txt b/Tests/RunCMake/PolicyScope/NotOpened-stderr.txt new file mode 100644 index 000000000..f27aac8db --- /dev/null +++ b/Tests/RunCMake/PolicyScope/NotOpened-stderr.txt @@ -0,0 +1,4 @@ +^CMake Error at NotOpened.cmake:[0-9]+ \(cmake_policy\): + cmake_policy POP without matching PUSH +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/PolicyScope/NotOpened.cmake b/Tests/RunCMake/PolicyScope/NotOpened.cmake new file mode 100644 index 000000000..bb9f3a364 --- /dev/null +++ b/Tests/RunCMake/PolicyScope/NotOpened.cmake @@ -0,0 +1 @@ +cmake_policy(POP) diff --git a/Tests/RunCMake/PolicyScope/RunCMakeTest.cmake b/Tests/RunCMake/PolicyScope/RunCMakeTest.cmake index d6c021fc3..abd27f4cd 100644 --- a/Tests/RunCMake/PolicyScope/RunCMakeTest.cmake +++ b/Tests/RunCMake/PolicyScope/RunCMakeTest.cmake @@ -1,4 +1,6 @@ include(RunCMake) +run_cmake(NotClosed) +run_cmake(NotOpened) run_cmake(parent-dir-generate-time) run_cmake(dir-in-macro-generate-time) From b219ff94acf0b6c934c35e2ce42dfbf99580f1e8 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 24 Nov 2015 13:36:18 -0500 Subject: [PATCH 2/3] Tests: Add case for package version file unmatched policy scope --- Tests/RunCMake/find_package/PolicyPop-result.txt | 1 + Tests/RunCMake/find_package/PolicyPop-stderr.txt | 5 +++++ Tests/RunCMake/find_package/PolicyPop.cmake | 1 + Tests/RunCMake/find_package/PolicyPop/PolicyPopConfig.cmake | 0 .../find_package/PolicyPop/PolicyPopConfigVersion.cmake | 3 +++ Tests/RunCMake/find_package/PolicyPush-result.txt | 1 + Tests/RunCMake/find_package/PolicyPush-stderr.txt | 5 +++++ Tests/RunCMake/find_package/PolicyPush.cmake | 1 + .../RunCMake/find_package/PolicyPush/PolicyPushConfig.cmake | 0 .../find_package/PolicyPush/PolicyPushConfigVersion.cmake | 3 +++ Tests/RunCMake/find_package/RunCMakeTest.cmake | 2 ++ 11 files changed, 22 insertions(+) create mode 100644 Tests/RunCMake/find_package/PolicyPop-result.txt create mode 100644 Tests/RunCMake/find_package/PolicyPop-stderr.txt create mode 100644 Tests/RunCMake/find_package/PolicyPop.cmake create mode 100644 Tests/RunCMake/find_package/PolicyPop/PolicyPopConfig.cmake create mode 100644 Tests/RunCMake/find_package/PolicyPop/PolicyPopConfigVersion.cmake create mode 100644 Tests/RunCMake/find_package/PolicyPush-result.txt create mode 100644 Tests/RunCMake/find_package/PolicyPush-stderr.txt create mode 100644 Tests/RunCMake/find_package/PolicyPush.cmake create mode 100644 Tests/RunCMake/find_package/PolicyPush/PolicyPushConfig.cmake create mode 100644 Tests/RunCMake/find_package/PolicyPush/PolicyPushConfigVersion.cmake diff --git a/Tests/RunCMake/find_package/PolicyPop-result.txt b/Tests/RunCMake/find_package/PolicyPop-result.txt new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/Tests/RunCMake/find_package/PolicyPop-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/find_package/PolicyPop-stderr.txt b/Tests/RunCMake/find_package/PolicyPop-stderr.txt new file mode 100644 index 000000000..745d39a1a --- /dev/null +++ b/Tests/RunCMake/find_package/PolicyPop-stderr.txt @@ -0,0 +1,5 @@ +^CMake Error at PolicyPop/PolicyPopConfigVersion.cmake:3 \(cmake_policy\): + cmake_policy POP without matching PUSH +Call Stack \(most recent call first\): + PolicyPop.cmake:1 \(find_package\) + CMakeLists.txt:3 \(include\)$ diff --git a/Tests/RunCMake/find_package/PolicyPop.cmake b/Tests/RunCMake/find_package/PolicyPop.cmake new file mode 100644 index 000000000..4866f24f5 --- /dev/null +++ b/Tests/RunCMake/find_package/PolicyPop.cmake @@ -0,0 +1 @@ +find_package(PolicyPop 1 CONFIG PATHS ${CMAKE_CURRENT_SOURCE_DIR}/PolicyPop NO_DEFAULT_PATH) diff --git a/Tests/RunCMake/find_package/PolicyPop/PolicyPopConfig.cmake b/Tests/RunCMake/find_package/PolicyPop/PolicyPopConfig.cmake new file mode 100644 index 000000000..e69de29bb diff --git a/Tests/RunCMake/find_package/PolicyPop/PolicyPopConfigVersion.cmake b/Tests/RunCMake/find_package/PolicyPop/PolicyPopConfigVersion.cmake new file mode 100644 index 000000000..483fb10f2 --- /dev/null +++ b/Tests/RunCMake/find_package/PolicyPop/PolicyPopConfigVersion.cmake @@ -0,0 +1,3 @@ +set(PACKAGE_VERSION 1) +set(PACKAGE_VERSION_COMPATIBLE 1) +cmake_policy(POP) diff --git a/Tests/RunCMake/find_package/PolicyPush-result.txt b/Tests/RunCMake/find_package/PolicyPush-result.txt new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/Tests/RunCMake/find_package/PolicyPush-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/find_package/PolicyPush-stderr.txt b/Tests/RunCMake/find_package/PolicyPush-stderr.txt new file mode 100644 index 000000000..1afcb1627 --- /dev/null +++ b/Tests/RunCMake/find_package/PolicyPush-stderr.txt @@ -0,0 +1,5 @@ +^CMake Error at PolicyPush/PolicyPushConfigVersion.cmake:1 \(find_package\): + cmake_policy PUSH without matching POP +Call Stack \(most recent call first\): + PolicyPush.cmake:1 \(find_package\) + CMakeLists.txt:3 \(include\)$ diff --git a/Tests/RunCMake/find_package/PolicyPush.cmake b/Tests/RunCMake/find_package/PolicyPush.cmake new file mode 100644 index 000000000..30c3ce2a3 --- /dev/null +++ b/Tests/RunCMake/find_package/PolicyPush.cmake @@ -0,0 +1 @@ +find_package(PolicyPush 1 CONFIG PATHS ${CMAKE_CURRENT_SOURCE_DIR}/PolicyPush NO_DEFAULT_PATH) diff --git a/Tests/RunCMake/find_package/PolicyPush/PolicyPushConfig.cmake b/Tests/RunCMake/find_package/PolicyPush/PolicyPushConfig.cmake new file mode 100644 index 000000000..e69de29bb diff --git a/Tests/RunCMake/find_package/PolicyPush/PolicyPushConfigVersion.cmake b/Tests/RunCMake/find_package/PolicyPush/PolicyPushConfigVersion.cmake new file mode 100644 index 000000000..45a8dbd40 --- /dev/null +++ b/Tests/RunCMake/find_package/PolicyPush/PolicyPushConfigVersion.cmake @@ -0,0 +1,3 @@ +set(PACKAGE_VERSION 1) +set(PACKAGE_VERSION_COMPATIBLE 1) +cmake_policy(PUSH) diff --git a/Tests/RunCMake/find_package/RunCMakeTest.cmake b/Tests/RunCMake/find_package/RunCMakeTest.cmake index 42705b77a..81b29068c 100644 --- a/Tests/RunCMake/find_package/RunCMakeTest.cmake +++ b/Tests/RunCMake/find_package/RunCMakeTest.cmake @@ -13,4 +13,6 @@ run_cmake(MissingConfigOneName) run_cmake(MissingConfigRequired) run_cmake(MissingConfigVersion) run_cmake(MixedModeOptions) +run_cmake(PolicyPush) +run_cmake(PolicyPop) run_cmake(SetFoundFALSE) From 2e28c619f8997a2b86c72b53659be371ff10a790 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 24 Nov 2015 14:05:43 -0500 Subject: [PATCH 3/3] cmState: Skip variable scope snapshots to avoid call stack duplicates Since commit v3.4.0-rc1~179^2~1 (cmState: Add a VariableScope snapshot type, 2015-08-23) the snapshot stack may have a VariableScopeType entry. Skip over these when constructing the call stack, just as we do for policy scopes. Otherwise we report the command causing the variable scope to be entered twice (e.g. find_package while loading a package version file). --- Source/cmState.cxx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/cmState.cxx b/Source/cmState.cxx index ce9ff323b..363d2bf5d 100644 --- a/Source/cmState.cxx +++ b/Source/cmState.cxx @@ -1081,7 +1081,8 @@ cmState::Snapshot cmState::Snapshot::GetCallStackParent() const Snapshot snapshot; PositionType parentPos = this->Position; - while(parentPos->SnapshotType == cmState::PolicyScopeType) + while (parentPos->SnapshotType == cmState::PolicyScopeType || + parentPos->SnapshotType == cmState::VariableScopeType) { ++parentPos; } @@ -1092,7 +1093,8 @@ cmState::Snapshot cmState::Snapshot::GetCallStackParent() const } ++parentPos; - while(parentPos->SnapshotType == cmState::PolicyScopeType) + while (parentPos->SnapshotType == cmState::PolicyScopeType || + parentPos->SnapshotType == cmState::VariableScopeType) { ++parentPos; }