# Conformance testing for Protobuf. load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_proto_library", "objc_library") load("@rules_python//python:defs.bzl", "py_library") load("//:protobuf.bzl", "internal_py_proto_library", "internal_php_proto_library", "internal_csharp_proto_library", "internal_ruby_proto_library", "internal_objc_proto_library") load("//build_defs:internal_shell.bzl", "inline_sh_binary") load( "@rules_pkg//:mappings.bzl", "pkg_attributes", "pkg_filegroup", "pkg_files", "strip_prefix", ) exports_files([ "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_ruby.txt", "failure_list_jruby.txt", "text_format_failure_list_cpp.txt", "text_format_failure_list_csharp.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_ruby.txt", "text_format_failure_list_jruby.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"], visibility = [ "//python:__subpackages__", ], srcs_version = "PY2AND3", ) 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 = "jsoncpp", srcs = ["third_party/jsoncpp/jsoncpp.cpp"], hdrs = ["third_party/jsoncpp/json.h"], includes = ["."], ) cc_library( name = "conformance_test", srcs = [ "conformance_test.cc", "conformance_test_runner.cc", ], hdrs = [ "conformance_test.h", ], includes = ["."], deps = [":conformance_cc_proto"], ) cc_library( name = "binary_json_conformance_suite", srcs = ["binary_json_conformance_suite.cc"], hdrs = ["binary_json_conformance_suite.h"], deps = [ ":conformance_test", ":jsoncpp", ":test_messages_proto2_proto_cc", ":test_messages_proto3_proto_cc", ], ) cc_library( name = "text_format_conformance_suite", 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", ], ) cc_binary( name = "conformance_test_runner", srcs = ["conformance_test_main.cc"], visibility = ["//visibility:public"], deps = [ ":binary_json_conformance_suite", ":conformance_test", ":text_format_conformance_suite", ], ) cc_binary( name = "conformance_cpp", srcs = ["conformance_cpp.cc"], deps = [ ":conformance_cc_proto", "//:protobuf", "//:test_messages_proto2_cc_proto", "//:test_messages_proto3_cc_proto", ], testonly = 1, visibility = ["//src:__subpackages__"], ) java_binary( name = "conformance_java", srcs = ["ConformanceJava.java"], main_class = "ConformanceJava", deps = [ ":conformance_java_proto", "//:protobuf_java", "//:protobuf_java_util", "//:test_messages_proto2_java_proto", "//:test_messages_proto3_java_proto", ], testonly = 1, visibility = [ "//java:__subpackages__", ], ) java_binary( name = "conformance_java_lite", 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", ], testonly = 1, srcs = ["ConformanceJavaLite.java"], ) py_binary( name = "conformance_python", srcs = ["conformance_python.py"], deps = [ ":conformance_py_proto", "//:protobuf_python", "//python:test_messages_proto2_py_proto", "//python:test_messages_proto3_py_proto", ], imports = [".", "../python"], srcs_version = "PY2AND3", testonly = 1, visibility = ["//python:__subpackages__"], ) inline_sh_binary( name = "conformance_php", srcs = [ "conformance_php.php", "autoload.php", ], deps = [ ":conformance_php_proto", "//php:source_files", "//:test_messages_proto3_php_proto", ], cmd = """ php -d include_path=conformance:src/google/protobuf \\ -d auto_prepend_file=$(rootpath autoload.php) \\ $(rootpath conformance_php.php) """, testonly = 1, visibility = ["//php:__subpackages__"], ) inline_sh_binary( name = "conformance_php_c", srcs = [ "conformance_php.php", "//php:extension", ], deps = [ ":conformance_php_proto", "//:test_messages_proto3_php_proto", ], cmd = """ php -dextension=$(rootpath //php:extension) \\ -d include_path=conformance:src/google/protobuf \\ $(rootpath conformance_php.php) """, testonly = 1, visibility = ["//php:__subpackages__"], ) inline_sh_binary( name = "conformance_csharp", srcs = ["//csharp/src/Google.Protobuf.Conformance:conformance_dll"], deps = [ "//csharp/src/Google.Protobuf.Conformance:conformance_runfiles", ], cmd = "dotnet $(rootpath //csharp/src/Google.Protobuf.Conformance:conformance_dll)", testonly = 1, visibility = ["//csharp:__subpackages__"], ) objc_library( name = "conformance_objc_lib", non_arc_srcs = ["conformance_objc.m"], deps = [ ":conformance_objc_proto", "//:test_messages_proto2_objc_proto", "//:test_messages_proto3_objc_proto", ], testonly = 1, # See https://github.com/bazelbuild/bazel/issues/12897. tags = ["manual"], ) cc_binary( name = "conformance_objc", deps = [":conformance_objc_lib"], testonly = 1, # See https://github.com/bazelbuild/bazel/issues/12897. tags = ["manual"], visibility = ["//objectivec:__subpackages__"], ) inline_sh_binary( name = "conformance_ruby", srcs = ["conformance_ruby.rb"], deps = [ ":conformance_ruby_proto", "//:well_known_ruby_protos", "//:test_messages_proto2_ruby_proto", "//:test_messages_proto3_ruby_proto", "//ruby:protobuf", ], cmd = "RUBYLIB=ruby/lib:conformance:src $(rootpath conformance_ruby.rb)", testonly = 1, visibility = ["//ruby:__subpackages__"], ) ################################################################################ # 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: "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_files( name = "dist_scripts", srcs = ["conformance_test_runner.sh"], attributes = pkg_attributes(mode = "0555"), strip_prefix = strip_prefix.from_root(""), visibility = ["//pkg:__pkg__"], ) pkg_filegroup( name = "all_dist_files", srcs = [ ":dist_files", ":dist_scripts", ], visibility = ["//pkg:__pkg__"], )