# Protobuf Python runtime # # See also code generation logic under /src/google/protobuf/compiler/python. # # Most users should depend upon public aliases in the root: # //:protobuf_python # //:well_known_types_py_pb2 load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix") load("@rules_proto//proto:defs.bzl", "proto_library") load("@rules_python//python:defs.bzl", "py_library") load("//:protobuf.bzl", "py_proto_library") load("//build_defs:cpp_opts.bzl", "COPTS") load(":internal.bzl", "internal_copy_files") py_library( name = "protobuf_python", data = select({ "//conditions:default": [], ":use_fast_cpp_protos": [ ":google/protobuf/internal/_api_implementation.so", ":google/protobuf/pyext/_message.so", ], }), visibility = ["//:__pkg__"], deps = [ ":python_srcs", ":well_known_types_py_pb2", ], ) config_setting( name = "use_fast_cpp_protos", values = { "define": "use_fast_cpp_protos=true", }, ) py_proto_library( name = "well_known_types_py_pb2", srcs = [":copied_wkt_proto_files"], include = ".", default_runtime = "", protoc = "//:protoc", srcs_version = "PY2AND3", visibility = [ "//:__pkg__", "@upb//:__subpackages__", ], ) internal_copy_files( name = "copied_wkt_proto_files", srcs = [ "//src/google/protobuf:descriptor_proto_srcs", "//:well_known_type_protos", ], strip_prefix = "src", ) cc_binary( name = "google/protobuf/internal/_api_implementation.so", srcs = ["google/protobuf/internal/api_implementation.cc"], copts = COPTS + [ "-DPYTHON_PROTO2_CPP_IMPL_V2", ], linkshared = 1, linkstatic = 1, tags = [ # Exclude this target from wildcard expansion (//...) because it may # not even be buildable. It will be built if it is needed according # to :use_fast_cpp_protos. # https://docs.bazel.build/versions/master/be/common-definitions.html#common-attributes "manual", ], deps = select({ "//conditions:default": [], ":use_fast_cpp_protos": ["//external:python_headers"], }), ) config_setting( name = "allow_oversize_protos", values = { "define": "allow_oversize_protos=true", }, ) cc_binary( name = "google/protobuf/pyext/_message.so", srcs = glob([ "google/protobuf/pyext/*.cc", "google/protobuf/pyext/*.h", ]), copts = COPTS + [ "-DGOOGLE_PROTOBUF_HAS_ONEOF=1", ] + select({ "//conditions:default": [], ":allow_oversize_protos": ["-DPROTOBUF_PYTHON_ALLOW_OVERSIZE_PROTOS=1"], }), includes = ["."], linkshared = 1, linkstatic = 1, tags = [ # Exclude this target from wildcard expansion (//...) because it may # not even be buildable. It will be built if it is needed according # to :use_fast_cpp_protos. # https://docs.bazel.build/versions/master/be/common-definitions.html#common-attributes "manual", ], deps = [ ":proto_api", "//:protobuf", ] + select({ "//conditions:default": [], ":use_fast_cpp_protos": ["//external:python_headers"], }), ) py_library( name = "python_srcs", srcs = glob( [ "google/protobuf/**/*.py", ], exclude = [ "google/protobuf/internal/*_test.py", "google/protobuf/internal/test_util.py", "google/protobuf/internal/import_test_package/__init__.py", ], ), imports = ["python"], srcs_version = "PY2AND3", visibility = [ "//:__pkg__", "@upb//:__subpackages__", ], ) py_library( name = "python_test_srcs", srcs = glob([ "google/protobuf/internal/*_test.py", ]) + [ "google/protobuf/internal/test_util.py", "google/protobuf/internal/import_test_package/__init__.py", ], imports = ["python"], srcs_version = "PY3", visibility = [ "//:__pkg__", "@upb//:__subpackages__", ], ) ################################################################################ # Tests ################################################################################ internal_copy_files( name = "copied_test_proto_files", testonly = 1, srcs = [ "//:test_proto_srcs", "//src/google/protobuf/util:test_proto_srcs", ], strip_prefix = "src", ) py_proto_library( name = "python_common_test_protos", testonly = 1, srcs = [":copied_test_proto_files"], include = ".", default_runtime = "", protoc = "//:protoc", srcs_version = "PY2AND3", visibility = ["//:__pkg__"], deps = [":well_known_types_py_pb2"], ) py_proto_library( name = "python_specific_test_protos", testonly = 1, srcs = glob([ "google/protobuf/internal/*.proto", "google/protobuf/internal/import_test_package/*.proto", ]), include = ".", default_runtime = ":protobuf_python", protoc = "//:protoc", srcs_version = "PY2AND3", visibility = ["//:__pkg__"], deps = [":python_common_test_protos"], ) py_library( name = "python_test_lib", testonly = 1, srcs = [ "google/protobuf/internal/import_test_package/__init__.py", "google/protobuf/internal/test_util.py", ], imports = ["python"], srcs_version = "PY2AND3", deps = [ ":protobuf_python", ":python_common_test_protos", ":python_specific_test_protos", ], ) py_test( name = "descriptor_database_test", srcs = ["google/protobuf/internal/descriptor_database_test.py"], deps = [":python_test_lib"], ) py_test( name = "descriptor_pool_test", srcs = ["google/protobuf/internal/descriptor_pool_test.py"], deps = [":python_test_lib"], ) py_test( name = "descriptor_test", srcs = ["google/protobuf/internal/descriptor_test.py"], imports = ["."], deps = [":python_test_lib"], ) py_test( name = "generator_test", srcs = ["google/protobuf/internal/generator_test.py"], imports = ["."], deps = [":python_test_lib"], ) py_test( name = "json_format_test", srcs = ["google/protobuf/internal/json_format_test.py"], imports = ["."], deps = [":python_test_lib"], ) py_test( name = "message_factory_test", srcs = ["google/protobuf/internal/message_factory_test.py"], imports = ["."], deps = [":python_test_lib"], ) py_test( name = "message_test", srcs = ["google/protobuf/internal/message_test.py"], data = glob(["testdata/golden_pickle_*"]) + [ "//src/google/protobuf:testdata", ], imports = ["."], deps = [":python_test_lib"], ) py_test( name = "proto_builder_test", srcs = ["google/protobuf/internal/proto_builder_test.py"], imports = ["."], deps = [":python_test_lib"], ) py_test( name = "reflection_test", srcs = ["google/protobuf/internal/reflection_test.py"], imports = ["."], deps = [":python_test_lib"], ) py_test( name = "service_reflection_test", srcs = ["google/protobuf/internal/service_reflection_test.py"], imports = ["."], deps = [":python_test_lib"], ) py_test( name = "symbol_database_test", srcs = ["google/protobuf/internal/symbol_database_test.py"], imports = ["."], deps = [":python_test_lib"], ) py_test( name = "text_encoding_test", srcs = ["google/protobuf/internal/text_encoding_test.py"], imports = ["."], deps = [":python_test_lib"], ) py_test( name = "text_format_test", srcs = ["google/protobuf/internal/text_format_test.py"], data = ["//src/google/protobuf:testdata"], imports = ["."], deps = [":python_test_lib"], ) py_test( name = "unknown_fields_test", srcs = ["google/protobuf/internal/unknown_fields_test.py"], imports = ["."], deps = [":python_test_lib"], ) py_test( name = "wire_format_test", srcs = ["google/protobuf/internal/wire_format_test.py"], imports = ["."], deps = [":python_test_lib"], ) cc_library( name = "proto_api", hdrs = ["python/google/protobuf/proto_api.h"], visibility = ["//visibility:public"], deps = [ "//external:python_headers", ], ) ################################################################################ # Distribution files ################################################################################ pkg_files( name = "dist_files", srcs = glob([ "google/**/*.proto", "google/**/*.py", "google/protobuf/internal/*.cc", "google/protobuf/pyext/*.cc", "google/protobuf/pyext/*.h", ]) + [ "BUILD.bazel", "MANIFEST.in", "README.md", "google/protobuf/proto_api.h", "google/protobuf/pyext/README", "google/protobuf/python_protobuf.h", "internal.bzl", "mox.py", "release.sh", "setup.cfg", "setup.py", "stubout.py", "tox.ini", ], strip_prefix = strip_prefix.from_root(""), visibility = ["//pkg:__pkg__"], )