# Copyright 2017 The Chromium 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("//third_party/protobuf/proto_library.gni")

copy("json_proto_copy") {
  sources = [
    "json.proto",
  ]
  outputs = [
    "$root_gen_dir" + "/testing/libfuzzer/proto/json.proto",
  ]
}

proto_library("json_proto") {
  sources = [
    "json.proto",
  ]

  # This way json.pb.h header goes into "$root_gen_dir" directory precisely,
  # otherwise it goes into "$root_gen_dir" + "/testing/libfuzzer/proto/".
  proto_out_dir = ""
  deps = [
    ":json_proto_copy",
  ]
}

source_set("json_proto_converter") {
  sources = [
    "json_proto_converter.cc",
    "json_proto_converter.h",
  ]
  deps = [
    ":json_proto",
  ]
}

if (!is_win) {
  static_library("skia_image_filter_converter") {
    sources = [
      "skia_image_filter_proto_converter.cc",
      "skia_image_filter_proto_converter.h",
    ]
    deps = [
      ":skia_image_filter_proto",
      "//base",
      "//skia",
      "//third_party/libprotobuf-mutator",
    ]
    defines = [ "AVOID_MISBEHAVIOR=1" ]

    testonly = true

    #  Can't disable instrumentation because of container-overflow false
    # positives.

    # Assertion failures and integer oveflows in skia are uninteresting.
    if (is_debug || is_ubsan) {
      all_dependent_configs = [ "//testing/libfuzzer:no_clusterfuzz" ]
    }
  }

  proto_library("skia_image_filter_proto") {
    sources = [
      "skia_image_filter.proto",
    ]
  }
}
