# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Import the fidl GN template.
import("//build/fidl/fidl.gni")

# Define a target for our FIDL library by passing it the FIDL source files
# that make up the library.
fidl("fuchsia.examples.docs") {
  testonly = true
  sources = [
    "api_rubric.test.fidl",
    "attributes.test.fidl",
    "language_reference.test.fidl",
    "life_of_a_handle.test.fidl",
    "misc.test.fidl",
    "style.test.fidl",
  ]
  experimental_flags = []
  public_deps = [
    "//sdk/fidl/fuchsia.math",
    "//sdk/fidl/fuchsia.mem",
    "//zircon/vdso/zx",
  ]
  excluded_checks = [
    "invalid-case-for-decl-name",
    "protocol-name-includes-service",
    "string-bounds-not-specified",
    "vector-bounds-not-specified",
  ]
}

fidl("versioning") {
  testonly = true
  name = "fuchsia.examples.docs"
  sources = [ "versioning.test.fidl" ]
  excluded_checks = [ "string-bounds-not-specified" ]

  # TODO(https://fxbug.dev/328118770): Example libraries should be named
  # differently to avoid using fake fuchsia API levels. Rename the test library
  # and change these values as appropriate. For now, override the default
  # "unversioned" behavior for test-only libraries.
  versioned = "fuchsia"
  available = [ "fuchsia:HEAD" ]
}

group("all") {
  testonly = true
  deps = [
    ":fuchsia.examples.docs($fidl_toolchain)",
    ":versioning($fidl_toolchain)",
  ]
}
