|  | # Conformance testing for Protobuf. | 
|  |  | 
|  | load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "objc_library") | 
|  | load( | 
|  | "@rules_pkg//pkg:mappings.bzl", | 
|  | "pkg_filegroup", | 
|  | "pkg_files", | 
|  | "strip_prefix", | 
|  | ) | 
|  | load("@rules_ruby//ruby:defs.bzl", "ruby_binary") | 
|  | load("//:protobuf.bzl", "internal_csharp_proto_library", "internal_objc_proto_library", "internal_php_proto_library", "internal_py_proto_library", "internal_ruby_proto_library") | 
|  | load("//bazel:cc_proto_library.bzl", "cc_proto_library") | 
|  | load("//build_defs:internal_shell.bzl", "inline_sh_binary") | 
|  | load("//ruby:defs.bzl", "internal_ruby_proto_library") | 
|  |  | 
|  | exports_files([ | 
|  | "bazel_conformance_test_runner.sh", | 
|  | "failure_list_cpp.txt", | 
|  | "failure_list_csharp.txt", | 
|  | "failure_list_java.txt", | 
|  | "failure_list_java_lite.txt", | 
|  | "failure_list_objc.txt", | 
|  | "failure_list_php.txt", | 
|  | "failure_list_php_c.txt", | 
|  | "failure_list_python.txt", | 
|  | "failure_list_python_cpp.txt", | 
|  | "failure_list_python_upb.txt", | 
|  | "failure_list_ruby.txt", | 
|  | "failure_list_jruby.txt", | 
|  | "failure_list_jruby_ffi.txt", | 
|  | "text_format_failure_list_cpp.txt", | 
|  | "text_format_failure_list_java.txt", | 
|  | "text_format_failure_list_java_lite.txt", | 
|  | "text_format_failure_list_php.txt", | 
|  | "text_format_failure_list_php_c.txt", | 
|  | "text_format_failure_list_python.txt", | 
|  | "text_format_failure_list_python_cpp.txt", | 
|  | "text_format_failure_list_python_upb.txt", | 
|  | ]) | 
|  |  | 
|  | cc_proto_library( | 
|  | name = "test_messages_proto2_proto_cc", | 
|  | deps = ["//src/google/protobuf:test_messages_proto2_proto"], | 
|  | ) | 
|  |  | 
|  | cc_proto_library( | 
|  | name = "test_messages_proto3_proto_cc", | 
|  | deps = ["//src/google/protobuf:test_messages_proto3_proto"], | 
|  | ) | 
|  |  | 
|  | proto_library( | 
|  | name = "conformance_proto", | 
|  | srcs = ["conformance.proto"], | 
|  | visibility = ["//visibility:public"], | 
|  | ) | 
|  |  | 
|  | cc_proto_library( | 
|  | name = "conformance_cc_proto", | 
|  | deps = [":conformance_proto"], | 
|  | ) | 
|  |  | 
|  | internal_csharp_proto_library( | 
|  | name = "conformance_csharp_proto", | 
|  | srcs = ["conformance.proto"], | 
|  | visibility = [ | 
|  | "//csharp:__subpackages__", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | java_proto_library( | 
|  | name = "conformance_java_proto", | 
|  | visibility = [ | 
|  | "//java:__subpackages__", | 
|  | ], | 
|  | deps = [":conformance_proto"], | 
|  | ) | 
|  |  | 
|  | java_lite_proto_library( | 
|  | name = "conformance_java_proto_lite", | 
|  | visibility = [ | 
|  | "//java:__subpackages__", | 
|  | ], | 
|  | deps = [":conformance_proto"], | 
|  | ) | 
|  |  | 
|  | internal_objc_proto_library( | 
|  | name = "conformance_objc_proto", | 
|  | srcs = ["conformance.proto"], | 
|  | visibility = [ | 
|  | "//conformance:__pkg__", | 
|  | "//objc:__pkg__", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | internal_py_proto_library( | 
|  | name = "conformance_py_proto", | 
|  | srcs = ["conformance.proto"], | 
|  | srcs_version = "PY2AND3", | 
|  | visibility = [ | 
|  | "//python:__subpackages__", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | internal_php_proto_library( | 
|  | name = "conformance_php_proto", | 
|  | srcs = ["conformance.proto"], | 
|  | outs = [ | 
|  | "Conformance/ConformanceRequest.php", | 
|  | "Conformance/ConformanceResponse.php", | 
|  | "Conformance/FailureSet.php", | 
|  | "Conformance/JspbEncodingConfig.php", | 
|  | "Conformance/TestCategory.php", | 
|  | "Conformance/WireFormat.php", | 
|  | "GPBMetadata/Conformance.php", | 
|  | ], | 
|  | visibility = [ | 
|  | "//conformance:__pkg__", | 
|  | "//php:__pkg__", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | internal_ruby_proto_library( | 
|  | name = "conformance_ruby_proto", | 
|  | srcs = ["conformance.proto"], | 
|  | visibility = [ | 
|  | "//conformance:__pkg__", | 
|  | "//ruby:__pkg__", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | cc_library( | 
|  | name = "conformance_test", | 
|  | testonly = 1, | 
|  | srcs = [ | 
|  | "conformance_test.cc", | 
|  | "conformance_test_runner.cc", | 
|  | ], | 
|  | hdrs = [ | 
|  | "conformance_test.h", | 
|  | ], | 
|  | includes = ["."], | 
|  | deps = [ | 
|  | ":conformance_cc_proto", | 
|  | "//src/google/protobuf", | 
|  | "//src/google/protobuf:descriptor_legacy", | 
|  | "//src/google/protobuf:protobuf_lite", | 
|  | "//src/google/protobuf/util:differencer", | 
|  | "//src/google/protobuf/util:json_util", | 
|  | "//src/google/protobuf/util:type_resolver", | 
|  | "@com_google_absl//absl/container:btree", | 
|  | "@com_google_absl//absl/container:flat_hash_set", | 
|  | "@com_google_absl//absl/log:absl_check", | 
|  | "@com_google_absl//absl/log:absl_log", | 
|  | "@com_google_absl//absl/strings", | 
|  | "@com_google_absl//absl/strings:str_format", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | cc_library( | 
|  | name = "binary_json_conformance_suite", | 
|  | testonly = 1, | 
|  | srcs = ["binary_json_conformance_suite.cc"], | 
|  | hdrs = ["binary_json_conformance_suite.h"], | 
|  | deps = [ | 
|  | ":conformance_cc_proto", | 
|  | ":conformance_test", | 
|  | ":test_messages_proto2_proto_cc", | 
|  | ":test_messages_proto3_proto_cc", | 
|  | "//conformance/test_protos:test_messages_edition2023_cc_proto", | 
|  | "//editions:test_messages_proto2_editions_cc_proto", | 
|  | "//editions:test_messages_proto3_editions_cc_proto", | 
|  | "//src/google/protobuf", | 
|  | "//src/google/protobuf:protobuf_lite", | 
|  | "//src/google/protobuf/json", | 
|  | "//src/google/protobuf/util:type_resolver", | 
|  | "@com_google_absl//absl/log:absl_check", | 
|  | "@com_google_absl//absl/log:absl_log", | 
|  | "@com_google_absl//absl/log:die_if_null", | 
|  | "@com_google_absl//absl/status", | 
|  | "@com_google_absl//absl/strings", | 
|  | "@com_google_absl//absl/strings:str_format", | 
|  | "@jsoncpp", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | cc_library( | 
|  | name = "text_format_conformance_suite", | 
|  | testonly = 1, | 
|  | srcs = ["text_format_conformance_suite.cc"], | 
|  | hdrs = ["text_format_conformance_suite.h"], | 
|  | deps = [ | 
|  | ":conformance_test", | 
|  | ":test_messages_proto2_proto_cc", | 
|  | ":test_messages_proto3_proto_cc", | 
|  | "//conformance/test_protos:test_messages_edition2023_cc_proto", | 
|  | "//editions:test_messages_proto2_editions_cc_proto", | 
|  | "//editions:test_messages_proto3_editions_cc_proto", | 
|  | "//src/google/protobuf", | 
|  | "@com_google_absl//absl/log:absl_log", | 
|  | "@com_google_absl//absl/log:die_if_null", | 
|  | "@com_google_absl//absl/strings", | 
|  | "@com_google_absl//absl/strings:str_format", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | cc_binary( | 
|  | name = "conformance_test_runner", | 
|  | testonly = 1, | 
|  | srcs = ["conformance_test_main.cc"], | 
|  | visibility = ["//visibility:public"], | 
|  | deps = [ | 
|  | ":binary_json_conformance_suite", | 
|  | ":conformance_test", | 
|  | ":text_format_conformance_suite", | 
|  | "@com_google_absl//absl/strings:str_format", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | cc_binary( | 
|  | name = "conformance_cpp", | 
|  | testonly = 1, | 
|  | srcs = ["conformance_cpp.cc"], | 
|  | visibility = ["//src:__subpackages__"], | 
|  | deps = [ | 
|  | ":conformance_cc_proto", | 
|  | "//:protobuf", | 
|  | "//:test_messages_proto2_cc_proto", | 
|  | "//:test_messages_proto3_cc_proto", | 
|  | "//conformance/test_protos:test_messages_edition2023_cc_proto", | 
|  | "//editions:test_messages_proto2_editions_cc_proto", | 
|  | "//editions:test_messages_proto3_editions_cc_proto", | 
|  | "//src/google/protobuf", | 
|  | "//src/google/protobuf:port", | 
|  | "//src/google/protobuf:protobuf_lite", | 
|  | "//src/google/protobuf/stubs", | 
|  | "//src/google/protobuf/util:json_util", | 
|  | "//src/google/protobuf/util:type_resolver", | 
|  | "@com_google_absl//absl/log:absl_check", | 
|  | "@com_google_absl//absl/log:absl_log", | 
|  | "@com_google_absl//absl/status", | 
|  | "@com_google_absl//absl/status:statusor", | 
|  | "@com_google_absl//absl/strings", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | java_binary( | 
|  | name = "conformance_java", | 
|  | testonly = 1, | 
|  | srcs = ["ConformanceJava.java"], | 
|  | main_class = "ConformanceJava", | 
|  | visibility = [ | 
|  | "//java:__subpackages__", | 
|  | ], | 
|  | deps = [ | 
|  | ":conformance_java_proto", | 
|  | "//:protobuf_java", | 
|  | "//:protobuf_java_util", | 
|  | "//:test_messages_proto2_java_proto", | 
|  | "//:test_messages_proto3_java_proto", | 
|  | "//conformance/test_protos:test_messages_edition2023_java_proto", | 
|  | "//editions:test_messages_proto2_editions_java_proto", | 
|  | "//editions:test_messages_proto3_editions_java_proto", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | java_binary( | 
|  | name = "conformance_java_lite", | 
|  | testonly = 1, | 
|  | srcs = ["ConformanceJavaLite.java"], | 
|  | main_class = "ConformanceJavaLite", | 
|  | visibility = [ | 
|  | "//java:__subpackages__", | 
|  | ], | 
|  | deps = [ | 
|  | ":conformance_java_proto_lite", | 
|  | "//:protobuf_java_util", | 
|  | "//:protobuf_javalite", | 
|  | "//:test_messages_proto2_java_proto_lite", | 
|  | "//:test_messages_proto3_java_proto_lite", | 
|  | "//conformance/test_protos:test_messages_edition2023_java_proto_lite", | 
|  | "//editions:test_messages_proto2_editions_java_proto_lite", | 
|  | "//editions:test_messages_proto3_editions_java_proto_lite", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | py_binary( | 
|  | name = "conformance_python", | 
|  | testonly = 1, | 
|  | srcs = ["conformance_python.py"], | 
|  | imports = [ | 
|  | "..", | 
|  | "../python", | 
|  | ], | 
|  | srcs_version = "PY2AND3", | 
|  | visibility = ["//python:__subpackages__"], | 
|  | deps = [ | 
|  | ":conformance_py_proto", | 
|  | "//:protobuf_python", | 
|  | "//conformance/test_protos:test_messages_edition2023_py_proto", | 
|  | "//editions:test_messages_proto2_editions_py_pb2", | 
|  | "//editions:test_messages_proto3_editions_py_pb2", | 
|  | "//python:_message",  # Make upb visible if we need it. | 
|  | "//python:conformance_test_py_proto", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | inline_sh_binary( | 
|  | name = "conformance_php", | 
|  | testonly = 1, | 
|  | srcs = [ | 
|  | "autoload.php", | 
|  | "conformance_php.php", | 
|  | ], | 
|  | cmd = """ | 
|  | php -d include_path=conformance:src/google/protobuf \\ | 
|  | -d auto_prepend_file=$(rootpath autoload.php) \\ | 
|  | $(rootpath conformance_php.php) | 
|  | """, | 
|  | visibility = ["//php:__subpackages__"], | 
|  | deps = [ | 
|  | ":conformance_php_proto", | 
|  | "//:test_messages_proto3_php_proto", | 
|  | "//php:source_files", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | inline_sh_binary( | 
|  | name = "conformance_php_c", | 
|  | testonly = 1, | 
|  | srcs = [ | 
|  | "conformance_php.php", | 
|  | "//php:extension", | 
|  | ], | 
|  | cmd = """ | 
|  | php -dextension=$(rootpath //php:extension) \\ | 
|  | -d include_path=conformance:src/google/protobuf:editions/golden \\ | 
|  | $(rootpath conformance_php.php) | 
|  | """, | 
|  | visibility = ["//php:__subpackages__"], | 
|  | deps = [ | 
|  | ":conformance_php_proto", | 
|  | "//:test_messages_proto3_php_proto", | 
|  | "//editions:test_messages_proto3_editions_php_proto", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | inline_sh_binary( | 
|  | name = "conformance_csharp", | 
|  | testonly = 1, | 
|  | srcs = ["//csharp/src/Google.Protobuf.Conformance:conformance_dll"], | 
|  | cmd = "dotnet $(rootpath //csharp/src/Google.Protobuf.Conformance:conformance_dll)", | 
|  | visibility = ["//csharp:__subpackages__"], | 
|  | deps = [ | 
|  | "//conformance/test_protos:test_messages_edition2023_csharp_proto", | 
|  | "//csharp/src/Google.Protobuf.Conformance:conformance_runfiles", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | objc_library( | 
|  | name = "conformance_objc_lib", | 
|  | testonly = 1, | 
|  | non_arc_srcs = ["conformance_objc.m"], | 
|  | # See https://github.com/bazelbuild/bazel/issues/12897. | 
|  | tags = ["manual"], | 
|  | deps = [ | 
|  | ":conformance_objc_proto", | 
|  | "//:test_messages_proto2_objc_proto", | 
|  | "//:test_messages_proto3_objc_proto", | 
|  | "//conformance/test_protos:test_messages_edition2023_objc_proto", | 
|  | "//editions:test_messages_proto2_editions_objc_proto", | 
|  | "//editions:test_messages_proto3_editions_objc_proto", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | cc_binary( | 
|  | name = "conformance_objc", | 
|  | testonly = 1, | 
|  | # See https://github.com/bazelbuild/bazel/issues/12897. | 
|  | tags = ["manual"], | 
|  | visibility = ["//objectivec:__subpackages__"], | 
|  | deps = [":conformance_objc_lib"], | 
|  | ) | 
|  |  | 
|  | ruby_binary( | 
|  | name = "conformance_ruby", | 
|  | testonly = True, | 
|  | srcs = ["conformance_ruby.rb"], | 
|  | visibility = ["//ruby:__subpackages__"], | 
|  | deps = [ | 
|  | ":conformance_ruby_proto", | 
|  | "//conformance/test_protos:test_messages_edition2023_ruby_proto", | 
|  | "//ruby:conformance_editions_test_ruby_proto", | 
|  | "//ruby:conformance_test_ruby_proto", | 
|  | "//ruby:protobuf", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | ################################################################################ | 
|  | # Distribution files | 
|  | ################################################################################ | 
|  |  | 
|  | filegroup( | 
|  | name = "all_files", | 
|  | srcs = glob(["**/*"]), | 
|  | visibility = ["//src/google/protobuf/compiler/csharp:__pkg__"], | 
|  | ) | 
|  |  | 
|  | pkg_files( | 
|  | name = "dist_files", | 
|  | srcs = glob( | 
|  | ["**/*"], | 
|  | exclude = [ | 
|  | # Handled by dist_scripts: | 
|  | "bazel_conformance_test_runner.sh", | 
|  |  | 
|  | # The following are not in autotools dist: | 
|  | "autoload.php", | 
|  | "failure_list_jruby.txt", | 
|  | "update_failure_list.py", | 
|  | ], | 
|  | ), | 
|  | strip_prefix = strip_prefix.from_root(""), | 
|  | visibility = ["//pkg:__pkg__"], | 
|  | ) | 
|  |  | 
|  | pkg_filegroup( | 
|  | name = "all_dist_files", | 
|  | srcs = [ | 
|  | ":dist_files", | 
|  | ], | 
|  | visibility = ["//pkg:__pkg__"], | 
|  | ) |