Fix upb_proto_aspect to correctly reexport providers.

PiperOrigin-RevId: 545448300
pull/13171/head
Protobuf Team Bot 2 years ago committed by Copybara-Service
parent 3ecb7a4163
commit ae583df89a
  1. 42
      bazel/upb_proto_library.bzl
  2. 19
      upb/test/BUILD
  3. 2
      upb/test/test_import_empty_srcs.proto

@ -297,12 +297,42 @@ def _upb_proto_aspect_impl(target, ctx, generator, cc_provider, file_provider, p
providers = []
if not getattr(ctx.rule.attr, "srcs", []):
# This target doesn't declare any sources, reexport all its deps instead.
deps = ctx.rule.attr.deps
providers += [cc_provider(cc_info = dep[CcInfo]) for dep in deps if CcInfo in dep]
providers += [dep[UpbWrappedCcInfo] for dep in deps if UpbWrappedCcInfo in dep]
providers += [dep[_UpbDefsWrappedCcInfo] for dep in deps if _UpbDefsWrappedCcInfo in dep]
providers += [dep[_UpbWrappedGeneratedSrcsInfo] for dep in deps if _UpbWrappedGeneratedSrcsInfo in dep]
providers += [dep[_WrappedDefsGeneratedSrcsInfo] for dep in deps if _WrappedDefsGeneratedSrcsInfo in dep]
srcs = []
hdrs = []
thunks = []
includes = []
cc_infos = []
cc_infos_with_thunks = []
for dep in ctx.rule.attr.deps:
if CcInfo in dep:
cc_infos.append(dep[CcInfo])
if UpbWrappedCcInfo in dep:
cc_infos.append(dep[UpbWrappedCcInfo].cc_info)
cc_infos_with_thunks.append(dep[UpbWrappedCcInfo].cc_info_with_thunks)
if _UpbDefsWrappedCcInfo in dep:
cc_infos.append(dep[_UpbDefsWrappedCcInfo].cc_info)
if _UpbWrappedGeneratedSrcsInfo in dep:
unwrapped_sources = dep[_UpbWrappedGeneratedSrcsInfo].srcs
srcs += unwrapped_sources.srcs
hdrs += unwrapped_sources.hdrs
thunks += unwrapped_sources.thunks
includes += unwrapped_sources.includes
if _WrappedDefsGeneratedSrcsInfo in dep:
unwrapped_sources = dep[_WrappedDefsGeneratedSrcsInfo].srcs
srcs += unwrapped_sources.srcs
hdrs += unwrapped_sources.hdrs
thunks += unwrapped_sources.thunks
includes += unwrapped_sources.includes
if len(cc_infos_with_thunks) > 0:
providers.append(cc_provider(
cc_info = cc_common.merge_cc_infos(direct_cc_infos = cc_infos),
cc_info_with_thunks = cc_common.merge_cc_infos(direct_cc_infos = cc_infos_with_thunks),
))
else:
providers.append(cc_provider(cc_info = cc_common.merge_cc_infos(direct_cc_infos = cc_infos)))
providers.append(file_provider(srcs = GeneratedSrcsInfo(srcs = srcs, hdrs = hdrs, thunks = thunks, includes = includes)))
else:
proto_info = target[ProtoInfo]
files = _compile_upb_protos(ctx, generator, proto_info, proto_info.direct_sources)

@ -217,11 +217,28 @@ proto_library(
deps = [":test_proto"],
)
proto_library(
name = "empty_srcs_2_proto",
testonly = 1,
srcs = [],
deps = [":test_cpp_proto"],
)
proto_library(
name = "empty_srcs_3_proto",
testonly = 1,
srcs = [],
deps = [
":empty_srcs_2_proto",
":empty_srcs_proto",
],
)
proto_library(
name = "test_import_empty_srcs_proto",
testonly = 1,
srcs = ["test_import_empty_srcs.proto"],
deps = [":empty_srcs_proto"],
deps = [":empty_srcs_3_proto"],
)
upb_proto_library(

@ -3,7 +3,9 @@ syntax = "proto2";
package upb_test;
import "upb/test/test.proto";
import "upb/test/test_cpp.proto";
message ContainsImported {
optional MessageName message_name = 1;
optional upb.test.TestMessage test_message = 2;
}

Loading…
Cancel
Save