# 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/color_mode.cc
  utils/text/color_mode.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
)

tint_target_add_external_dependencies(tint_utils_text lib
  "src_utils"
)

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"
  "src_utils"
)
