/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmReturnCommand.h" #include #include #include "cmExecutionStatus.h" #include "cmMakefile.h" #include "cmMessageType.h" #include "cmPolicies.h" #include "cmStringAlgorithms.h" #include "cmSystemTools.h" // cmReturnCommand bool cmReturnCommand(std::vector const& args, cmExecutionStatus& status) { if (!args.empty()) { switch (status.GetMakefile().GetPolicyStatus(cmPolicies::CMP0140)) { case cmPolicies::WARN: status.GetMakefile().IssueMessage( MessageType::AUTHOR_WARNING, cmStrCat( cmPolicies::GetPolicyWarning(cmPolicies::CMP0140), '\n', "return() checks its arguments when the policy is set to NEW. " "Since the policy is not set the OLD behavior will be used so " "the arguments will be ignored.")); CM_FALLTHROUGH; case cmPolicies::OLD: return true; case cmPolicies::REQUIRED_IF_USED: case cmPolicies::REQUIRED_ALWAYS: status.GetMakefile().IssueMessage( MessageType::FATAL_ERROR, cmStrCat('\n', cmPolicies::GetPolicyWarning(cmPolicies::CMP0140))); cmSystemTools::SetFatalErrorOccurred(); return false; default: break; } if (args[0] != "PROPAGATE"_s) { status.SetError( cmStrCat("called with unsupported argument \"", args[0], '"')); cmSystemTools::SetFatalErrorOccurred(); return false; } status.SetReturnInvoked({ args.begin() + 1, args.end() }); } else { status.SetReturnInvoked(); } return true; }