# Copyright 2019 Google LLC.

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

declare_args() {
  skia_enable_skparagraph = true
  paragraph_gms_enabled = true
  paragraph_tests_enabled = true
  paragraph_bench_enabled = false
}

if (skia_enable_skparagraph && skia_enable_skshaper && skia_use_icu &&
    skia_use_harfbuzz) {
  config("public_config") {
    include_dirs = [
      "include",
      "utils",
    ]
  }

  skia_component("skparagraph") {
    import("skparagraph.gni")
    public_configs = [ ":public_config" ]
    public = skparagraph_public
    sources = skparagraph_sources
    deps = [
      "../..:skia",
      "../skshaper",
    ]
  }

  config("utils_config") {
    include_dirs = [ "utils" ]
  }

  if (defined(is_skia_standalone) && skia_enable_tools) {
    skia_source_set("utils") {
      import("skparagraph.gni")
      public_configs = [ ":utils_config" ]
      configs = [ "../../:skia_private" ]
      sources = skparagraph_utils
      deps = [
        "../..:skia",
        "../skshaper",
      ]
    }

    skia_source_set("gm") {
      if (paragraph_gms_enabled) {
        testonly = true
        sources = [ "gm/simple_gm.cpp" ]
        deps = [
          ":skparagraph",
          "../..:gpu_tool_utils",
          "../..:skia",
          "../skshaper",
        ]
      } else {
        sources = []
      }
    }

    skia_source_set("tests") {
      if (paragraph_tests_enabled) {
        testonly = true
        sources = [ "tests/SkParagraphTest.cpp" ]
        deps = [
          ":skparagraph",
          "../..:skia",
          "../..:test",
          "../skshaper",
        ]
      } else {
        sources = []
      }
    }

    skia_source_set("bench") {
      if (paragraph_bench_enabled) {
        testonly = true
        sources = [ "bench/ParagraphBench.cpp" ]
        deps = [
          ":skparagraph",
          "../..:skia",
          "../skshaper",
        ]
      } else {
        sources = []
      }
    }

    skia_source_set("samples") {
      testonly = true
      sources = [ "samples/SampleParagraph.cpp" ]
      deps = [
        ":skparagraph",
        ":utils",
        "../..:skia",
        "../skshaper",
      ]
    }
  }
} else {
  group("skparagraph") {
  }
  group("utils") {
  }
  group("gm") {
  }
  group("tests") {
  }
  group("bench") {
  }
  group("samples") {
  }
}
