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

declare_args() {
  skia_enable_skottie = true
}

config("public_config") {
  if (skia_enable_skottie) {
    defines = [ "SK_ENABLE_SKOTTIE" ]
    include_dirs = [ "include" ]
  }
}

source_set("skottie") {
  if (skia_enable_skottie) {
    import("skottie.gni")
    public_configs = [ ":public_config" ]
    public = skia_skottie_public
    sources = skia_skottie_sources
    configs += [ "../../:skia_private" ]
    deps = [
      "../..:skia",
      "../sksg",
    ]
  }
}

if (defined(is_skia_standalone)) {
  config("utils_config") {
    include_dirs = [ "utils" ]
  }
  source_set("utils") {
    if (skia_enable_skottie) {
      testonly = true

      public_configs = [ ":utils_config" ]
      configs += [ "../../:skia_private" ]
      sources = [
        "utils/SkottieUtils.cpp",
      ]
      deps = [
        ":skottie",
        "../..:skia",
      ]
    }
  }

  source_set("tests") {
    if (skia_enable_skottie) {
      testonly = true

      configs += [
        "../..:skia_private",
        "../..:tests_config",
      ]
      sources = [
        "src/SkottieTest.cpp",
      ]

      deps = [
        ":skottie",
        "../..:gpu_tool_utils",
        "../..:skia",
      ]
    }
  }

  source_set("fuzz") {
    if (skia_enable_skottie) {
      testonly = true

      configs += [ "../..:skia_private" ]
      include_dirs = [
        "../../tools",
        "../../tools/flags",
        "../../tools/fonts",
      ]
      sources = [
        "../../tools/Resources.cpp",
        "../../tools/fonts/SkTestFontMgr.cpp",
        "../../tools/fonts/SkTestSVGTypeface.cpp",
        "../../tools/fonts/SkTestTypeface.cpp",
        "fuzz/FuzzSkottieJSON.cpp",
      ]

      deps = [
        "../..:experimental_svg_model",
        "../..:skia",
      ]

      public_deps = [
        ":skottie",
      ]
    }
  }

  source_set("tool") {
    testonly = true

    configs += [ "../..:skia_private" ]
    sources = [
      "src/SkottieTool.cpp",
    ]

    deps = [
      "../..:flags",
      "../..:skia",
    ]

    public_deps = [
      ":skottie",
      ":utils",
    ]
  }

  source_set("gm") {
    if (skia_enable_skottie) {
      testonly = true

      # would be nice to have a gm_config
      include_dirs = [ "../../gm" ]

      configs += [ "../..:skia_private" ]
      sources = [
        "gm/SkottieGM.cpp",
      ]

      deps = [
        ":skottie",
        ":utils",
        "../..:gpu_tool_utils",
        "../..:skia",
        "../..:tool_utils",
      ]
    }
  }
}
