# 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" ]
    }
  }

  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 (is_mac) {
        frameworks = [ "ApplicationServices.framework" ]
      }

      if (is_ios) {
        frameworks = [
          "CoreFoundation.framework",
          "CoreText.framework",
        ]
      }
    }
    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") {
  }
}
