#                          __  __            _
#                       ___\ \/ /_ __   __ _| |_
#                      / _ \\  /| '_ \ / _` | __|
#                     |  __//  \| |_) | (_| | |_
#                      \___/_/\_\ .__/ \__,_|\__|
#                               |_| XML parser
#
# Copyright (c) 2019 Expat development team
# Licensed under the MIT license:
#
# Permission is  hereby granted,  free of charge,  to any  person obtaining
# a  copy  of  this  software   and  associated  documentation  files  (the
# "Software"),  to  deal in  the  Software  without restriction,  including
# without  limitation the  rights  to use,  copy,  modify, merge,  publish,
# distribute, sublicense, and/or sell copies of the Software, and to permit
# persons  to whom  the Software  is  furnished to  do so,  subject to  the
# following conditions:
#
# The above copyright  notice and this permission notice  shall be included
# in all copies or substantial portions of the Software.
#
# THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
# EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
# NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
# DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
# USE OR OTHER DEALINGS IN THE SOFTWARE.
#
if(NOT _expat_config_included)
    # Protect against multiple inclusion
    set(_expat_config_included TRUE)


include("${CMAKE_CURRENT_LIST_DIR}/expat.cmake")

@PACKAGE_INIT@

#
# Supported components
#
macro(expat_register_component _NAME _AVAILABE)
    set(expat_${_NAME}_FOUND ${_AVAILABE})
endmacro()

expat_register_component(attr_info          @EXPAT_ATTR_INFO@)
expat_register_component(dtd                @EXPAT_DTD@)
expat_register_component(large_size         @EXPAT_LARGE_SIZE@)
expat_register_component(min_size           @EXPAT_MIN_SIZE@)
expat_register_component(ns                 @EXPAT_NS@)

if(@EXPAT_CONTEXT_BYTES@)
    expat_register_component(context_bytes  ON)
else()
    expat_register_component(context_bytes  OFF)
endif()

if("@EXPAT_CHAR_TYPE@" STREQUAL "char")
    expat_register_component(char           ON)
    expat_register_component(ushort         OFF)
    expat_register_component(wchar_t        OFF)
elseif("@EXPAT_CHAR_TYPE@" STREQUAL "ushort")
    expat_register_component(char           OFF)
    expat_register_component(ushort         ON)
    expat_register_component(wchar_t        OFF)
elseif("@EXPAT_CHAR_TYPE@" STREQUAL "wchar_t")
    expat_register_component(char           OFF)
    expat_register_component(ushort         OFF)
    expat_register_component(wchar_t        ON)
endif()

check_required_components(expat)


endif(NOT _expat_config_included)
