# Copyright (c) 2009-2021, Google LLC
# All rights reserved.
#
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file or at
# https://developers.google.com/open-source/licenses/bsd

load(
    "//bazel:build_defs.bzl",
    "UPB_DEFAULT_CPPOPTS",
)
load(
    "//protos/bazel:upb_cc_proto_library.bzl",
    "upb_cc_proto_library_copts",
)

# begin:google_only
# package(default_applicable_licenses = ["//upb:license"])
# end:google_only

licenses(["notice"])

cc_library(
    name = "repeated_field",
    hdrs = [
        "repeated_field.h",
        "repeated_field_iterator.h",
    ],
    copts = UPB_DEFAULT_CPPOPTS,
    visibility = ["//visibility:public"],
    deps = [
        ":protos",
        ":protos_traits",
        "//upb:base",
        "//upb:mem",
        "//upb:message",
        "//upb:message_copy",
        "@com_google_absl//absl/base:core_headers",
        "@com_google_absl//absl/strings",
    ],
)

cc_library(
    name = "protos",
    srcs = [
        "protos.cc",
    ],
    hdrs = [
        "protos.h",
    ],
    copts = UPB_DEFAULT_CPPOPTS,
    visibility = ["//visibility:public"],
    deps = [
        ":protos_extension_lock",
        "//upb:base",
        "//upb:mem",
        "//upb:message",
        "//upb:message_copy",
        "//upb:message_promote",
        "//upb:mini_table",
        "//upb:wire",
        "//upb:wire_reader",
        "//upb/message:internal",
        "@com_google_absl//absl/status",
        "@com_google_absl//absl/status:statusor",
        "@com_google_absl//absl/strings",
        "@com_google_absl//absl/strings:str_format",
    ],
)

# Internally used type traits.
cc_library(
    name = "protos_traits",
    hdrs = [
        "protos_traits.h",
    ],
    copts = UPB_DEFAULT_CPPOPTS,
    visibility = ["//visibility:private"],
)

cc_library(
    name = "protos_internal",
    hdrs = ["protos_internal.h"],
    copts = UPB_DEFAULT_CPPOPTS,
    visibility = ["//visibility:public"],
    deps = [
        ":protos",
        "//upb:mem",
        "//upb:message",
        "//upb:mini_table",
        "@com_google_absl//absl/status",
        "@com_google_absl//absl/status:statusor",
        "@com_google_absl//absl/strings:str_format",
    ],
)

cc_library(
    name = "protos_extension_lock",
    srcs = ["protos_extension_lock.cc"],
    hdrs = ["protos_extension_lock.h"],
    copts = UPB_DEFAULT_CPPOPTS,
    visibility = ["//visibility:public"],
    deps = [
        "//upb:message",
        "@com_google_absl//absl/base:core_headers",
        "@com_google_absl//absl/synchronization",
    ],
)

# Common support code for C++ generated code.
cc_library(
    name = "generated_protos_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me",
    hdrs = [
        "protos_internal.h",
    ],
    copts = UPB_DEFAULT_CPPOPTS,
    visibility = ["//visibility:public"],
    deps = [
        ":protos",
        ":protos_internal",
        ":repeated_field",
        "//upb:mem",
        "//upb:message",
    ],
)

cc_test(
    name = "protos_internal_test",
    srcs = ["protos_internal_test.cc"],
    copts = UPB_DEFAULT_CPPOPTS,
    deps = [
        ":protos_internal",
        "//protos_generator/tests:test_model_upb_cc_proto",
        "//protos_generator/tests:test_model_upb_proto",
        "//upb:mem",
        "@com_google_googletest//:gtest",
        "@com_google_googletest//:gtest_main",
    ],
)

upb_cc_proto_library_copts(
    name = "upb_cc_proto_library_copts__for_generated_code_only_do_not_use",
    copts = UPB_DEFAULT_CPPOPTS,
    visibility = ["//visibility:public"],
)

cc_test(
    name = "repeated_field_iterator_test",
    srcs = ["repeated_field_iterator_test.cc"],
    deps = [
        ":repeated_field",
        "@com_google_googletest//:gtest",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "protos_extension_lock_test",
    srcs = ["protos_extension_lock_test.cc"],
    deps = [
        "//protos",
        "//protos:protos_extension_lock",
        "//protos_generator/tests:test_model_upb_cc_proto",
        "//upb:mem",
        "@com_google_absl//absl/hash",
        "@com_google_absl//absl/log:absl_check",
        "@com_google_googletest//:gtest",
        "@com_google_googletest//:gtest_main",
    ],
)
