# 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" ]
      sources = [
        "fuzz/FuzzSkottieJSON.cpp",
      ]

      deps = [
        "../..: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",
      ]
    }
  }
}
