diff options
48 files changed, 527 insertions, 195 deletions
@@ -40,9 +40,154 @@ core_version = "4.0.0-dev" version = "1.5.0-dev" +GPR_PUBLIC_HDRS = [ + "include/grpc/support/alloc.h", + "include/grpc/support/atm.h", + "include/grpc/support/atm_gcc_atomic.h", + "include/grpc/support/atm_gcc_sync.h", + "include/grpc/support/atm_windows.h", + "include/grpc/support/avl.h", + "include/grpc/support/cmdline.h", + "include/grpc/support/cpu.h", + "include/grpc/support/histogram.h", + "include/grpc/support/host_port.h", + "include/grpc/support/log.h", + "include/grpc/support/log_windows.h", + "include/grpc/support/port_platform.h", + "include/grpc/support/string_util.h", + "include/grpc/support/subprocess.h", + "include/grpc/support/sync.h", + "include/grpc/support/sync_generic.h", + "include/grpc/support/sync_posix.h", + "include/grpc/support/sync_windows.h", + "include/grpc/support/thd.h", + "include/grpc/support/time.h", + "include/grpc/support/tls.h", + "include/grpc/support/tls_gcc.h", + "include/grpc/support/tls_msvc.h", + "include/grpc/support/tls_pthread.h", + "include/grpc/support/useful.h", +] + +GRPC_PUBLIC_HDRS = [ + "include/grpc/byte_buffer.h", + "include/grpc/byte_buffer_reader.h", + "include/grpc/compression.h", + "include/grpc/load_reporting.h", + "include/grpc/grpc.h", + "include/grpc/grpc_posix.h", + "include/grpc/grpc_security_constants.h", + "include/grpc/slice.h", + "include/grpc/slice_buffer.h", + "include/grpc/status.h", + "include/grpc/support/workaround_list.h", +] + +GRPC_SECURE_PUBLIC_HDRS = [ + "include/grpc/grpc_security.h", +] + +# TODO(ctiller): layer grpc atop grpc_unsecure, layer grpc++ atop grpc++_unsecure +GRPCXX_SRCS = [ + "src/cpp/client/channel_cc.cc", + "src/cpp/client/client_context.cc", + "src/cpp/client/create_channel.cc", + "src/cpp/client/create_channel_internal.cc", + "src/cpp/client/create_channel_posix.cc", + "src/cpp/client/credentials_cc.cc", + "src/cpp/client/generic_stub.cc", + "src/cpp/common/channel_arguments.cc", + "src/cpp/common/channel_filter.cc", + "src/cpp/common/completion_queue_cc.cc", + "src/cpp/common/core_codegen.cc", + "src/cpp/common/resource_quota_cc.cc", + "src/cpp/common/rpc_method.cc", + "src/cpp/common/version_cc.cc", + "src/cpp/server/async_generic_service.cc", + "src/cpp/server/channel_argument_option.cc", + "src/cpp/server/create_default_thread_pool.cc", + "src/cpp/server/dynamic_thread_pool.cc", + "src/cpp/server/health/default_health_check_service.cc", + "src/cpp/server/health/health.pb.c", + "src/cpp/server/health/health_check_service.cc", + "src/cpp/server/health/health_check_service_server_builder_option.cc", + "src/cpp/server/server_builder.cc", + "src/cpp/server/server_cc.cc", + "src/cpp/server/server_context.cc", + "src/cpp/server/server_credentials.cc", + "src/cpp/server/server_posix.cc", + "src/cpp/thread_manager/thread_manager.cc", + "src/cpp/util/byte_buffer_cc.cc", + "src/cpp/util/slice_cc.cc", + "src/cpp/util/status.cc", + "src/cpp/util/string_ref.cc", + "src/cpp/util/time_cc.cc", +] + +GRPCXX_HDRS = [ + "src/cpp/client/create_channel_internal.h", + "src/cpp/common/channel_filter.h", + "src/cpp/server/dynamic_thread_pool.h", + "src/cpp/server/health/default_health_check_service.h", + "src/cpp/server/health/health.pb.h", + "src/cpp/server/thread_pool_interface.h", + "src/cpp/thread_manager/thread_manager.h", +] + +GRPCXX_PUBLIC_HDRS = [ + "include/grpc++/alarm.h", + "include/grpc++/channel.h", + "include/grpc++/client_context.h", + "include/grpc++/completion_queue.h", + "include/grpc++/create_channel.h", + "include/grpc++/create_channel_posix.h", + "include/grpc++/ext/health_check_service_server_builder_option.h", + "include/grpc++/generic/async_generic_service.h", + "include/grpc++/generic/generic_stub.h", + "include/grpc++/grpc++.h", + "include/grpc++/health_check_service_interface.h", + "include/grpc++/impl/call.h", + "include/grpc++/impl/channel_argument_option.h", + "include/grpc++/impl/client_unary_call.h", + "include/grpc++/impl/codegen/core_codegen.h", + "include/grpc++/impl/grpc_library.h", + "include/grpc++/impl/method_handler_impl.h", + "include/grpc++/impl/rpc_method.h", + "include/grpc++/impl/rpc_service_method.h", + "include/grpc++/impl/serialization_traits.h", + "include/grpc++/impl/server_builder_option.h", + "include/grpc++/impl/server_builder_plugin.h", + "include/grpc++/impl/server_initializer.h", + "include/grpc++/impl/service_type.h", + "include/grpc++/impl/sync_cxx11.h", + "include/grpc++/impl/sync_no_cxx11.h", + "include/grpc++/resource_quota.h", + "include/grpc++/security/auth_context.h", + "include/grpc++/security/auth_metadata_processor.h", + "include/grpc++/security/credentials.h", + "include/grpc++/security/server_credentials.h", + "include/grpc++/server.h", + "include/grpc++/server_builder.h", + "include/grpc++/server_context.h", + "include/grpc++/server_posix.h", + "include/grpc++/support/async_stream.h", + "include/grpc++/support/async_unary_call.h", + "include/grpc++/support/byte_buffer.h", + "include/grpc++/support/channel_arguments.h", + "include/grpc++/support/config.h", + "include/grpc++/support/slice.h", + "include/grpc++/support/status.h", + "include/grpc++/support/status_code_enum.h", + "include/grpc++/support/string_ref.h", + "include/grpc++/support/stub_options.h", + "include/grpc++/support/sync_stream.h", + "include/grpc++/support/time.h", +] + grpc_cc_library( name = "gpr", language = "c", + public_hdrs = GPR_PUBLIC_HDRS, standalone = True, deps = [ "gpr_base", @@ -57,6 +202,7 @@ grpc_cc_library( "src/core/plugin_registry/grpc_unsecure_plugin_registry.c", ], language = "c", + public_hdrs = GRPC_PUBLIC_HDRS, standalone = True, deps = [ "grpc_common", @@ -70,6 +216,7 @@ grpc_cc_library( "src/core/plugin_registry/grpc_plugin_registry.c", ], language = "c", + public_hdrs = GRPC_PUBLIC_HDRS + GRPC_SECURE_PUBLIC_HDRS, standalone = True, deps = [ "grpc_common", @@ -114,6 +261,7 @@ grpc_cc_library( "src/cpp/server/secure_server_credentials.h", ], language = "c++", + public_hdrs = GRPCXX_PUBLIC_HDRS, standalone = True, deps = [ "gpr", @@ -379,34 +527,7 @@ grpc_cc_library( "src/core/lib/support/tmpfile.h", ], language = "c", - public_hdrs = [ - "include/grpc/support/alloc.h", - "include/grpc/support/atm.h", - "include/grpc/support/atm_gcc_atomic.h", - "include/grpc/support/atm_gcc_sync.h", - "include/grpc/support/atm_windows.h", - "include/grpc/support/avl.h", - "include/grpc/support/cmdline.h", - "include/grpc/support/cpu.h", - "include/grpc/support/histogram.h", - "include/grpc/support/host_port.h", - "include/grpc/support/log.h", - "include/grpc/support/log_windows.h", - "include/grpc/support/port_platform.h", - "include/grpc/support/string_util.h", - "include/grpc/support/subprocess.h", - "include/grpc/support/sync.h", - "include/grpc/support/sync_generic.h", - "include/grpc/support/sync_posix.h", - "include/grpc/support/sync_windows.h", - "include/grpc/support/thd.h", - "include/grpc/support/time.h", - "include/grpc/support/tls.h", - "include/grpc/support/tls_gcc.h", - "include/grpc/support/tls_msvc.h", - "include/grpc/support/tls_pthread.h", - "include/grpc/support/useful.h", - ], + public_hdrs = GPR_PUBLIC_HDRS, deps = [ "gpr_codegen", ], @@ -434,6 +555,7 @@ grpc_cc_library( name = "grpc_trace", srcs = ["src/core/lib/debug/trace.c"], hdrs = ["src/core/lib/debug/trace.h"], + language = "c", deps = [":gpr"], ) @@ -679,19 +801,7 @@ grpc_cc_library( "zlib", ], language = "c", - public_hdrs = [ - "include/grpc/byte_buffer.h", - "include/grpc/byte_buffer_reader.h", - "include/grpc/compression.h", - "include/grpc/load_reporting.h", - "include/grpc/grpc.h", - "include/grpc/grpc_posix.h", - "include/grpc/grpc_security_constants.h", - "include/grpc/slice.h", - "include/grpc/slice_buffer.h", - "include/grpc/status.h", - "include/grpc/support/workaround_list.h", - ], + public_hdrs = GRPC_PUBLIC_HDRS, deps = [ "gpr_base", "grpc_codegen", @@ -712,6 +822,7 @@ grpc_cc_library( grpc_cc_library( name = "grpc_common", + language = "c", deps = [ "grpc_base", # standard plugins @@ -1083,9 +1194,7 @@ grpc_cc_library( "src/core/lib/security/util/json_util.h", ], language = "c", - public_hdrs = [ - "include/grpc/grpc_security.h", - ], + public_hdrs = GRPC_SECURE_PUBLIC_HDRS, deps = [ "grpc_base", "grpc_transport_chttp2_alpn", @@ -1299,103 +1408,6 @@ grpc_cc_library( ], ) -# TODO(ctiller): layer grpc atop grpc_unsecure, layer grpc++ atop grpc++_unsecure -GRPCXX_SRCS = [ - "src/cpp/client/channel_cc.cc", - "src/cpp/client/client_context.cc", - "src/cpp/client/create_channel.cc", - "src/cpp/client/create_channel_internal.cc", - "src/cpp/client/create_channel_posix.cc", - "src/cpp/client/credentials_cc.cc", - "src/cpp/client/generic_stub.cc", - "src/cpp/common/channel_arguments.cc", - "src/cpp/common/channel_filter.cc", - "src/cpp/common/completion_queue_cc.cc", - "src/cpp/common/core_codegen.cc", - "src/cpp/common/resource_quota_cc.cc", - "src/cpp/common/rpc_method.cc", - "src/cpp/common/version_cc.cc", - "src/cpp/server/async_generic_service.cc", - "src/cpp/server/channel_argument_option.cc", - "src/cpp/server/create_default_thread_pool.cc", - "src/cpp/server/dynamic_thread_pool.cc", - "src/cpp/server/health/default_health_check_service.cc", - "src/cpp/server/health/health.pb.c", - "src/cpp/server/health/health_check_service.cc", - "src/cpp/server/health/health_check_service_server_builder_option.cc", - "src/cpp/server/server_builder.cc", - "src/cpp/server/server_cc.cc", - "src/cpp/server/server_context.cc", - "src/cpp/server/server_credentials.cc", - "src/cpp/server/server_posix.cc", - "src/cpp/thread_manager/thread_manager.cc", - "src/cpp/util/byte_buffer_cc.cc", - "src/cpp/util/slice_cc.cc", - "src/cpp/util/status.cc", - "src/cpp/util/string_ref.cc", - "src/cpp/util/time_cc.cc", -] - -GRPCXX_HDRS = [ - "src/cpp/client/create_channel_internal.h", - "src/cpp/common/channel_filter.h", - "src/cpp/server/dynamic_thread_pool.h", - "src/cpp/server/health/default_health_check_service.h", - "src/cpp/server/health/health.pb.h", - "src/cpp/server/thread_pool_interface.h", - "src/cpp/thread_manager/thread_manager.h", -] - -GRPCXX_PUBLIC_HDRS = [ - "include/grpc++/alarm.h", - "include/grpc++/channel.h", - "include/grpc++/client_context.h", - "include/grpc++/completion_queue.h", - "include/grpc++/create_channel.h", - "include/grpc++/create_channel_posix.h", - "include/grpc++/ext/health_check_service_server_builder_option.h", - "include/grpc++/generic/async_generic_service.h", - "include/grpc++/generic/generic_stub.h", - "include/grpc++/grpc++.h", - "include/grpc++/health_check_service_interface.h", - "include/grpc++/impl/call.h", - "include/grpc++/impl/channel_argument_option.h", - "include/grpc++/impl/client_unary_call.h", - "include/grpc++/impl/codegen/core_codegen.h", - "include/grpc++/impl/grpc_library.h", - "include/grpc++/impl/method_handler_impl.h", - "include/grpc++/impl/rpc_method.h", - "include/grpc++/impl/rpc_service_method.h", - "include/grpc++/impl/serialization_traits.h", - "include/grpc++/impl/server_builder_option.h", - "include/grpc++/impl/server_builder_plugin.h", - "include/grpc++/impl/server_initializer.h", - "include/grpc++/impl/service_type.h", - "include/grpc++/impl/sync_cxx11.h", - "include/grpc++/impl/sync_no_cxx11.h", - "include/grpc++/resource_quota.h", - "include/grpc++/security/auth_context.h", - "include/grpc++/security/auth_metadata_processor.h", - "include/grpc++/security/credentials.h", - "include/grpc++/security/server_credentials.h", - "include/grpc++/server.h", - "include/grpc++/server_builder.h", - "include/grpc++/server_context.h", - "include/grpc++/server_posix.h", - "include/grpc++/support/async_stream.h", - "include/grpc++/support/async_unary_call.h", - "include/grpc++/support/byte_buffer.h", - "include/grpc++/support/channel_arguments.h", - "include/grpc++/support/config.h", - "include/grpc++/support/slice.h", - "include/grpc++/support/status.h", - "include/grpc++/support/status_code_enum.h", - "include/grpc++/support/string_ref.h", - "include/grpc++/support/stub_options.h", - "include/grpc++/support/sync_stream.h", - "include/grpc++/support/time.h", -] - grpc_cc_library( name = "grpc++_base", srcs = GRPCXX_SRCS, diff --git a/bazel/cc_grpc_library.bzl b/bazel/cc_grpc_library.bzl index 0600bb9e30..afc5543795 100644 --- a/bazel/cc_grpc_library.bzl +++ b/bazel/cc_grpc_library.bzl @@ -12,9 +12,8 @@ def cc_grpc_library(name, srcs, deps, proto_only, well_known_protos, generate_mo srcs: a single proto_library, which wraps the .proto files with services. deps: a list of C++ proto_library (or cc_proto_library) which provides the compiled code of any message that the services depend on. - well_known_protos: The target from protobuf library that exports well - known protos. Currently it will only work if the value is - "@com_google_protobuf//:well_known_protos" + well_known_protos: Should this library additionally depend on well known + protos use_external: When True the grpc deps are prefixed with //external. This allows grpc to be used as a dependency in other bazel projects. generate_mock: When true GMOCk code for client stub is generated. diff --git a/bazel/generate_cc.bzl b/bazel/generate_cc.bzl index d05509fc15..7fffb58218 100644 --- a/bazel/generate_cc.bzl +++ b/bazel/generate_cc.bzl @@ -57,7 +57,7 @@ def generate_cc_impl(ctx): return struct(files=set(out_files)) -generate_cc = rule( +_generate_cc = rule( attrs = { "srcs": attr.label_list( mandatory = True, @@ -90,3 +90,9 @@ generate_cc = rule( output_to_genfiles = True, implementation = generate_cc_impl, ) + +def generate_cc(well_known_protos, **kwargs): + if well_known_protos: + _generate_cc(well_known_protos="@com_google_protobuf//:well_known_protos", **kwargs) + else: + _generate_cc(**kwargs) diff --git a/bazel/grpc_build_system.bzl b/bazel/grpc_build_system.bzl index 8c29611a22..8057f27a12 100644 --- a/bazel/grpc_build_system.bzl +++ b/bazel/grpc_build_system.bzl @@ -52,7 +52,7 @@ def grpc_proto_plugin(name, srcs = [], deps = []): load("//:bazel/cc_grpc_library.bzl", "cc_grpc_library") -def grpc_proto_library(name, srcs = [], deps = [], well_known_protos = None, +def grpc_proto_library(name, srcs = [], deps = [], well_known_protos = False, has_services = True, use_external = False, generate_mock = False): cc_grpc_library( name = name, @@ -95,11 +95,11 @@ def grpc_cc_binary(name, srcs = [], deps = [], external_deps = [], args = [], da ) def grpc_generate_one_off_targets(): - pass + pass def grpc_sh_test(name, srcs, args = [], data = []): - native.sh_test( - name = name, - srcs = srcs, - args = args, - data = data) + native.sh_test( + name = name, + srcs = srcs, + args = args, + data = data) diff --git a/examples/BUILD b/examples/BUILD index f38c1d9bd9..3e9e508ec2 100644 --- a/examples/BUILD +++ b/examples/BUILD @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +licenses(["notice"]) # 3-clause BSD + package(default_visibility = ["//visibility:public"]) load("//bazel:grpc_build_system.bzl", "grpc_proto_library") diff --git a/include/grpc++/impl/codegen/status.h b/include/grpc++/impl/codegen/status.h index 51fca9fc9f..6f013cf0ca 100644 --- a/include/grpc++/impl/codegen/status.h +++ b/include/grpc++/impl/codegen/status.h @@ -63,6 +63,11 @@ class Status { /// Is the status OK? bool ok() const { return code_ == StatusCode::OK; } + // Ignores any errors. This method does nothing except potentially suppress + // complaints from any tools that are checking that errors are not dropped on + // the floor. + void IgnoreError() const {} + private: StatusCode code_; grpc::string error_message_; diff --git a/src/core/lib/iomgr/timer_manager.c b/src/core/lib/iomgr/timer_manager.c index cb7998db97..b9bea9a2ab 100644 --- a/src/core/lib/iomgr/timer_manager.c +++ b/src/core/lib/iomgr/timer_manager.c @@ -56,7 +56,7 @@ static gpr_timespec g_timed_waiter_deadline; // generation counter to track which thread is waiting for the next timer static uint64_t g_timed_waiter_generation; -static void timer_thread(void *unused); +static void timer_thread(void *completed_thread_ptr); static void gc_completed_threads(void) { if (g_completed_threads != NULL) { @@ -81,10 +81,10 @@ static void start_timer_thread_and_unlock(void) { if (GRPC_TRACER_ON(grpc_timer_check_trace)) { gpr_log(GPR_DEBUG, "Spawn timer thread"); } - gpr_thd_id thd; gpr_thd_options opt = gpr_thd_options_default(); gpr_thd_options_set_joinable(&opt); - gpr_thd_new(&thd, timer_thread, NULL, &opt); + completed_thread *ct = gpr_malloc(sizeof(*ct)); + gpr_thd_new(&ct->t, timer_thread, ct, &opt); } void grpc_timer_manager_tick() { @@ -245,7 +245,7 @@ static void timer_main_loop(grpc_exec_ctx *exec_ctx) { } } -static void timer_thread_cleanup(void) { +static void timer_thread_cleanup(completed_thread *ct) { gpr_mu_lock(&g_mu); // terminate the thread: drop the waiter count, thread count, and let whomever // stopped the threading stuff know that we're done @@ -254,8 +254,6 @@ static void timer_thread_cleanup(void) { if (0 == g_thread_count) { gpr_cv_signal(&g_cv_shutdown); } - completed_thread *ct = gpr_malloc(sizeof(*ct)); - ct->t = gpr_thd_currentid(); ct->next = g_completed_threads; g_completed_threads = ct; gpr_mu_unlock(&g_mu); @@ -264,14 +262,14 @@ static void timer_thread_cleanup(void) { } } -static void timer_thread(void *unused) { +static void timer_thread(void *completed_thread_ptr) { // this threads exec_ctx: we try to run things through to completion here // since it's easy to spin up new threads grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INITIALIZER(0, grpc_never_ready_to_finish, NULL); timer_main_loop(&exec_ctx); grpc_exec_ctx_finish(&exec_ctx); - timer_thread_cleanup(); + timer_thread_cleanup(completed_thread_ptr); } static void start_threads(void) { diff --git a/src/proto/grpc/health/v1/BUILD b/src/proto/grpc/health/v1/BUILD index db04f3798d..6f6779594b 100644 --- a/src/proto/grpc/health/v1/BUILD +++ b/src/proto/grpc/health/v1/BUILD @@ -14,7 +14,13 @@ licenses(["notice"]) # Apache v2 -package(default_visibility = ["//visibility:public"]) +package( + default_visibility = ["//visibility:public"], + features = [ + "-layering_check", + "-parse_headers", + ], +) load("//bazel:grpc_build_system.bzl", "grpc_proto_library") diff --git a/src/proto/grpc/lb/v1/BUILD b/src/proto/grpc/lb/v1/BUILD index 7fbfdfec72..61b28ee3bb 100644 --- a/src/proto/grpc/lb/v1/BUILD +++ b/src/proto/grpc/lb/v1/BUILD @@ -14,7 +14,13 @@ licenses(["notice"]) # Apache v2 -package(default_visibility = ["//visibility:public"]) +package( + default_visibility = ["//visibility:public"], + features = [ + "-layering_check", + "-parse_headers", + ], +) load("//bazel:grpc_build_system.bzl", "grpc_proto_library") diff --git a/src/proto/grpc/reflection/v1alpha/BUILD b/src/proto/grpc/reflection/v1alpha/BUILD index 0d9df4fb47..b60784e9d9 100644 --- a/src/proto/grpc/reflection/v1alpha/BUILD +++ b/src/proto/grpc/reflection/v1alpha/BUILD @@ -14,7 +14,13 @@ licenses(["notice"]) # Apache v2 -package(default_visibility = ["//visibility:public"]) +package( + default_visibility = ["//visibility:public"], + features = [ + "-layering_check", + "-parse_headers", + ], +) load("//bazel:grpc_build_system.bzl", "grpc_proto_library") diff --git a/src/proto/grpc/status/BUILD b/src/proto/grpc/status/BUILD index 10c162d3b2..61688e5f96 100644 --- a/src/proto/grpc/status/BUILD +++ b/src/proto/grpc/status/BUILD @@ -14,7 +14,13 @@ licenses(["notice"]) # Apache v2 -package(default_visibility = ["//visibility:public"]) +package( + default_visibility = ["//visibility:public"], + features = [ + "-layering_check", + "-parse_headers", + ], +) load("//bazel:grpc_build_system.bzl", "grpc_proto_library") @@ -22,5 +28,5 @@ grpc_proto_library( name = "status_proto", srcs = ["status.proto"], has_services = False, - well_known_protos = "@com_google_protobuf//:well_known_protos", + well_known_protos = True, ) diff --git a/src/proto/grpc/testing/BUILD b/src/proto/grpc/testing/BUILD index 0c27297ad1..c8e7d03cb0 100644 --- a/src/proto/grpc/testing/BUILD +++ b/src/proto/grpc/testing/BUILD @@ -14,7 +14,13 @@ licenses(["notice"]) # Apache v2 -package(default_visibility = ["//visibility:public"]) +package( + default_visibility = ["//visibility:public"], + features = [ + "-layering_check", + "-parse_headers", + ], +) load("//bazel:grpc_build_system.bzl", "grpc_proto_library") diff --git a/src/proto/grpc/testing/duplicate/BUILD b/src/proto/grpc/testing/duplicate/BUILD index dd715d8da0..8f91710999 100644 --- a/src/proto/grpc/testing/duplicate/BUILD +++ b/src/proto/grpc/testing/duplicate/BUILD @@ -14,7 +14,13 @@ licenses(["notice"]) # Apache v2 -package(default_visibility = ["//visibility:public"]) +package( + default_visibility = ["//visibility:public"], + features = [ + "-layering_check", + "-parse_headers", + ], +) load("//bazel:grpc_build_system.bzl", "grpc_proto_library") diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/security.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/security.pyx.pxi index 929aaa153c..7decae95bb 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/security.pyx.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/security.pyx.pxi @@ -34,7 +34,7 @@ cdef grpc_ssl_roots_override_result ssl_roots_override_callback( def peer_identities(Call call): cdef grpc_auth_context* auth_context cdef grpc_auth_property_iterator properties - cdef grpc_auth_property* property + cdef const grpc_auth_property* property auth_context = grpc_call_auth_context(call.c_call) if auth_context == NULL: @@ -52,7 +52,7 @@ def peer_identities(Call call): def peer_identity_key(Call call): cdef grpc_auth_context* auth_context - cdef char* c_key + cdef const char* c_key auth_context = grpc_call_auth_context(call.c_call) if auth_context == NULL: return None @@ -67,7 +67,7 @@ def peer_identity_key(Call call): def auth_context(Call call): cdef grpc_auth_context* auth_context cdef grpc_auth_property_iterator properties - cdef grpc_auth_property* property + cdef const grpc_auth_property* property auth_context = grpc_call_auth_context(call.c_call) if auth_context == NULL: diff --git a/test/core/bad_client/BUILD b/test/core/bad_client/BUILD index c23c046061..8cc9dfa77a 100644 --- a/test/core/bad_client/BUILD +++ b/test/core/bad_client/BUILD @@ -14,6 +14,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + licenses(["notice"]) # Apache v2 load(":generate_tests.bzl", "grpc_bad_client_tests") diff --git a/test/core/bad_ssl/BUILD b/test/core/bad_ssl/BUILD index cb285d02cb..e13d43258a 100644 --- a/test/core/bad_ssl/BUILD +++ b/test/core/bad_ssl/BUILD @@ -14,6 +14,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + licenses(["notice"]) # Apache v2 load(":generate_tests.bzl", "grpc_bad_ssl_tests") diff --git a/test/core/census/BUILD b/test/core/census/BUILD index 5de149a99b..988d9a813a 100644 --- a/test/core/census/BUILD +++ b/test/core/census/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + grpc_cc_test( name = "context_test", srcs = ["context_test.c"], diff --git a/test/core/channel/BUILD b/test/core/channel/BUILD index da2389a1d1..18dd112eb7 100644 --- a/test/core/channel/BUILD +++ b/test/core/channel/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + grpc_cc_test( name = "channel_args_test", srcs = ["channel_args_test.c"], diff --git a/test/core/client_channel/BUILD b/test/core/client_channel/BUILD index 41ba792b8c..7fc5b977a9 100644 --- a/test/core/client_channel/BUILD +++ b/test/core/client_channel/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( diff --git a/test/core/client_channel/resolvers/BUILD b/test/core/client_channel/resolvers/BUILD index 59826aea28..8af4a2d5f0 100644 --- a/test/core/client_channel/resolvers/BUILD +++ b/test/core/client_channel/resolvers/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + grpc_cc_test( name = "dns_resolver_connectivity_test", srcs = ["dns_resolver_connectivity_test.c"], diff --git a/test/core/compression/BUILD b/test/core/compression/BUILD index a4fefc5c12..e4432b3b9d 100644 --- a/test/core/compression/BUILD +++ b/test/core/compression/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + grpc_cc_test( name = "algorithm_test", srcs = ["algorithm_test.c"], diff --git a/test/core/end2end/BUILD b/test/core/end2end/BUILD index e27303ce8c..9e788bf7e5 100644 --- a/test/core/end2end/BUILD +++ b/test/core/end2end/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + load(":generate_tests.bzl", "grpc_end2end_tests") grpc_cc_library( diff --git a/test/core/end2end/fuzzers/BUILD b/test/core/end2end/fuzzers/BUILD index a9583d6eb4..bf3a62ad37 100644 --- a/test/core/end2end/fuzzers/BUILD +++ b/test/core/end2end/fuzzers/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( diff --git a/test/core/fling/BUILD b/test/core/fling/BUILD index 39e132fd79..b0d34e9eb0 100644 --- a/test/core/fling/BUILD +++ b/test/core/fling/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_cc_binary( diff --git a/test/core/handshake/BUILD b/test/core/handshake/BUILD index 1c1a8f634e..c93ddc8c21 100644 --- a/test/core/handshake/BUILD +++ b/test/core/handshake/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + grpc_cc_test( name = "client_ssl", srcs = ["client_ssl.c"], diff --git a/test/core/http/BUILD b/test/core/http/BUILD index 85f1c181ec..28313082c6 100644 --- a/test/core/http/BUILD +++ b/test/core/http/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( diff --git a/test/core/iomgr/BUILD b/test/core/iomgr/BUILD index 806c647262..3e6fd37ec6 100644 --- a/test/core/iomgr/BUILD +++ b/test/core/iomgr/BUILD @@ -18,7 +18,13 @@ licenses(["notice"]) # Apache v2 load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") -package(default_visibility = ["//visibility:public"]) # Useful for third party devs to test their io manager implementation. +package( + default_visibility = ["//visibility:public"], # Useful for third party devs to test their io manager implementation. + features = [ + "-layering_check", + "-parse_headers", + ], +) grpc_cc_library( name = "endpoint_tests", diff --git a/test/core/json/BUILD b/test/core/json/BUILD index 764d9bfbc1..36b0897d80 100644 --- a/test/core/json/BUILD +++ b/test/core/json/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( diff --git a/test/core/nanopb/BUILD b/test/core/nanopb/BUILD index d602a7dae3..bdb468867d 100644 --- a/test/core/nanopb/BUILD +++ b/test/core/nanopb/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( diff --git a/test/core/network_benchmarks/BUILD b/test/core/network_benchmarks/BUILD index daef680f62..cee23ecd51 100644 --- a/test/core/network_benchmarks/BUILD +++ b/test/core/network_benchmarks/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + grpc_cc_binary( name = "low_level_ping_pong", srcs = ["low_level_ping_pong.c"], diff --git a/test/core/security/BUILD b/test/core/security/BUILD index 96127e1cd0..241ffc0591 100644 --- a/test/core/security/BUILD +++ b/test/core/security/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( diff --git a/test/core/slice/BUILD b/test/core/slice/BUILD index d8473b792f..9f2225adfb 100644 --- a/test/core/slice/BUILD +++ b/test/core/slice/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( diff --git a/test/core/support/BUILD b/test/core/support/BUILD index 37870d922d..7e142c1e3f 100644 --- a/test/core/support/BUILD +++ b/test/core/support/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + grpc_cc_test( name = "alloc_test", srcs = ["alloc_test.c"], diff --git a/test/core/surface/BUILD b/test/core/surface/BUILD index ad0f3e2b2a..2923927412 100644 --- a/test/core/surface/BUILD +++ b/test/core/surface/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + grpc_cc_test( name = "alarm_test", srcs = ["alarm_test.c"], diff --git a/test/core/transport/BUILD b/test/core/transport/BUILD index f8a99251be..8091cf9c63 100644 --- a/test/core/transport/BUILD +++ b/test/core/transport/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + grpc_cc_test( name = "bdp_estimator_test", srcs = ["bdp_estimator_test.c"], diff --git a/test/core/transport/chttp2/BUILD b/test/core/transport/chttp2/BUILD index 587e0ae4b3..e3989f7059 100644 --- a/test/core/transport/chttp2/BUILD +++ b/test/core/transport/chttp2/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( diff --git a/test/core/tsi/BUILD b/test/core/tsi/BUILD index c9e75d0d17..3bbc50b27e 100644 --- a/test/core/tsi/BUILD +++ b/test/core/tsi/BUILD @@ -16,6 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + grpc_cc_test( name = "transport_security_test", srcs = ["transport_security_test.c"], diff --git a/test/core/util/BUILD b/test/core/util/BUILD index bc3640dda5..9d899bc7be 100644 --- a/test/core/util/BUILD +++ b/test/core/util/BUILD @@ -16,7 +16,13 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_c licenses(["notice"]) # Apache v2 -package(default_visibility = ["//visibility:public"]) +package( + default_visibility = ["//visibility:public"], + features = [ + "-layering_check", + "-parse_headers", + ], +) grpc_cc_library( name = "gpr_test_util", diff --git a/test/cpp/codegen/BUILD b/test/cpp/codegen/BUILD index 984440e455..4780800645 100644 --- a/test/cpp/codegen/BUILD +++ b/test/cpp/codegen/BUILD @@ -16,6 +16,13 @@ licenses(["notice"]) # Apache v2 load("//bazel:grpc_build_system.bzl", "grpc_cc_test") +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + grpc_cc_test( name = "codegen_test_full", srcs = ["codegen_test_full.cc"], diff --git a/test/cpp/common/BUILD b/test/cpp/common/BUILD index ae287a4c93..bd1173322a 100644 --- a/test/cpp/common/BUILD +++ b/test/cpp/common/BUILD @@ -16,6 +16,13 @@ licenses(["notice"]) # Apache v2 load("//bazel:grpc_build_system.bzl", "grpc_cc_test") +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + grpc_cc_test( name = "alarm_cpp_test", srcs = ["alarm_cpp_test.cc"], diff --git a/test/cpp/end2end/BUILD b/test/cpp/end2end/BUILD index ac742c2921..27c5492c17 100644 --- a/test/cpp/end2end/BUILD +++ b/test/cpp/end2end/BUILD @@ -16,10 +16,17 @@ licenses(["notice"]) # Apache v2 load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test") -package(default_visibility=["//visibility:public"]) # Allows external users to implement end2end tests. +package( + default_visibility=["//visibility:public"], # Allows external users to implement end2end tests. + features = [ + "-layering_check", + "-parse_headers", + ], +) grpc_cc_library( name = "test_service_impl", + testonly = True, srcs = ["test_service_impl.cc"], hdrs = ["test_service_impl.h"], deps = [ diff --git a/test/cpp/end2end/grpclb_end2end_test.cc b/test/cpp/end2end/grpclb_end2end_test.cc index 4f839f7788..a8ac631fbd 100644 --- a/test/cpp/end2end/grpclb_end2end_test.cc +++ b/test/cpp/end2end/grpclb_end2end_test.cc @@ -32,7 +32,6 @@ #include <grpc/support/string_util.h> #include <grpc/support/thd.h> #include <grpc/support/time.h> -#include <gtest/gtest.h> extern "C" { #include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h" @@ -46,6 +45,8 @@ extern "C" { #include "src/proto/grpc/lb/v1/load_balancer.grpc.pb.h" #include "src/proto/grpc/testing/echo.grpc.pb.h" +#include <gtest/gtest.h> + // TODO(dgq): Other scenarios in need of testing: // - Send a serverlist with faulty ip:port addresses (port > 2^16, etc). // - Test reception of invalid serverlist diff --git a/test/cpp/end2end/mock_test.cc b/test/cpp/end2end/mock_test.cc index 8ca91363d8..0b63c25055 100644 --- a/test/cpp/end2end/mock_test.cc +++ b/test/cpp/end2end/mock_test.cc @@ -19,7 +19,6 @@ #include <climits> #include <thread> -#include <gmock/gmock.h> #include <grpc++/channel.h> #include <grpc++/client_context.h> #include <grpc++/create_channel.h> @@ -31,14 +30,15 @@ #include <grpc/support/thd.h> #include <grpc/support/time.h> -#include <grpc++/test/mock_stream.h> - #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h" #include "src/proto/grpc/testing/echo.grpc.pb.h" #include "src/proto/grpc/testing/echo_mock.grpc.pb.h" #include "test/core/util/port.h" #include "test/core/util/test_config.h" +#include <grpc++/test/mock_stream.h> + +#include <gmock/gmock.h> #include <gtest/gtest.h> #include <iostream> diff --git a/test/cpp/interop/BUILD b/test/cpp/interop/BUILD index 93e01fee4b..0de5a6f4da 100644 --- a/test/cpp/interop/BUILD +++ b/test/cpp/interop/BUILD @@ -14,7 +14,16 @@ licenses(["notice"]) # Apache v2 -cc_library( +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + +grpc_cc_library( name = "server_helper_lib", srcs = [ "server_helper.cc", @@ -22,21 +31,35 @@ cc_library( hdrs = [ "server_helper.h", ], + external_deps = [ + "gflags", + ], + language = "C++", deps = [ "//test/cpp/util:test_util", - "//external:gflags", ], ) -cc_binary( +grpc_cc_binary( name = "interop_server", srcs = [ - "interop_server.cc", "interop_server_bootstrap.cc", ], + language = "C++", deps = [ - ":server_helper_lib", + ":interop_server_lib", "//:grpc++", + ], +) + +grpc_cc_library( + name = "interop_server_lib", + srcs = [ + "interop_server.cc", + ], + language = "C++", + deps = [ + ":server_helper_lib", "//src/proto/grpc/testing:empty_proto", "//src/proto/grpc/testing:messages_proto", "//src/proto/grpc/testing:test_proto", @@ -44,7 +67,7 @@ cc_binary( ], ) -cc_library( +grpc_cc_library( name = "client_helper_lib", srcs = [ "client_helper.cc", @@ -54,22 +77,64 @@ cc_library( "client_helper.h", "interop_client.h", ], + language = "C++", deps = [ - "//test/cpp/util:test_util", "//src/proto/grpc/testing:empty_proto", "//src/proto/grpc/testing:messages_proto", "//src/proto/grpc/testing:test_proto", "//test/core/security:oauth2_utils", "//test/cpp/util:test_config", + "//test/cpp/util:test_util", ], ) -cc_binary( +grpc_cc_binary( name = "interop_client", srcs = [ "client.cc", ], deps = [ ":client_helper_lib", + "//:grpc++", + ], +) + +grpc_cc_binary( + name = "reconnect_interop_client", + srcs = [ + "reconnect_interop_client.cc", + ], + deps = [ + ":client_helper_lib", + "//:grpc++", + "//test/core/util:grpc_test_util", + ], +) + +grpc_cc_binary( + name = "reconnect_interop_server", + srcs = [ + "reconnect_interop_server.cc", + ], + language = "C++", + deps = [ + ":interop_server_lib", + "//:grpc++", + "//test/core/util:grpc_test_util", + ], +) + +grpc_cc_binary( + name = "stress_test", + srcs = [ + "stress_interop_client.cc", + "stress_interop_client.h", + "stress_test.cc", + ], + deps = [ + ":client_helper_lib", + "//:grpc++", + "//test/cpp/util:metrics_server_lib", + "//test/cpp/util:test_config", ], ) diff --git a/test/cpp/microbenchmarks/BUILD b/test/cpp/microbenchmarks/BUILD index 10df1cb781..5e1bcee89f 100644 --- a/test/cpp/microbenchmarks/BUILD +++ b/test/cpp/microbenchmarks/BUILD @@ -16,6 +16,13 @@ licenses(["notice"]) # Apache v2 load("//bazel:grpc_build_system.bzl", "grpc_cc_test", "grpc_cc_library") +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + grpc_cc_test( name = "noop-benchmark", srcs = ["noop-benchmark.cc"], diff --git a/test/cpp/qps/BUILD b/test/cpp/qps/BUILD index ed2f9edac1..93fb53446c 100644 --- a/test/cpp/qps/BUILD +++ b/test/cpp/qps/BUILD @@ -16,6 +16,13 @@ licenses(["notice"]) # Apache v2 load("//bazel:grpc_build_system.bzl", "grpc_cc_test", "grpc_cc_library", "grpc_cc_binary") +package( + features = [ + "-layering_check", + "-parse_headers", + ], +) + grpc_cc_library( name = "parse_json", srcs = ["parse_json.cc"], @@ -52,9 +59,6 @@ grpc_cc_library( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], - external_deps = [ - "gtest", - ], ) grpc_cc_library( diff --git a/test/cpp/qps/client_sync.cc b/test/cpp/qps/client_sync.cc index 6b934920df..5d212f1acc 100644 --- a/test/cpp/qps/client_sync.cc +++ b/test/cpp/qps/client_sync.cc @@ -140,7 +140,7 @@ class SynchronousStreamingClient : public SynchronousClient { if (*stream) { // forcibly cancel the streams, then finish context_[i].TryCancel(); - (*stream)->Finish(); + (*stream)->Finish().IgnoreError(); // don't log any error message on !ok since this was canceled } }); diff --git a/test/cpp/util/BUILD b/test/cpp/util/BUILD index 6db61abfda..33240f6f69 100644 --- a/test/cpp/util/BUILD +++ b/test/cpp/util/BUILD @@ -14,9 +14,15 @@ licenses(["notice"]) # Apache v2 -load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_binary") +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_binary", "grpc_cc_test") -package(default_visibility = ["//visibility:public"]) +package( + default_visibility = ["//visibility:public"], + features = [ + "-layering_check", + "-parse_headers", + ], +) # The following builds a shared-object to confirm that grpc++_unsecure # builds properly. Build-only is sufficient here @@ -126,19 +132,21 @@ grpc_cc_library( ], ) -cc_test( +grpc_cc_test( name = "error_details_test", srcs = [ "error_details_test.cc", ], deps = [ "//:grpc++_error_details", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", ], + external_deps = [ + "gtest", + ], ) -cc_binary( +grpc_cc_binary( name = "grpc_cli", srcs = [ "cli_call.cc", @@ -160,7 +168,9 @@ cc_binary( ], deps = [ "//:grpc++", - "//external:gflags", "//src/proto/grpc/reflection/v1alpha:reflection_proto", ], + external_deps = [ + "gflags", + ], ) |