CMake Nightly Date Stamp
[kiteware-cmake.git] / Source / cmBreakCommand.cxx
blob95db689cd3c971fe492ef4864189f509ccc2f3e7
1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
3 #include "cmBreakCommand.h"
5 #include <sstream>
7 #include "cmExecutionStatus.h"
8 #include "cmMakefile.h"
9 #include "cmMessageType.h"
10 #include "cmPolicies.h"
12 // cmBreakCommand
13 bool cmBreakCommand(std::vector<std::string> const& args,
14 cmExecutionStatus& status)
16 if (!status.GetMakefile().IsLoopBlock()) {
17 bool issueMessage = true;
18 std::ostringstream e;
19 MessageType messageType = MessageType::AUTHOR_WARNING;
20 switch (status.GetMakefile().GetPolicyStatus(cmPolicies::CMP0055)) {
21 case cmPolicies::WARN:
22 e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0055) << "\n";
23 break;
24 case cmPolicies::OLD:
25 issueMessage = false;
26 break;
27 case cmPolicies::REQUIRED_ALWAYS:
28 case cmPolicies::REQUIRED_IF_USED:
29 case cmPolicies::NEW:
30 messageType = MessageType::FATAL_ERROR;
31 break;
34 if (issueMessage) {
35 e << "A BREAK command was found outside of a proper "
36 "FOREACH or WHILE loop scope.";
37 status.GetMakefile().IssueMessage(messageType, e.str());
38 if (messageType == MessageType::FATAL_ERROR) {
39 return false;
44 status.SetBreakInvoked();
46 if (!args.empty()) {
47 bool issueMessage = true;
48 std::ostringstream e;
49 MessageType messageType = MessageType::AUTHOR_WARNING;
50 switch (status.GetMakefile().GetPolicyStatus(cmPolicies::CMP0055)) {
51 case cmPolicies::WARN:
52 e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0055) << "\n";
53 break;
54 case cmPolicies::OLD:
55 issueMessage = false;
56 break;
57 case cmPolicies::REQUIRED_ALWAYS:
58 case cmPolicies::REQUIRED_IF_USED:
59 case cmPolicies::NEW:
60 messageType = MessageType::FATAL_ERROR;
61 break;
64 if (issueMessage) {
65 e << "The BREAK command does not accept any arguments.";
66 status.GetMakefile().IssueMessage(messageType, e.str());
67 if (messageType == MessageType::FATAL_ERROR) {
68 return false;
73 return true;