summaryrefslogtreecommitdiff
path: root/Source/cmPolicies.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-01-22 13:18:40 -0500
committerBrad King <brad.king@kitware.com>2009-01-22 13:18:40 -0500
commitc332e0bf3c4e619358322bd0d0961af45653eb5b (patch)
tree3e31da4052687557169b0e8da2cf897f42cbcb63 /Source/cmPolicies.cxx
parent3028ca756c8621b3cc37032987eb01fbe61da248 (diff)
downloadcmake-c332e0bf3c4e619358322bd0d0961af45653eb5b.tar.gz
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 'Source/cmPolicies.cxx')
-rw-r--r--Source/cmPolicies.cxx20
1 files changed, 20 insertions, 0 deletions
diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index be546f8522..169814ac47 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -335,6 +335,26 @@ cmPolicies::cmPolicies()
"the string untouched, and continue. "
"The NEW behavior for this policy is to report an error.",
2,6,3, cmPolicies::WARN);
+
+ this->DefinePolicy(
+ CMP0011, "CMP0011",
+ "Included scripts do automatic cmake_policy PUSH and POP.",
+ "In CMake 2.6.2 and below, CMake Policy settings in scripts loaded by "
+ "the include() and find_package() commands would affect the includer. "
+ "Explicit invocations of cmake_policy(PUSH) and cmake_policy(POP) were "
+ "required to isolate policy changes and protect the includer. "
+ "While some scripts intend to affect the policies of their includer, "
+ "most do not. "
+ "In CMake 2.6.3 and above, include() and find_package() by default PUSH "
+ "and POP an entry on the policy stack around an included script, "
+ "but provide a NO_POLICY_SCOPE option to disable it. "
+ "This policy determines whether or not to imply NO_POLICY_SCOPE for "
+ "compatibility. "
+ "The OLD behavior for this policy is to imply NO_POLICY_SCOPE for "
+ "include() and find_package() commands. "
+ "The NEW behavior for this policy is to allow the commands to do their "
+ "default cmake_policy PUSH and POP.",
+ 2,6,3, cmPolicies::WARN);
}
cmPolicies::~cmPolicies()