# Copyright 2023 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

# DO NOT MANUALLY EDIT!
# This file was automatically generated by pw_build/gn_writer.py

import("//build_overrides/pigweed.gni")

import("$dir_pw_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_third_party/re2/re2.gni")

if (dir_pw_third_party_re2 != "") {
  config("re2_public_config1") {
    include_dirs = [ "$dir_pw_third_party_re2" ]
  }

  # Generated from //:re2
  pw_source_set("re2") {
    public = [
      "$dir_pw_third_party_re2/re2/filtered_re2.h",
      "$dir_pw_third_party_re2/re2/re2.h",
      "$dir_pw_third_party_re2/re2/set.h",
      "$dir_pw_third_party_re2/re2/stringpiece.h",
    ]
    sources = [
      "$dir_pw_third_party_re2/re2/bitmap256.cc",
      "$dir_pw_third_party_re2/re2/bitmap256.h",
      "$dir_pw_third_party_re2/re2/bitstate.cc",
      "$dir_pw_third_party_re2/re2/compile.cc",
      "$dir_pw_third_party_re2/re2/dfa.cc",
      "$dir_pw_third_party_re2/re2/filtered_re2.cc",
      "$dir_pw_third_party_re2/re2/mimics_pcre.cc",
      "$dir_pw_third_party_re2/re2/nfa.cc",
      "$dir_pw_third_party_re2/re2/onepass.cc",
      "$dir_pw_third_party_re2/re2/parse.cc",
      "$dir_pw_third_party_re2/re2/perl_groups.cc",
      "$dir_pw_third_party_re2/re2/pod_array.h",
      "$dir_pw_third_party_re2/re2/prefilter.cc",
      "$dir_pw_third_party_re2/re2/prefilter.h",
      "$dir_pw_third_party_re2/re2/prefilter_tree.cc",
      "$dir_pw_third_party_re2/re2/prefilter_tree.h",
      "$dir_pw_third_party_re2/re2/prog.cc",
      "$dir_pw_third_party_re2/re2/prog.h",
      "$dir_pw_third_party_re2/re2/re2.cc",
      "$dir_pw_third_party_re2/re2/regexp.cc",
      "$dir_pw_third_party_re2/re2/regexp.h",
      "$dir_pw_third_party_re2/re2/set.cc",
      "$dir_pw_third_party_re2/re2/simplify.cc",
      "$dir_pw_third_party_re2/re2/sparse_array.h",
      "$dir_pw_third_party_re2/re2/sparse_set.h",
      "$dir_pw_third_party_re2/re2/stringpiece.cc",
      "$dir_pw_third_party_re2/re2/tostring.cc",
      "$dir_pw_third_party_re2/re2/unicode_casefold.cc",
      "$dir_pw_third_party_re2/re2/unicode_casefold.h",
      "$dir_pw_third_party_re2/re2/unicode_groups.cc",
      "$dir_pw_third_party_re2/re2/unicode_groups.h",
      "$dir_pw_third_party_re2/re2/walker-inl.h",
      "$dir_pw_third_party_re2/util/logging.h",
      "$dir_pw_third_party_re2/util/mix.h",
      "$dir_pw_third_party_re2/util/mutex.h",
      "$dir_pw_third_party_re2/util/rune.cc",
      "$dir_pw_third_party_re2/util/strutil.cc",
      "$dir_pw_third_party_re2/util/strutil.h",
      "$dir_pw_third_party_re2/util/utf.h",
      "$dir_pw_third_party_re2/util/util.h",
    ]
    cflags = [ "-pthread" ]
    ldflags = [ "-pthread" ]
    public_configs = [ ":re2_public_config1" ]
    configs = [ "configs:internal_disabled_warnings" ]
    remove_configs = [ "$dir_pw_fuzzer:instrumentation" ]
  }
}

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
}
