# Copyright 2016 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("//build/package.gni")

config("re2_config") {
  include_dirs = [ "." ]
}

config("re2_warnings") {
  cflags = [
    "-Wall",
    "-Wextra",
    "-Wno-missing-field-initializers",
    "-Wno-tautological-unsigned-enum-zero-compare",
    "-Wno-tautological-unsigned-zero-compare",
    "-Wno-unused-parameter",
  ]
}

static_library("re2") {
  sources = [
    "re2/bitmap256.h",
    "re2/bitstate.cc",
    "re2/compile.cc",
    "re2/dfa.cc",
    "re2/filtered_re2.cc",
    "re2/filtered_re2.h",
    "re2/mimics_pcre.cc",
    "re2/nfa.cc",
    "re2/onepass.cc",
    "re2/parse.cc",
    "re2/perl_groups.cc",
    "re2/prefilter.cc",
    "re2/prefilter.h",
    "re2/prefilter_tree.cc",
    "re2/prefilter_tree.h",
    "re2/prog.cc",
    "re2/prog.h",
    "re2/re2.cc",
    "re2/re2.h",
    "re2/regexp.cc",
    "re2/regexp.h",
    "re2/set.cc",
    "re2/set.h",
    "re2/simplify.cc",
    "re2/stringpiece.cc",
    "re2/stringpiece.h",
    "re2/tostring.cc",
    "re2/unicode_casefold.cc",
    "re2/unicode_casefold.h",
    "re2/unicode_groups.cc",
    "re2/unicode_groups.h",
    "re2/walker-inl.h",
    "util/flags.h",
    "util/hash.cc",
    "util/logging.cc",
    "util/logging.h",
    "util/mutex.h",
    "util/rune.cc",
    "util/sparse_array.h",
    "util/sparse_set.h",
    "util/stringprintf.cc",
    "util/strutil.cc",
    "util/utf.h",
    "util/util.h",
    "util/valgrind.cc",
    "util/valgrind.h",
  ]
  public_configs = [ ":re2_config" ]
  configs -= [ "//build/config:default_warnings" ]
  configs += [ ":re2_warnings" ]
}

source_set("testing") {
  testonly = true
  sources = [
    "re2/testing/backtrack.cc",
    "re2/testing/dump.cc",
    "re2/testing/exhaustive_tester.cc",
    "re2/testing/exhaustive_tester.h",
    "re2/testing/null_walker.cc",
    "re2/testing/regexp_generator.cc",
    "re2/testing/regexp_generator.h",
    "re2/testing/string_generator.cc",
    "re2/testing/string_generator.h",
    "re2/testing/tester.cc",
    "re2/testing/tester.h",
    "util/benchmark.h",
    "util/pcre.cc",
    "util/pcre.h",
    "util/random.cc",
    "util/random.h",
    "util/test.h",
    "util/thread.cc",
    "util/thread.h",
  ]
  public_deps = [
    ":re2",
  ]
  configs -= [ "//build/config:default_warnings" ]
  configs += [ ":re2_warnings" ]
}

executable("re2_tests_bin") {
  testonly = true
  output_name = "re2_tests"

  sources = [
    "re2/testing/charclass_test.cc",
    "re2/testing/compile_test.cc",
    "re2/testing/filtered_re2_test.cc",
    "re2/testing/mimics_pcre_test.cc",
    "re2/testing/parse_test.cc",
    "re2/testing/possible_match_test.cc",
    "re2/testing/re2_arg_test.cc",
    "re2/testing/re2_test.cc",
    "re2/testing/regexp_test.cc",
    "re2/testing/required_prefix_test.cc",
    "re2/testing/search_test.cc",
    "re2/testing/set_test.cc",
    "re2/testing/simplify_test.cc",
    "re2/testing/string_generator_test.cc",
    "util/test.cc",
  ]
  deps = [
    ":testing",
  ]
  configs -= [ "//build/config:default_warnings" ]
  configs += [ ":re2_warnings" ]
}

executable("re2_slow_tests") {
  testonly = true
  sources = [
    "re2/testing/dfa_test.cc",
    "re2/testing/exhaustive1_test.cc",
    "re2/testing/exhaustive2_test.cc",
    "re2/testing/exhaustive3_test.cc",
    "re2/testing/exhaustive_test.cc",
    "re2/testing/random_test.cc",
    "util/test.cc",
  ]
  deps = [
    ":testing",
  ]
  configs -= [ "//build/config:default_warnings" ]
  configs += [ ":re2_warnings" ]
}

source_set("benchmark") {
  testonly = true
  sources = [
    "util/benchmark.cc",
  ]
  deps = [
    ":re2",
  ]
  public_deps = [
    ":testing",
  ]
}

executable("regexp_benchmark") {
  testonly = true
  sources = [
    "re2/testing/regexp_benchmark.cc",
  ]
  deps = [
    ":benchmark",
  ]
}

package("re2_tests") {
  testonly = true
  deprecated_system_image = true

  deps = [
    ":re2_slow_tests",
    ":re2_tests_bin",
    ":regexp_benchmark",
  ]

  binaries = [
    {
      name = "re2_tests"
    },

    {
      name = "re2_slow_tests"
    },

    {
      name = "regexp_benchmark"
    },
  ]
}
