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"
7 #include "cmExecutionStatus.h"
8 #include "cmMakefile.h"
9 #include "cmMessageType.h"
10 #include "cmPolicies.h"
13 bool cmBreakCommand(std::vector
<std::string
> const& args
,
14 cmExecutionStatus
& status
)
16 if (!status
.GetMakefile().IsLoopBlock()) {
17 bool issueMessage
= true;
19 MessageType messageType
= MessageType::AUTHOR_WARNING
;
20 switch (status
.GetMakefile().GetPolicyStatus(cmPolicies::CMP0055
)) {
21 case cmPolicies::WARN
:
22 e
<< cmPolicies::GetPolicyWarning(cmPolicies::CMP0055
) << "\n";
27 case cmPolicies::REQUIRED_ALWAYS
:
28 case cmPolicies::REQUIRED_IF_USED
:
30 messageType
= MessageType::FATAL_ERROR
;
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
) {
44 status
.SetBreakInvoked();
47 bool issueMessage
= true;
49 MessageType messageType
= MessageType::AUTHOR_WARNING
;
50 switch (status
.GetMakefile().GetPolicyStatus(cmPolicies::CMP0055
)) {
51 case cmPolicies::WARN
:
52 e
<< cmPolicies::GetPolicyWarning(cmPolicies::CMP0055
) << "\n";
57 case cmPolicies::REQUIRED_ALWAYS
:
58 case cmPolicies::REQUIRED_IF_USED
:
60 messageType
= MessageType::FATAL_ERROR
;
65 e
<< "The BREAK command does not accept any arguments.";
66 status
.GetMakefile().IssueMessage(messageType
, e
.str());
67 if (messageType
== MessageType::FATAL_ERROR
) {