# Copyright 2016 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/components.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_library.gni")
import("//build/rust/rustc_test.gni")
import("//build/type/config.gni")
import("//src/fonts/build/fonts.gni")

group("fonts") {
  public_deps = [
    ":pkg",
    # XXX: external dependencies on //src/fonts are intending just to get the
    # package, but that layout does not follow the convention of directory
    # targets including all their tests and buildable artifacts. For now these
    # need to be disabled, and all external consumers only intending to import
    # fonts support should be moved to using //src/fonts:pkg instead.
    # ":open-fonts",
    # ":tests",
  ]
}

group("tests") {
  testonly = true
  public_deps = [
    ":font_provider_unit_tests",
    "char_set:tests",
    "font_info:tests",
    "manifest:tests",
    "offset_string:tests",
    "tests",
    "tools:tests",
  ]
}

# Group of all the dependencies needed for downstream tests that rely on fonts,
# such as Chromium tests.
# Tests that use this dependency should also put
# { "fuchsia.fonts.Provider": "fuchsia-pkg://fuchsia.com/fonts#meta/fonts_for_downstream_tests.cmx" }
# in their component manifests' "facets" > "fuchsia.test" > "injected-services".
group("downstream_test_deps") {
  testonly = true
  public_deps = [
    ":downstream-test-fonts-collection",
    ":fonts",
  ]
}

rustc_binary("font_provider") {
  name = "font_provider"
  with_unit_tests = true
  edition = "2018"

  deps = [
    "char_set",
    "font_info",
    "freetype_ffi",
    "manifest",
    "//garnet/lib/rust/fidl_fuchsia_fonts_ext",
    "//garnet/lib/rust/io_util",
    "//sdk/fidl/fuchsia.fonts:fuchsia.fonts-rustc",
    "//sdk/fidl/fuchsia.fonts.experimental:fuchsia.fonts.experimental-rustc",
    "//sdk/fidl/fuchsia.intl:fuchsia.intl-rustc",
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//sdk/fidl/fuchsia.mem:fuchsia.mem-rustc",
    "//sdk/fidl/fuchsia.pkg:fuchsia.pkg-rustc",
    "//src/lib/diagnostics/inspect/runtime/rust",
    "//src/lib/diagnostics/inspect/rust",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-url",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/trace/rust:trace",
    "//src/lib/trace/rust:trace-provider",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:heck",
    "//third_party/rust_crates:itertools",
    "//third_party/rust_crates:lazy_static",
    "//third_party/rust_crates:libc",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:thiserror",
    "//third_party/rust_crates:unicase",
  ]

  test_deps = [
    "//src/lib/intl/unicode_utils/char_collection",
    "//third_party/rust_crates:maplit",
    "//third_party/rust_crates:pretty_assertions",
  ]

  non_rust_deps = [ "//third_party/freetype2" ]

  sources = [
    "src/font_service/asset/asset.rs",
    "src/font_service/asset/cache.rs",
    "src/font_service/asset/collection.rs",
    "src/font_service/asset/loader.rs",
    "src/font_service/asset/mod.rs",
    "src/font_service/builder.rs",
    "src/font_service/debug.rs",
    "src/font_service/family.rs",
    "src/font_service/inspect.rs",
    "src/font_service/mod.rs",
    "src/font_service/typeface/collection.rs",
    "src/font_service/typeface/matcher.rs",
    "src/font_service/typeface/mod.rs",
    "src/font_service/typeface/test_util.rs",
    "src/font_service/typeface/typeface.rs",
    "src/main.rs",
  ]
}

fuchsia_component("font_provider_cm") {
  manifest = "meta/fonts.cml"
  component_name = "fonts"
  deps = [ ":font_provider" ]
}

# TODO: Remove fonts.cmx once external clients aren't using it.
fuchsia_component("font_provider_cmx") {
  manifest = "meta/fonts.cmx"
  component_name = "fonts"
  deps = [ ":font_provider" ]
}
fuchsia_component("font_provider_cmx_tests") {
  manifest = "meta/fonts_for_downstream_tests.cmx"
  component_name = "fonts_for_downstream_tests"
  deps = [ ":font_provider" ]
}

fuchsia_package("pkg") {
  package_name = "fonts"
  deps = [
    ":font_provider_cm",
    ":font_provider_cmx",
    ":font_provider_cmx_tests",
  ]
}

build_type_config_data("build_type") {
  for_pkg = "fonts"
}

fuchsia_component("font_provider_unit_tests_cmp") {
  testonly = true
  manifest = "meta/font_provider_bin_test.cml"
  component_name = "font_provider_bin_test"
  deps = [ ":font_provider_test" ]
}

fuchsia_test_package("font_provider_unit_tests") {
  test_components = [ ":font_provider_unit_tests_cmp" ]
}

# Re-export:
# Group of all open-source font packages. This should be added to
# `universe_package_labels`.
group("open-fonts") {
  deps = [ "collections:open-fonts" ]
}

# Re-export:
# Font collection for semi-hermetic downstream tests (e.g. Chromium) that need
# to use a fixed set of fonts.
group("downstream-test-fonts-collection") {
  testonly = true
  deps = [ "collections:downstream-test-fonts-collection" ]
}

# Re-export:
# Font collection for open-source products. This should be added to
# `base_package_labels` or `cache_package_labels`.
group("open-fonts-collection") {
  testonly = true
  deps = [ "collections:open-fonts-collection" ]
}

# Re-export:
# Empty font collection for products that spawn a font server but don't want any
# actual fonts. This should be added to `base_package_labels` or
# `cache_package_labels`.
group("empty-font-collection") {
  deps = [ "collections:empty-font-collection" ]
}
