From 3d5bb381be16f67e4781c395bda2be12a5d00168 Mon Sep 17 00:00:00 2001 From: Yichao Yu Date: Mon, 3 Jun 2013 10:14:52 +0800 Subject: variable_watch: Add missing string enumeration entry (#14188) In commit 9a5b4eba (All variable accesses should produce watch callbacks, 2007-05-17) we added a new enumeration value but did not update the list of strings matching them. Add the missing entry. Without this, variable_watch prints REMOVED_ACCESS instead of MODIFIED_ACCESS when set the value of the variable. --- Source/cmVariableWatch.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/cmVariableWatch.cxx b/Source/cmVariableWatch.cxx index f5fdca4..3905e9b 100644 --- a/Source/cmVariableWatch.cxx +++ b/Source/cmVariableWatch.cxx @@ -15,6 +15,7 @@ static const char* const cmVariableWatchAccessStrings[] = { "READ_ACCESS", "UNKNOWN_READ_ACCESS", + "UNKNOWN_DEFINED_ACCESS", "ALLOWED_UNKNOWN_READ_ACCESS", "MODIFIED_ACCESS", "REMOVED_ACCESS", -- cgit v0.12 From c63d30048bcf5bd6efa1e038b36c5efd29e34749 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 3 Jun 2013 09:23:25 -0400 Subject: variable_watch: Add test for MODIFIED_ACCESS report Add a RunCMake.variable_watch watch test to cover the basic use case. --- Tests/RunCMake/CMakeLists.txt | 1 + Tests/RunCMake/variable_watch/CMakeLists.txt | 3 +++ Tests/RunCMake/variable_watch/ModifiedAccess-stderr.txt | 3 +++ Tests/RunCMake/variable_watch/ModifiedAccess.cmake | 3 +++ Tests/RunCMake/variable_watch/RunCMakeTest.cmake | 3 +++ 5 files changed, 13 insertions(+) create mode 100644 Tests/RunCMake/variable_watch/CMakeLists.txt create mode 100644 Tests/RunCMake/variable_watch/ModifiedAccess-stderr.txt create mode 100644 Tests/RunCMake/variable_watch/ModifiedAccess.cmake create mode 100644 Tests/RunCMake/variable_watch/RunCMakeTest.cmake diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index f1e01b1..86c9725 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -77,6 +77,7 @@ add_RunCMake_test(include) add_RunCMake_test(include_directories) add_RunCMake_test(list) add_RunCMake_test(try_compile) +add_RunCMake_test(variable_watch) add_RunCMake_test(CMP0004) find_package(Qt4 QUIET) diff --git a/Tests/RunCMake/variable_watch/CMakeLists.txt b/Tests/RunCMake/variable_watch/CMakeLists.txt new file mode 100644 index 0000000..e8db6b0 --- /dev/null +++ b/Tests/RunCMake/variable_watch/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 2.8) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/variable_watch/ModifiedAccess-stderr.txt b/Tests/RunCMake/variable_watch/ModifiedAccess-stderr.txt new file mode 100644 index 0000000..3287626 --- /dev/null +++ b/Tests/RunCMake/variable_watch/ModifiedAccess-stderr.txt @@ -0,0 +1,3 @@ +\* Variable "b" was accessed using MODIFIED_ACCESS in: .*/Tests/RunCMake/variable_watch/ModifiedAccess.cmake + The value of the variable: "b" + The list file stack: .*/Tests/RunCMake/variable_watch/CMakeLists.txt;.*/Tests/RunCMake/variable_watch/ModifiedAccess.cmake diff --git a/Tests/RunCMake/variable_watch/ModifiedAccess.cmake b/Tests/RunCMake/variable_watch/ModifiedAccess.cmake new file mode 100644 index 0000000..87943b3 --- /dev/null +++ b/Tests/RunCMake/variable_watch/ModifiedAccess.cmake @@ -0,0 +1,3 @@ +set(b "a") +variable_watch(b) +set(b "b") diff --git a/Tests/RunCMake/variable_watch/RunCMakeTest.cmake b/Tests/RunCMake/variable_watch/RunCMakeTest.cmake new file mode 100644 index 0000000..1dd7688 --- /dev/null +++ b/Tests/RunCMake/variable_watch/RunCMakeTest.cmake @@ -0,0 +1,3 @@ +include(RunCMake) + +run_cmake(ModifiedAccess) -- cgit v0.12 From 515f9af0d48be569adb51dfb43ff483cfc0d5156 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 3 Jun 2013 13:04:56 -0400 Subject: variable_watch: Remove leftover debugging code (#14187) When a watch does not specify a command to call then variable_watch prints out a message to stderr. Remove code after that which collects all variable values to construct a message that is never printed. Otherwise such code causes a READ_ACCESS watch to trigger on all variables in the currents scope. Reported-by: Yichao Yu --- Source/cmVariableWatchCommand.cxx | 13 ------------- Tests/RunCMake/variable_watch/NoWatcher-stderr.txt | 4 ++++ Tests/RunCMake/variable_watch/NoWatcher.cmake | 8 ++++++++ Tests/RunCMake/variable_watch/RunCMakeTest.cmake | 1 + 4 files changed, 13 insertions(+), 13 deletions(-) create mode 100644 Tests/RunCMake/variable_watch/NoWatcher-stderr.txt create mode 100644 Tests/RunCMake/variable_watch/NoWatcher.cmake diff --git a/Source/cmVariableWatchCommand.cxx b/Source/cmVariableWatchCommand.cxx index a432943..8532930 100644 --- a/Source/cmVariableWatchCommand.cxx +++ b/Source/cmVariableWatchCommand.cxx @@ -122,19 +122,6 @@ void cmVariableWatchCommand::VariableAccessed(const std::string& variable, msg << " The value of the variable: \"" << newValue << "\"" << std::endl; msg << " The list file stack: " << stack.c_str(); cmSystemTools::Message(msg.str().c_str()); - std::vector vars = makefile->GetDefinitions(); - cmOStringStream msg2; - size_t cc; - for ( cc = 0; cc < vars.size(); cc ++ ) - { - if ( vars[cc] == variable ) - { - continue; - } - msg2 << vars[cc] << " = \"" - << makefile->GetDefinition(vars[cc].c_str()) << "\"" << std::endl; - } - //cmSystemTools::Message(msg2.str().c_str()); } this->InCallback = false; } diff --git a/Tests/RunCMake/variable_watch/NoWatcher-stderr.txt b/Tests/RunCMake/variable_watch/NoWatcher-stderr.txt new file mode 100644 index 0000000..95ff73b --- /dev/null +++ b/Tests/RunCMake/variable_watch/NoWatcher-stderr.txt @@ -0,0 +1,4 @@ +my_func +\* Variable "b" was accessed using MODIFIED_ACCESS in: .*/Tests/RunCMake/variable_watch/NoWatcher.cmake + The value of the variable: "" + The list file stack: .*/Tests/RunCMake/variable_watch/CMakeLists.txt;.*/Tests/RunCMake/variable_watch/NoWatcher.cmake$ diff --git a/Tests/RunCMake/variable_watch/NoWatcher.cmake b/Tests/RunCMake/variable_watch/NoWatcher.cmake new file mode 100644 index 0000000..8a68efb --- /dev/null +++ b/Tests/RunCMake/variable_watch/NoWatcher.cmake @@ -0,0 +1,8 @@ +function(my_func) + message("my_func") +endfunction() +variable_watch(a my_func) +set(a "") + +variable_watch(b) +set(b "") diff --git a/Tests/RunCMake/variable_watch/RunCMakeTest.cmake b/Tests/RunCMake/variable_watch/RunCMakeTest.cmake index 1dd7688..8d20476 100644 --- a/Tests/RunCMake/variable_watch/RunCMakeTest.cmake +++ b/Tests/RunCMake/variable_watch/RunCMakeTest.cmake @@ -1,3 +1,4 @@ include(RunCMake) run_cmake(ModifiedAccess) +run_cmake(NoWatcher) -- cgit v0.12 From 647745b3eedd0036d9e745007acd1d9cc460ccab Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 3 Jun 2013 13:19:15 -0400 Subject: variable_watch: Print accesses as "CMake Debug Log" messages Use makefile->IssueMessage() to print the unprocessed watch message in a format consistent with other CMake messages and with a more complete call stack for the access. --- Source/cmVariableWatchCommand.cxx | 8 +++----- Tests/RunCMake/variable_watch/ModifiedAccess-stderr.txt | 7 ++++--- Tests/RunCMake/variable_watch/NoWatcher-stderr.txt | 7 ++++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Source/cmVariableWatchCommand.cxx b/Source/cmVariableWatchCommand.cxx index 8532930..297a92b 100644 --- a/Source/cmVariableWatchCommand.cxx +++ b/Source/cmVariableWatchCommand.cxx @@ -117,11 +117,9 @@ void cmVariableWatchCommand::VariableAccessed(const std::string& variable, if ( !processed ) { cmOStringStream msg; - msg << "* Variable \"" << variable.c_str() << "\" was accessed using " - << accessString << " in: " << currentListFile << std::endl; - msg << " The value of the variable: \"" << newValue << "\"" << std::endl; - msg << " The list file stack: " << stack.c_str(); - cmSystemTools::Message(msg.str().c_str()); + msg << "Variable \"" << variable.c_str() << "\" was accessed using " + << accessString << " with value \"" << newValue << "\"."; + makefile->IssueMessage(cmake::LOG, msg.str()); } this->InCallback = false; } diff --git a/Tests/RunCMake/variable_watch/ModifiedAccess-stderr.txt b/Tests/RunCMake/variable_watch/ModifiedAccess-stderr.txt index 3287626..3ff96fc 100644 --- a/Tests/RunCMake/variable_watch/ModifiedAccess-stderr.txt +++ b/Tests/RunCMake/variable_watch/ModifiedAccess-stderr.txt @@ -1,3 +1,4 @@ -\* Variable "b" was accessed using MODIFIED_ACCESS in: .*/Tests/RunCMake/variable_watch/ModifiedAccess.cmake - The value of the variable: "b" - The list file stack: .*/Tests/RunCMake/variable_watch/CMakeLists.txt;.*/Tests/RunCMake/variable_watch/ModifiedAccess.cmake +CMake Debug Log at ModifiedAccess.cmake:3 \(set\): + Variable "b" was accessed using MODIFIED_ACCESS with value "b". +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\)$ diff --git a/Tests/RunCMake/variable_watch/NoWatcher-stderr.txt b/Tests/RunCMake/variable_watch/NoWatcher-stderr.txt index 95ff73b..d299429 100644 --- a/Tests/RunCMake/variable_watch/NoWatcher-stderr.txt +++ b/Tests/RunCMake/variable_watch/NoWatcher-stderr.txt @@ -1,4 +1,5 @@ my_func -\* Variable "b" was accessed using MODIFIED_ACCESS in: .*/Tests/RunCMake/variable_watch/NoWatcher.cmake - The value of the variable: "" - The list file stack: .*/Tests/RunCMake/variable_watch/CMakeLists.txt;.*/Tests/RunCMake/variable_watch/NoWatcher.cmake$ +CMake Debug Log at NoWatcher.cmake:8 \(set\): + Variable "b" was accessed using MODIFIED_ACCESS with value "". +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\)$ -- cgit v0.12