# Copyright 2016 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")
import("//testing/test.gni")

config("ced_config") {
  include_dirs = [ "src" ]
}

config("ced_config_private") {
  # This cannot be set directly on the "ced" and "ced_unittests" target because
  # the target cflags property is added to the command-line before the cflags
  # property from its config. For configs, the cflags property are set in the
  # order public_configs, configs thus it is correctly set after the flag that
  # enable the error.
  if (is_clang) {
    cflags = [ "-Wno-unused-function" ]
  }
}

static_library("ced") {
  sources = [
    # find src -maxdepth 3 ! -type d | egrep '\.(h|cc)$' | grep -v test.cc |\
    # LC_COLLATE=c sort | sed 's/^\(.*\)$/    "\1",/'
    "src/compact_enc_det/compact_enc_det.cc",
    "src/compact_enc_det/compact_enc_det_generated_tables.h",
    "src/compact_enc_det/compact_enc_det_generated_tables2.h",
    "src/compact_enc_det/compact_enc_det_hint_code.cc",
    "src/compact_enc_det/compact_enc_det_hint_code.h",
    "src/util/basictypes.h",
    "src/util/case_insensitive_hash.h",
    "src/util/commandlineflags.h",
    "src/util/encodings/encodings.cc",
    "src/util/encodings/encodings.h",
    "src/util/encodings/encodings.pb.h",
    "src/util/languages/languages.cc",
    "src/util/languages/languages.h",
    "src/util/languages/languages.pb.h",
    "src/util/logging.h",
    "src/util/port.h",
    "src/util/string_util.h",
    "src/util/varsetter.h",
  ]
  public = [
    "src/compact_enc_det/compact_enc_det.h",
  ]
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    ":ced_config_private",
  ]

  public_configs = [ ":ced_config" ]

  if (is_win) {
    defines = [ "COMPILER_MSVC" ]
    cflags = [
      "/wd4005",  # Macro defined twice.
      "/wd4006",  # #undef expected an identifier.
      "/wd4018",  # '<': signed/unsigned mismatch
      "/wd4309",  # Truncation of constant value.
    ]
  } else {
    defines = [ "COMPILER_GCC" ]
  }

  defines += [ "HTML5_MODE" ]
}

test("ced_unittests") {
  sources = [
    "src/compact_enc_det/compact_enc_det_fuzz_test.cc",
    "src/compact_enc_det/compact_enc_det_unittest.cc",
    "src/compact_enc_det/detail_head_string.inc",
    "src/util/encodings/encodings_unittest.cc",
  ]

  configs += [ ":ced_config_private" ]

  if (is_win) {
    defines = [ "COMPILER_MSVC" ]
    cflags = [
      "/wd4310",  # Truncation of constant value.
      "/wd4267",  # size_t -> int
    ]
  } else {
    defines = [ "COMPILER_GCC" ]
  }

  defines += [ "HTML5_MODE" ]

  deps = [
    ":ced",
    "//testing/gtest",
    "//testing/gtest:gtest_main",
  ]
}

fuzzer_test("compact_enc_det_fuzzer") {
  sources = [
    "compact_enc_det_fuzzer.cc",
  ]
  deps = [
    ":ced",
    "//base/test:test_support",
  ]
  seed_corpus = "compact_enc_det_corpus"
}
