# Copyright 2023 The Dawn & Tint Authors
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
#    list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
#    this list of conditions and the following disclaimer in the documentation
#    and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
#    contributors may be used to endorse or promote products derived from
#    this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

################################################################################
# File generated by 'tools/src/cmd/gen' using the template:
#   tools/src/cmd/gen/build/BUILD.cmake.tmpl
#
# To regenerate run: './tools/run gen'
#
#                       Do not modify this file directly
################################################################################

################################################################################
# Target:    tint_utils_text
# Kind:      lib
################################################################################
tint_add_target(tint_utils_text lib
  utils/text/base64.cc
  utils/text/base64.h
  utils/text/string.cc
  utils/text/string.h
  utils/text/string_stream.cc
  utils/text/string_stream.h
  utils/text/styled_text.cc
  utils/text/styled_text.h
  utils/text/styled_text_printer.cc
  utils/text/styled_text_printer.h
  utils/text/styled_text_printer_ansi.cc
  utils/text/styled_text_theme.cc
  utils/text/styled_text_theme.h
  utils/text/text_style.h
  utils/text/unicode.cc
  utils/text/unicode.h
)

tint_target_add_dependencies(tint_utils_text lib
  tint_utils_containers
  tint_utils_ice
  tint_utils_macros
  tint_utils_math
  tint_utils_memory
  tint_utils_rtti
  tint_utils_system
  tint_utils_traits
)

if((NOT TINT_BUILD_IS_LINUX) AND (NOT TINT_BUILD_IS_MAC) AND (NOT TINT_BUILD_IS_WIN))
  tint_target_add_sources(tint_utils_text lib
    "utils/text/styled_text_printer_other.cc"
  )
endif((NOT TINT_BUILD_IS_LINUX) AND (NOT TINT_BUILD_IS_MAC) AND (NOT TINT_BUILD_IS_WIN))

if(TINT_BUILD_IS_LINUX OR TINT_BUILD_IS_MAC)
  tint_target_add_sources(tint_utils_text lib
    "utils/text/styled_text_printer_posix.cc"
  )
endif(TINT_BUILD_IS_LINUX OR TINT_BUILD_IS_MAC)

if(TINT_BUILD_IS_WIN)
  tint_target_add_sources(tint_utils_text lib
    "utils/text/styled_text_printer_windows.cc"
  )
endif(TINT_BUILD_IS_WIN)

################################################################################
# Target:    tint_utils_text_test
# Kind:      test
################################################################################
tint_add_target(tint_utils_text_test test
  utils/text/base64_test.cc
  utils/text/string_stream_test.cc
  utils/text/string_test.cc
  utils/text/styled_text_printer_test.cc
  utils/text/text_style_test.cc
  utils/text/unicode_test.cc
)

tint_target_add_dependencies(tint_utils_text_test test
  tint_utils_containers
  tint_utils_ice
  tint_utils_macros
  tint_utils_math
  tint_utils_memory
  tint_utils_rtti
  tint_utils_text
  tint_utils_traits
)

tint_target_add_external_dependencies(tint_utils_text_test test
  "gtest"
)
