# 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/package.gni")
import("//build/rust/rustc_binary.gni")

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

  deps = [
    "//garnet/public/fidl/fuchsia.fonts:fuchsia.fonts-rustc",
    "//garnet/public/lib/fidl/rust/fidl",
    "//garnet/public/rust/fuchsia-app",
    "//garnet/public/rust/fuchsia-async",
    "//garnet/public/rust/fdio",
    "//garnet/public/rust/fuchsia-zircon",
    "//third_party/rust-crates/rustc_deps:failure",
    "//third_party/rust-crates/rustc_deps:libc",
    "//third_party/rust-crates/rustc_deps:log",
    "//third_party/rust-crates/rustc_deps:futures-preview",
    "//third_party/rust-crates/rustc_deps:getopts",
    "//third_party/rust-crates/rustc_deps:serde",
    "//third_party/rust-crates/rustc_deps:serde_derive",
    "//third_party/rust-crates/rustc_deps:serde_json",
    "//third_party/rust-crates/rustc_deps:unicase",
    "//zircon/public/fidl/fuchsia-mem:fuchsia-mem-rustc",
  ]

  non_rust_deps = [
    "//third_party/freetype2",
  ]
}

package("fonts") {
  deps = [
    ":font_server",
  ]

  binary = "font_server"

  meta = [
    {
      path = rebase_path("meta/fonts.cmx")
      dest = "fonts.cmx"
    }
  ]

  resources = [
    {
      path = rebase_path("manifest.json")
      dest = "manifest.json"
    },
  ]

  fonts = [
    "material/MaterialIcons-Regular.ttf",
    "roboto/Roboto-BlackItalic.ttf",
    "roboto/Roboto-Black.ttf",
    "roboto/Roboto-BoldItalic.ttf",
    "roboto/Roboto-Bold.ttf",
    "roboto/Roboto-Italic.ttf",
    "roboto/Roboto-LightItalic.ttf",
    "roboto/Roboto-Light.ttf",
    "roboto/Roboto-MediumItalic.ttf",
    "roboto/Roboto-Medium.ttf",
    "roboto/Roboto-Regular.ttf",
    "roboto/Roboto-ThinItalic.ttf",
    "roboto/Roboto-Thin.ttf",
    "robotocondensed/RobotoCondensed-BoldItalic.ttf",
    "robotocondensed/RobotoCondensed-Bold.ttf",
    "robotocondensed/RobotoCondensed-Italic.ttf",
    "robotocondensed/RobotoCondensed-LightItalic.ttf",
    "robotocondensed/RobotoCondensed-Light.ttf",
    "robotocondensed/RobotoCondensed-Regular.ttf",
    "robotomono/RobotoMono-BoldItalic.ttf",
    "robotomono/RobotoMono-Bold.ttf",
    "robotomono/RobotoMono-Italic.ttf",
    "robotomono/RobotoMono-LightItalic.ttf",
    "robotomono/RobotoMono-Light.ttf",
    "robotomono/RobotoMono-MediumItalic.ttf",
    "robotomono/RobotoMono-Medium.ttf",
    "robotomono/RobotoMono-Regular.ttf",
    "robotomono/RobotoMono-ThinItalic.ttf",
    "robotomono/RobotoMono-Thin.ttf",
    "robotoslab/RobotoSlab-Bold.ttf",
    "robotoslab/RobotoSlab-Light.ttf",
    "robotoslab/RobotoSlab-Regular.ttf",
    "robotoslab/RobotoSlab-Thin.ttf",
  ]
  foreach (font, fonts) {
    resources += [
      {
        path = rebase_path("third_party/${font}")
        file_name = get_path_info(font, "file")
        dest = "fonts/${file_name}"
      }
    ]
  }
}

# TODO(sergeyu): Once PKG-47 is fixed it will be possible to separate fonts
#                packages from font_server.
package("fonts_minimal") {
  deps = [
    ":font_server",
  ]

  binary = "font_server"

  meta = [
    {
      path = rebase_path("meta/fonts.cmx")
      dest = "fonts.cmx"
    }
  ]

  resources = [
    {
      path = rebase_path("manifest_minimal.json")
      dest = "manifest.json"
    },
  ]

  fonts = [
    "material/MaterialIcons-Regular.ttf",
    "roboto/Roboto-Light.ttf",
    "roboto/Roboto-Medium.ttf",
    "roboto/Roboto-Regular.ttf",
  ]
  foreach (font, fonts) {
    resources += [
      {
        path = rebase_path("third_party/${font}")
        file_name = get_path_info(font, "file")
        dest = "fonts/${file_name}"
      }
    ]
  }
}

rustc_binary("font_provider_test") {
  testonly = true
  edition = "2018"

  deps = [
    "//garnet/public/fidl/fuchsia.fonts:fuchsia.fonts-rustc",
    "//garnet/public/lib/fidl/rust/fidl",
    "//garnet/public/rust/fdio",
    "//garnet/public/rust/fuchsia-app",
    "//garnet/public/rust/fuchsia-async",
    "//garnet/public/rust/fuchsia-zircon",
    "//third_party/rust-crates/rustc_deps:failure",
    "//third_party/rust-crates/rustc_deps:futures-preview",
  ]
  source_root = "tests/font_provider_test.rs"
}

package("font_provider_tests") {
  testonly = true

  # Necessary to work around ZX-2727.
  deprecated_system_image = true

  deps = [
    ":font_provider_test",
    ":font_server",
  ]

  tests = [
    { name = "font_provider_test" },
    { name = "font_server_bin_test_rustc" },
  ]

  resources = [
    {
      path = rebase_path("tests/test_manifest.json")
      dest = "testdata/test_fonts/manifest.json"
    },
  ]

  # TODO(sergeyu): Noto CJK fonts are not included in the default fonts package
  # due to their size. Currently they are used only for tests. Once PKG-47 is
  # implemented it will be possible to customize set of fonts on higher levels,
  # which will allow to include these fonts in the default font package.
  fonts = [
    "notosanscjk/NotoSansCJK-Regular.ttc",
    "notoserifcjk/NotoSerifCJK-Regular.ttc",
  ]
  foreach (font, fonts) {
    resources += [
      {
        path = rebase_path("third_party/${font}")
        file_name = get_path_info(font, "file")
        dest = "testdata/test_fonts/${file_name}"
      }
    ]
  }
}
