summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2014-05-27 13:46:33 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2014-05-27 13:46:33 (GMT)
commit4a67e9cd4122e668a6d0352e2a18a4aad6953d7d (patch)
treef4d50f24b5ff1b46dd23804b85eeffc1e7bd85b2
parent03a3ee222b737a0e9d1678c7022c735b37d98fa5 (diff)
parent9ba91463e61b1e4ff5b3dcdea82981f65097e7dd (diff)
downloadCMake-4a67e9cd4122e668a6d0352e2a18a4aad6953d7d.zip
CMake-4a67e9cd4122e668a6d0352e2a18a4aad6953d7d.tar.gz
CMake-4a67e9cd4122e668a6d0352e2a18a4aad6953d7d.tar.bz2
Merge topic 'dev/CMP0053-variable_watch'
9ba91463 tests: test CMP0053 in WARN mode when watching variables
-rw-r--r--Source/cmMakefile.cxx8
-rw-r--r--Source/cmMakefile.h2
-rw-r--r--Tests/RunCMake/CMP0053/CMP0053-NEW-stderr.txt2
-rw-r--r--Tests/RunCMake/CMP0053/CMP0053-NEW.cmake8
-rw-r--r--Tests/RunCMake/CMP0053/CMP0053-OLD-stderr.txt2
-rw-r--r--Tests/RunCMake/CMP0053/CMP0053-OLD.cmake8
-rw-r--r--Tests/RunCMake/CMP0053/CMP0053-WARN-stderr.txt2
-rw-r--r--Tests/RunCMake/CMP0053/CMP0053-WARN.cmake6
-rw-r--r--Tests/RunCMake/CMP0053/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/CMP0053/RunCMakeTest.cmake5
-rw-r--r--Tests/RunCMake/CMakeLists.txt1
11 files changed, 46 insertions, 1 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 3abcd5d..aca7a93 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -103,6 +103,7 @@ cmMakefile::cmMakefile(): Internal(new Internals)
this->GeneratingBuildSystem = false;
this->NumLastMatches = 0;
+ this->SuppressWatches = false;
}
cmMakefile::cmMakefile(const cmMakefile& mf): Internal(new Internals)
@@ -153,6 +154,7 @@ cmMakefile::cmMakefile(const cmMakefile& mf): Internal(new Internals)
this->OutputToSource = mf.OutputToSource;
this->NumLastMatches = mf.NumLastMatches;
+ this->SuppressWatches = mf.SuppressWatches;
}
//----------------------------------------------------------------------------
@@ -2463,7 +2465,7 @@ const char* cmMakefile::GetDefinition(const std::string& name) const
}
#ifdef CMAKE_BUILD_WITH_CMAKE
cmVariableWatch* vv = this->GetVariableWatch();
- if ( vv )
+ if ( vv && !this->SuppressWatches )
{
if ( def )
{
@@ -2559,10 +2561,14 @@ const char *cmMakefile::ExpandVariablesInString(std::string& source,
original = source;
newResult = source;
compareResults = true;
+ // Suppress variable watches to avoid calling hooks twice. Suppress new
+ // dereferences since the OLD behavior is still what is actually used.
+ this->SuppressWatches = true;
newError =
ExpandVariablesInStringNew(newErrorstr, newResult, escapeQuotes,
noEscapes, atOnly, filename, line,
removeEmpty, replaceAt);
+ this->SuppressWatches = false;
}
case cmPolicies::OLD:
mtype = ExpandVariablesInStringOld(errorstr, source, escapeQuotes,
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 11904a6..9a4b9c7 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -1127,6 +1127,8 @@ private:
const std::string& feature) const;
bool HaveCxxFeatureAvailable(cmTarget const* target,
const std::string& feature) const;
+
+ mutable bool SuppressWatches;
};
//----------------------------------------------------------------------------
diff --git a/Tests/RunCMake/CMP0053/CMP0053-NEW-stderr.txt b/Tests/RunCMake/CMP0053/CMP0053-NEW-stderr.txt
new file mode 100644
index 0000000..836b0ff
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/CMP0053-NEW-stderr.txt
@@ -0,0 +1,2 @@
+^called
+--><--$
diff --git a/Tests/RunCMake/CMP0053/CMP0053-NEW.cmake b/Tests/RunCMake/CMP0053/CMP0053-NEW.cmake
new file mode 100644
index 0000000..6ffedc6
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/CMP0053-NEW.cmake
@@ -0,0 +1,8 @@
+cmake_policy(SET CMP0053 NEW)
+
+function (watch_callback)
+ message("called")
+endfunction ()
+
+variable_watch(test watch_callback)
+message("-->${test}<--")
diff --git a/Tests/RunCMake/CMP0053/CMP0053-OLD-stderr.txt b/Tests/RunCMake/CMP0053/CMP0053-OLD-stderr.txt
new file mode 100644
index 0000000..836b0ff
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/CMP0053-OLD-stderr.txt
@@ -0,0 +1,2 @@
+^called
+--><--$
diff --git a/Tests/RunCMake/CMP0053/CMP0053-OLD.cmake b/Tests/RunCMake/CMP0053/CMP0053-OLD.cmake
new file mode 100644
index 0000000..41f5347
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/CMP0053-OLD.cmake
@@ -0,0 +1,8 @@
+cmake_policy(SET CMP0053 OLD)
+
+function (watch_callback)
+ message("called")
+endfunction ()
+
+variable_watch(test watch_callback)
+message("-->${test}<--")
diff --git a/Tests/RunCMake/CMP0053/CMP0053-WARN-stderr.txt b/Tests/RunCMake/CMP0053/CMP0053-WARN-stderr.txt
new file mode 100644
index 0000000..836b0ff
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/CMP0053-WARN-stderr.txt
@@ -0,0 +1,2 @@
+^called
+--><--$
diff --git a/Tests/RunCMake/CMP0053/CMP0053-WARN.cmake b/Tests/RunCMake/CMP0053/CMP0053-WARN.cmake
new file mode 100644
index 0000000..b010d13
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/CMP0053-WARN.cmake
@@ -0,0 +1,6 @@
+function (watch_callback)
+ message("called")
+endfunction ()
+
+variable_watch(test watch_callback)
+message("-->${test}<--")
diff --git a/Tests/RunCMake/CMP0053/CMakeLists.txt b/Tests/RunCMake/CMP0053/CMakeLists.txt
new file mode 100644
index 0000000..3482e6b
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.0)
+project(${RunCMake_TEST} CXX)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/CMP0053/RunCMakeTest.cmake b/Tests/RunCMake/CMP0053/RunCMakeTest.cmake
new file mode 100644
index 0000000..6521ac0
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/RunCMakeTest.cmake
@@ -0,0 +1,5 @@
+include(RunCMake)
+
+run_cmake(CMP0053-OLD)
+run_cmake(CMP0053-NEW)
+run_cmake(CMP0053-WARN)
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index 4efc73a..165f027 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -35,6 +35,7 @@ add_RunCMake_test(CMP0046)
add_RunCMake_test(CMP0049)
add_RunCMake_test(CMP0050)
add_RunCMake_test(CMP0051)
+add_RunCMake_test(CMP0053)
add_RunCMake_test(CTest)
if(UNIX AND "${CMAKE_GENERATOR}" MATCHES "Unix Makefiles")
add_RunCMake_test(CompilerChange)