# Copyright 2018 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("../../gn/skia.gni")
import("skshaper.gni")

if (skia_enable_skshaper) {
  config("public_config") {
    include_dirs = [ "include" ]
    defines = []
    if (is_component_build) {
      defines += [ "SKSHAPER_DLL" ]
    }
    if (skia_use_fonthost_mac) {
      defines += [ "SK_SHAPER_CORETEXT_AVAILABLE" ]
    }
    if (skia_use_icu && skia_use_harfbuzz) {
      defines += [ "SK_SHAPER_HARFBUZZ_AVAILABLE" ]
      defines += [ "SK_UNICODE_AVAILABLE" ]
    }
    if (skia_enable_icu_ubrk_safeclone) {
      defines += [ "SK_ENABLE_ICU_UBRK_SAFECLONE" ]
    }
  }

  component("skshaper") {
    check_includes = false
    public_configs = [ ":public_config" ]
    public = skia_shaper_public
    deps = [ "../..:skia" ]
    defines = [
      "SKSHAPER_IMPLEMENTATION=1",
      "SKUNICODE_IMPLEMENTATION=1",
    ]
    sources = skia_shaper_primitive_sources
    if (skia_use_fonthost_mac) {
      sources += skia_shaper_coretext_sources
    }
    if (skia_use_icu && skia_use_harfbuzz) {
      sources += skia_shaper_icu_sources
      sources += skia_shaper_harfbuzz_sources
      deps += [
        "//third_party/harfbuzz",
        "//third_party/icu",
      ]
    }
    configs += [
      "../../:skia_private",
      "../../third_party/icu/config:no_cxx",
    ]
  }
} else {
  group("skshaper") {
  }
}
