Merge topic 'set-CACHE-diagnostics' 20c23518d9 set: Improve diagnostics for CACHE mode Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !8679
diff --git a/Source/cmSetCommand.cxx b/Source/cmSetCommand.cxx index c4bb949..c98745a 100644 --- a/Source/cmSetCommand.cxx +++ b/Source/cmSetCommand.cxx
@@ -115,10 +115,18 @@ // we should be nice and try to catch some simple screwups if the last or // next to last args are CACHE then they screwed up. If they used FORCE // without CACHE they screwed up - if ((args.back() == "CACHE") || - (args.size() > 1 && args[args.size() - 2] == "CACHE") || - (force && !cache)) { - status.SetError("given invalid arguments for CACHE mode."); + if (args.back() == "CACHE") { + status.SetError( + "given invalid arguments for CACHE mode: missing type and docstring"); + return false; + } + if (args.size() > 1 && args[args.size() - 2] == "CACHE") { + status.SetError( + "given invalid arguments for CACHE mode: missing type or docstring"); + return false; + } + if (force && !cache) { + status.SetError("given invalid arguments: FORCE specified without CACHE"); return false; }
diff --git a/Tests/RunCMake/set/CacheErrors-result.txt b/Tests/RunCMake/set/CacheErrors-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/set/CacheErrors-result.txt
@@ -0,0 +1 @@ +1
diff --git a/Tests/RunCMake/set/CacheErrors-stderr.txt b/Tests/RunCMake/set/CacheErrors-stderr.txt new file mode 100644 index 0000000..9983160 --- /dev/null +++ b/Tests/RunCMake/set/CacheErrors-stderr.txt
@@ -0,0 +1,19 @@ +^CMake Error at CacheErrors\.cmake:1 \(set\): + set given invalid arguments for CACHE mode: missing type and docstring +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Error at CacheErrors\.cmake:2 \(set\): + set given invalid arguments for CACHE mode: missing type or docstring +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Error at CacheErrors\.cmake:3 \(set\): + set given invalid arguments for CACHE mode: missing type or docstring +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Error at CacheErrors\.cmake:4 \(set\): + set given invalid arguments: FORCE specified without CACHE +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/set/CacheErrors.cmake b/Tests/RunCMake/set/CacheErrors.cmake new file mode 100644 index 0000000..d177474 --- /dev/null +++ b/Tests/RunCMake/set/CacheErrors.cmake
@@ -0,0 +1,4 @@ +set (var val CACHE) +set (var val CACHE STRING) +set (var val CACHE "") +set (var val CACH3 STRING "" FORCE)
diff --git a/Tests/RunCMake/set/RunCMakeTest.cmake b/Tests/RunCMake/set/RunCMakeTest.cmake index b3bd0a4..c785450 100644 --- a/Tests/RunCMake/set/RunCMakeTest.cmake +++ b/Tests/RunCMake/set/RunCMakeTest.cmake
@@ -1,5 +1,6 @@ include(RunCMake) +run_cmake(CacheErrors) run_cmake(ParentScope) run_cmake(ParentPulling) run_cmake(ParentPullingRecursive)