| // Copyright 2015 The Shaderc Authors. All rights reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #ifndef GLSLC_MESSAGE_H_ |
| #define GLSLC_MESSAGE_H_ |
| |
| #include "libshaderc_util/string_piece.h" |
| |
| namespace glslc { |
| |
| // TODO(antiagainst): document the differences of the following message types. |
| enum class MessageType { |
| Warning, |
| Error, |
| ErrorSummary, |
| WarningSummary, |
| GlobalWarning, |
| GlobalError, |
| Unknown, |
| Ignored |
| }; |
| |
| // Given a glslang warning/error message, processes it in the following way and |
| // returns its message type. |
| // |
| // * Places the source name into the source_name parameter, if found. |
| // Otherwise, clears the source_name parameter. |
| // * Places the line number into the line_number parameter, if found. |
| // Otherwise, clears the line_number parameter. |
| // * Places the rest of the message (the text past warning/error prefix, source |
| // name, and line number) into the rest parameter. |
| // |
| // If warnings_as_errors is set to true, then all warnings will be treated as |
| // errors. |
| // If suppress_warnings is set to true, then no warnings will be emitted. This |
| // takes precedence over warnings_as_errors. |
| // |
| // Examples: |
| // "ERROR: 0:2: Message" |
| // source_name="0", line_number="2", rest="Message" |
| // "Warning, Message" |
| // source_name="", line_number="", rest="Message" |
| // "ERROR: 2 errors found." |
| // source_name="2", line_number="", rest="errors found". |
| MessageType ParseGlslangOutput(const shaderc_util::string_piece& message, |
| bool warnings_as_errors, bool suppress_warnings, |
| shaderc_util::string_piece* source_name, |
| shaderc_util::string_piece* line_number, |
| shaderc_util::string_piece* rest); |
| |
| // Filters error_messages received from glslang, and outputs any that are not |
| // ignored in a clang like format. If the warnings_as_errors boolean is set, |
| // then all warnings will be treated as errors. If the suppress_warnings boolean |
| // is set then any warning messages are ignored. This takes precedence over |
| // warnings_as_errors. Increments total_warnings and total_errors based on the |
| // message types. |
| // Returns true if no new errors were found when parsing the messages. |
| bool PrintFilteredErrors(const shaderc_util::string_piece& file_name, |
| bool warnings_as_errors, bool suppress_warnings, |
| const char* error_list, size_t* total_warnings, |
| size_t* total_errors); |
| |
| // Outputs the number of warnings and errors if there are any. |
| void OutputMessages(size_t total_warnings, size_t total_errors); |
| |
| } // namespace glslc |
| |
| #endif // GLSLC_MESSAGE_H_ |