# Copyright 2014 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("//testing/libfuzzer/fuzzer_test.gni")

config("jsoncpp_config") {
  include_dirs = [
    "source/include",
    "generated",
  ]

  # TODO(crbug.com/983223): Update JsonCpp BUILD.gn to remove deprecated
  # declaration flag.
  # This temporary flag allowing clients to update to the new version, and then
  # update to the new StreamWriter and CharReader classes.
  if (!is_win || is_clang) {
    cflags_cc = [ "-Wno-deprecated-declarations" ]
  }
}

source_set("jsoncpp") {
  sources = [
    "generated/version.h",
    "source/include/json/assertions.h",
    "source/include/json/autolink.h",
    "source/include/json/config.h",
    "source/include/json/features.h",
    "source/include/json/forwards.h",
    "source/include/json/json.h",
    "source/include/json/reader.h",
    "source/include/json/value.h",
    "source/include/json/writer.h",
    "source/src/lib_json/json_reader.cpp",
    "source/src/lib_json/json_tool.h",
    "source/src/lib_json/json_value.cpp",
    "source/src/lib_json/json_writer.cpp",
  ]

  public_configs = [ ":jsoncpp_config" ]

  defines = [
    "JSON_USE_EXCEPTION=0",
    "JSON_USE_NULLREF=0",
  ]

  include_dirs = [ "source/src/lib_json" ]

  if (!is_win || is_clang) {
    cflags_cc = [ "-Wno-implicit-fallthrough" ]
  }
}

if (build_with_chromium) {
  fuzzer_test("jsoncpp_fuzzer") {
    sources = [ "fuzzers/json_fuzzer.cc" ]

    deps = [ ":jsoncpp" ]

    include_dirs = [ "generated" ]

    dict = "//testing/libfuzzer/fuzzers/dicts/json.dict"
  }
}
