Skip to content

Commit

Permalink
Fix upb_proto_aspect to correctly reexport providers.
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 545448300
  • Loading branch information
protobuf-github-bot authored and copybara-github committed Jul 4, 2023
1 parent 3ecb7a4 commit ae583df
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 7 deletions.
42 changes: 36 additions & 6 deletions bazel/upb_proto_library.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
19 changes: 18 additions & 1 deletion upb/test/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
2 changes: 2 additions & 0 deletions upb/test/test_import_empty_srcs.proto
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

0 comments on commit ae583df

Please sign in to comment.