# 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")

declare_args() {
  skia_enable_skshaper = true
}

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

  component("skshaper") {
    check_includes = false
    import("skshaper.gni")
    public_configs = [ ":public_config" ]
    public = skia_shaper_public
    deps = [ "../..:skia" ]
    defines = [ "SKSHAPER_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_harfbuzz_sources
      deps += [
        "//third_party/harfbuzz",
        "//third_party/icu",
      ]
    }
    configs += [
      "../../:skia_private",
      "../../third_party/icu/config:no_cxx",
    ]
  }
} else {
  group("skshaper") {
  }
}
