# Copyright 2017 Google Inc.
#
# 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.

import("//flutter/common/config.gni")
import("//flutter/testing/testing.gni")

declare_args() {
  flutter_use_fontconfig = false
}

if (flutter_use_fontconfig) {
  assert(is_linux)
}

config("txt_config") {
  visibility = [ ":*" ]
  include_dirs = [ "src" ]
}

config("allow_posix_names") {
  if (is_win && is_clang) {
    # POSIX names of many functions are marked deprecated by default;
    # disable that since they are used for cross-platform compatibility.
    defines = [ "_CRT_NONSTDC_NO_DEPRECATE" ]
  }
}

source_set("txt") {
  defines = []
  if (flutter_use_fontconfig) {
    defines += [ "FLUTTER_USE_FONTCONFIG" ]
  }
  if (flutter_enable_skshaper) {
    defines += [ "FLUTTER_ENABLE_SKSHAPER" ]
  }

  sources = [
    "src/log/log.cc",
    "src/log/log.h",
    "src/minikin/CmapCoverage.cpp",
    "src/minikin/CmapCoverage.h",
    "src/minikin/Emoji.cpp",
    "src/minikin/Emoji.h",
    "src/minikin/FontCollection.cpp",
    "src/minikin/FontCollection.h",
    "src/minikin/FontFamily.cpp",
    "src/minikin/FontFamily.h",
    "src/minikin/FontLanguage.cpp",
    "src/minikin/FontLanguage.h",
    "src/minikin/FontLanguageListCache.cpp",
    "src/minikin/FontLanguageListCache.h",
    "src/minikin/FontUtils.cpp",
    "src/minikin/FontUtils.h",
    "src/minikin/GraphemeBreak.cpp",
    "src/minikin/GraphemeBreak.h",
    "src/minikin/HbFontCache.cpp",
    "src/minikin/HbFontCache.h",
    "src/minikin/Hyphenator.cpp",
    "src/minikin/Hyphenator.h",
    "src/minikin/Layout.cpp",
    "src/minikin/Layout.h",
    "src/minikin/LayoutUtils.cpp",
    "src/minikin/LayoutUtils.h",
    "src/minikin/LineBreaker.cpp",
    "src/minikin/LineBreaker.h",
    "src/minikin/Measurement.cpp",
    "src/minikin/Measurement.h",
    "src/minikin/MinikinFont.cpp",
    "src/minikin/MinikinFont.h",
    "src/minikin/MinikinInternal.cpp",
    "src/minikin/MinikinInternal.h",
    "src/minikin/SparseBitSet.cpp",
    "src/minikin/SparseBitSet.h",
    "src/minikin/WordBreaker.cpp",
    "src/minikin/WordBreaker.h",
    "src/txt/asset_font_manager.cc",
    "src/txt/asset_font_manager.h",
    "src/txt/font_asset_provider.cc",
    "src/txt/font_asset_provider.h",
    "src/txt/font_collection.cc",
    "src/txt/font_collection.h",
    "src/txt/font_features.cc",
    "src/txt/font_features.h",
    "src/txt/font_skia.cc",
    "src/txt/font_skia.h",
    "src/txt/font_style.h",
    "src/txt/font_weight.h",
    "src/txt/line_metrics.h",
    "src/txt/paint_record.cc",
    "src/txt/paint_record.h",
    "src/txt/paragraph.h",
    "src/txt/paragraph_builder.cc",
    "src/txt/paragraph_builder.h",
    "src/txt/paragraph_builder_txt.cc",
    "src/txt/paragraph_builder_txt.h",
    "src/txt/paragraph_style.cc",
    "src/txt/paragraph_style.h",
    "src/txt/paragraph_txt.cc",
    "src/txt/paragraph_txt.h",
    "src/txt/placeholder_run.cc",
    "src/txt/placeholder_run.h",
    "src/txt/platform.h",
    "src/txt/run_metrics.h",
    "src/txt/styled_runs.cc",
    "src/txt/styled_runs.h",
    "src/txt/test_font_manager.cc",
    "src/txt/test_font_manager.h",
    "src/txt/text_baseline.h",
    "src/txt/text_decoration.cc",
    "src/txt/text_decoration.h",
    "src/txt/text_shadow.cc",
    "src/txt/text_shadow.h",
    "src/txt/text_style.cc",
    "src/txt/text_style.h",
    "src/txt/typeface_font_asset_provider.cc",
    "src/txt/typeface_font_asset_provider.h",
    "src/utils/JenkinsHash.cpp",
    "src/utils/JenkinsHash.h",
    "src/utils/LinuxUtils.h",
    "src/utils/LruCache.h",
    "src/utils/MacUtils.h",
    "src/utils/TypeHelpers.h",
    "src/utils/WindowsUtils.h",
  ]

  public_configs = [ ":txt_config" ]

  public_deps = [
    "//flutter/fml",
    "//third_party/harfbuzz",
    "//third_party/icu",
    "//third_party/skia",
  ]

  deps = [
    "//third_party/skia",
  ]

  if (flutter_use_fontconfig) {
    deps += [ "//third_party/fontconfig" ]
  }

  if (flutter_enable_skshaper) {
    sources += [
      "src/skia/paragraph_builder_skia.cc",
      "src/skia/paragraph_builder_skia.h",
      "src/skia/paragraph_skia.cc",
      "src/skia/paragraph_skia.h",
    ]

    deps += [ "//third_party/skia/modules/skparagraph" ]
  }

  if (is_mac || is_ios) {
    sources += [ "src/txt/platform_mac.mm" ]
    deps += [ "//flutter/fml" ]
  } else if (is_android) {
    sources += [ "src/txt/platform_android.cc" ]
  } else if (is_linux) {
    sources += [ "src/txt/platform_linux.cc" ]
  } else if (is_fuchsia) {
    sources += [ "src/txt/platform_fuchsia.cc" ]
  } else if (is_win) {
    sources += [ "src/txt/platform_windows.cc" ]
  } else {
    sources += [ "src/txt/platform.cc" ]
  }
}

txt_common_executable_deps = [
  "//third_party/dart/runtime:libdart_jit",  # For logging.
  "//flutter/fml",  # For ICU initialization.
]

source_set("txt_test_utils") {
  sources = [
    "tests/txt_test_utils.cc",
    "tests/txt_test_utils.h",
  ]

  deps = [
    ":txt",
    "//flutter/fml",
    "//third_party/skia",
  ]
}

test_fixtures("txt_fixtures") {
  fixtures = [
    "third_party/fonts/Bold.ttf",
    "third_party/fonts/Bold.ttx",
    "third_party/fonts/BoldItalic.ttf",
    "third_party/fonts/BoldItalic.ttx",
    "third_party/fonts/ColorEmojiFont.ttf",
    "third_party/fonts/ColorEmojiFont.ttx",
    "third_party/fonts/ColorTextMixedEmojiFont.ttf",
    "third_party/fonts/ColorTextMixedEmojiFont.ttx",
    "third_party/fonts/DroidSerif.ttf",
    "third_party/fonts/Emoji.ttf",
    "third_party/fonts/Emoji.ttx",
    "third_party/fonts/HomemadeApple.ttf",
    "third_party/fonts/Italic.ttf",
    "third_party/fonts/Italic.ttx",
    "third_party/fonts/Ja.ttf",
    "third_party/fonts/Ja.ttx",
    "third_party/fonts/Katibeh-Regular.ttf",
    "third_party/fonts/Ko.ttf",
    "third_party/fonts/Ko.ttx",
    "third_party/fonts/MultiAxis.ttf",
    "third_party/fonts/MultiAxis.ttx",
    "third_party/fonts/NoCmapFormat14.ttf",
    "third_party/fonts/NoCmapFormat14.ttx",
    "third_party/fonts/NoGlyphFont.ttf",
    "third_party/fonts/NoGlyphFont.ttx",
    "third_party/fonts/NotoColorEmoji.ttf",
    "third_party/fonts/NotoNaskhArabic-Regular.ttf",
    "third_party/fonts/NotoSansCJK-Regular.ttc",
    "third_party/fonts/NotoSansKhmer-Regular.ttf",
    "third_party/fonts/Regular.ttf",
    "third_party/fonts/Regular.ttx",
    "third_party/fonts/Roboto-Black.ttf",
    "third_party/fonts/Roboto-BlackItalic.ttf",
    "third_party/fonts/Roboto-Bold.ttf",
    "third_party/fonts/Roboto-BoldItalic.ttf",
    "third_party/fonts/Roboto-Italic.ttf",
    "third_party/fonts/Roboto-Light.ttf",
    "third_party/fonts/Roboto-LightItalic.ttf",
    "third_party/fonts/Roboto-Medium.ttf",
    "third_party/fonts/Roboto-MediumItalic.ttf",
    "third_party/fonts/Roboto-Regular.ttf",
    "third_party/fonts/Roboto-Thin.ttf",
    "third_party/fonts/Roboto-ThinItalic.ttf",
    "third_party/fonts/SourceHanSerifCN-Bold.otf",
    "third_party/fonts/SourceHanSerifCN-Regular.otf",
    "third_party/fonts/TextEmojiFont.ttf",
    "third_party/fonts/TextEmojiFont.ttx",
    "third_party/fonts/UnicodeBMPOnly.ttf",
    "third_party/fonts/UnicodeBMPOnly.ttx",
    "third_party/fonts/UnicodeBMPOnly2.ttf",
    "third_party/fonts/UnicodeBMPOnly2.ttx",
    "third_party/fonts/UnicodeUCS4.ttf",
    "third_party/fonts/UnicodeUCS4.ttx",
    "third_party/fonts/VariationSelectorTest-Regular.ttf",
    "third_party/fonts/VariationSelectorTest-Regular.ttx",
    "third_party/fonts/ZhHans.ttf",
    "third_party/fonts/ZhHans.ttx",
    "third_party/fonts/ZhHant.ttf",
    "third_party/fonts/ZhHant.ttx",
    "third_party/fonts/ahem.ttf",
    "third_party/fonts/emoji.xml",
    "third_party/fonts/itemize.xml",
  ]
}

executable("txt_unittests") {
  testonly = true

  sources = [
    "tests/CmapCoverageTest.cpp",
    "tests/EmojiTest.cpp",
    "tests/FileUtils.cpp",
    "tests/FileUtils.h",
    "tests/FontTestUtils.h",
    "tests/GraphemeBreakTests.cpp",
    "tests/ICUTestBase.h",
    "tests/LayoutUtilsTest.cpp",
    "tests/MeasurementTests.cpp",
    "tests/SparseBitSetTest.cpp",
    "tests/UnicodeUtils.cpp",
    "tests/UnicodeUtils.h",
    "tests/UnicodeUtilsTest.cpp",
    "tests/font_collection_unittests.cc",
    "tests/paragraph_unittests.cc",
    "tests/render_test.cc",
    "tests/render_test.h",
    "tests/txt_run_all_unittests.cc",

    # These tests require static fixtures.
    # "tests/FontCollectionItemizeTest.cpp",
    # "tests/FontCollectionTest.cpp",
    # "tests/FontFamilyTest.cpp",
    # "tests/FontLanguageListCacheTest.cpp",
    # "tests/FontTestUtils.cpp",
    # "tests/HbFontCacheTest.cpp",
    # "tests/HyphenatorTest.cpp",
    # "tests/LayoutTest.cpp",
  ]

  if (!is_win) {
    sources += [
      "tests/MinikinFontForTest.cpp",
      "tests/MinikinFontForTest.h",
    ]
  }

  configs += [ ":allow_posix_names" ]

  deps = [
           ":txt",
           ":txt_test_utils",
           "//flutter/testing:testing_lib",
           ":txt_fixtures",
         ] + txt_common_executable_deps
}

executable("txt_benchmarks") {
  testonly = true

  sources = [
    "benchmarks/paint_record_benchmarks.cc",
    "benchmarks/paragraph_benchmarks.cc",
    "benchmarks/paragraph_builder_benchmarks.cc",
    "benchmarks/styled_runs_benchmarks.cc",
    "benchmarks/txt_run_all_benchmarks.cc",
  ]

  deps = [
           ":txt",
           ":txt_test_utils",
           "//flutter/testing:testing_lib",
           "//third_party/benchmark",
           ":txt_fixtures",
         ] + txt_common_executable_deps

  if (flutter_enable_skshaper) {
    sources += [ "benchmarks/skparagraph_benchmarks.cc" ]

    deps += [ "//third_party/skia/modules/skparagraph" ]
  }
}
