| # Copyright (c) 2009-2022, Google LLC |
| # All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions are met: |
| # * Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # * Redistributions in binary form must reproduce the above copyright |
| # notice, this list of conditions and the following disclaimer in the |
| # documentation and/or other materials provided with the distribution. |
| # * Neither the name of Google LLC nor the |
| # names of its contributors may be used to endorse or promote products |
| # derived from this software without specific prior written permission. |
| # |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| # DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY |
| # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| load("//bazel:py_proto_library.bzl", "py_proto_library") |
| load(":dist.bzl", "py_dist", "py_dist_module") |
| load("@bazel_skylib//lib:selects.bzl", "selects") |
| load("@com_google_protobuf//:protobuf_version.bzl", "PROTOBUF_PYTHON_VERSION") |
| load("@rules_pkg//:mappings.bzl", "pkg_files") |
| load("@rules_pkg//:pkg.bzl", "pkg_tar") |
| load("@rules_python//python:packaging.bzl", "py_wheel") |
| load("@system_python//:version.bzl", "SYSTEM_PYTHON_VERSION") |
| |
| licenses(["notice"]) |
| |
| py_dist_module( |
| name = "message_mod", |
| extension = "//python:_message_binary", |
| module_name = "google._upb._message", |
| ) |
| |
| py_proto_library( |
| name = "well_known_proto_py_pb2", |
| deps = [ |
| "@com_google_protobuf//:any_proto", |
| "@com_google_protobuf//:api_proto", |
| "@com_google_protobuf//:descriptor_proto", |
| "@com_google_protobuf//:duration_proto", |
| "@com_google_protobuf//:empty_proto", |
| "@com_google_protobuf//:field_mask_proto", |
| "@com_google_protobuf//:source_context_proto", |
| "@com_google_protobuf//:struct_proto", |
| "@com_google_protobuf//:timestamp_proto", |
| "@com_google_protobuf//:type_proto", |
| "@com_google_protobuf//:wrappers_proto", |
| ], |
| ) |
| |
| py_proto_library( |
| name = "plugin_py_pb2", |
| deps = ["@com_google_protobuf//:compiler_plugin_proto"], |
| ) |
| |
| config_setting( |
| name = "linux_aarch64_release", |
| values = {"cpu": "linux-aarch_64"}, |
| ) |
| |
| config_setting( |
| name = "linux_aarch64_local", |
| constraint_values = [ |
| "@platforms//os:linux", |
| "@platforms//cpu:aarch64", |
| ], |
| ) |
| |
| config_setting( |
| name = "linux_x86_64_release", |
| values = {"cpu": "linux-x86_64"}, |
| ) |
| |
| config_setting( |
| name = "linux_x86_64_local", |
| constraint_values = [ |
| "@platforms//os:linux", |
| "@platforms//cpu:x86_64", |
| ], |
| ) |
| |
| config_setting( |
| name = "osx_x86_64_release", |
| values = {"cpu": "osx-x86_64"}, |
| ) |
| |
| config_setting( |
| name = "osx_x86_64_local", |
| constraint_values = [ |
| "@platforms//os:osx", |
| "@platforms//cpu:x86_64", |
| ], |
| ) |
| |
| selects.config_setting_group( |
| name = "osx_x86_64", |
| match_any = [ |
| ":osx_x86_64_release", |
| ":osx_x86_64_local", |
| ], |
| ) |
| |
| config_setting( |
| name = "osx_aarch64_release", |
| values = {"cpu": "osx-aarch_64"}, |
| ) |
| |
| config_setting( |
| name = "osx_aarch64_local", |
| constraint_values = [ |
| "@platforms//os:osx", |
| "@platforms//cpu:aarch64", |
| ], |
| ) |
| |
| selects.config_setting_group( |
| name = "osx_aarch64", |
| match_any = [ |
| ":osx_aarch64_release", |
| ":osx_aarch64_local", |
| ], |
| ) |
| |
| config_setting( |
| name = "osx_universal2", |
| values = {"cpu": "osx-universal2"}, |
| ) |
| |
| config_setting( |
| name = "windows_x86_32_release", |
| values = {"cpu": "win32"}, |
| ) |
| |
| config_setting( |
| name = "windows_x86_32_local", |
| constraint_values = [ |
| "@platforms//os:windows", |
| "@platforms//cpu:x86_32", |
| ], |
| ) |
| |
| selects.config_setting_group( |
| name = "windows_x86_32", |
| match_any = [ |
| ":windows_x86_32_release", |
| ":windows_x86_32_local", |
| ], |
| ) |
| |
| config_setting( |
| name = "windows_x86_64_release", |
| values = {"cpu": "win64"}, |
| ) |
| |
| config_setting( |
| name = "windows_x86_64_local", |
| constraint_values = [ |
| "@platforms//os:windows", |
| "@platforms//cpu:x86_64", |
| ], |
| ) |
| |
| selects.config_setting_group( |
| name = "windows_x86_64", |
| match_any = [ |
| ":windows_x86_64_release", |
| ":windows_x86_64_local", |
| ], |
| ) |
| |
| pkg_files( |
| name = "generated_wkt", |
| srcs = [ |
| ":well_known_proto_py_pb2", |
| "//:descriptor_upb_proto", |
| "//:descriptor_upb_proto_reflection", |
| ], |
| prefix = "google/protobuf", |
| ) |
| |
| pkg_files( |
| name = "generated_wkt_compiler", |
| srcs = [ |
| ":plugin_py_pb2", |
| ], |
| prefix = "google/protobuf/compiler", |
| ) |
| |
| pkg_files( |
| name = "utf8_range_source_files", |
| srcs = ["@utf8_range//:utf8_range_srcs"], |
| prefix = "utf8_range", |
| ) |
| |
| # NOTE: This package currently only works for macos and ubuntu, MSVC users |
| # should use a binary wheel. |
| pkg_tar( |
| name = "source_tarball", |
| srcs = [ |
| "MANIFEST.in", |
| "setup.py", |
| ":generated_wkt", |
| ":generated_wkt_compiler", |
| ":utf8_range_source_files", |
| "//:LICENSE", |
| "//:upb_source_files", |
| "//python:message_extension", |
| "//upb/mini_table:source_files", |
| "//upb/util:util_source_files", |
| "@com_google_protobuf//python:python_source_files", |
| ], |
| extension = "tar.gz", |
| package_dir = "protobuf", |
| package_file_name = "protobuf.tar.gz", |
| target_compatible_with = select({ |
| "@system_python//:none": ["@platforms//:incompatible"], |
| "//conditions:default": [], |
| }), |
| ) |
| |
| genrule( |
| name = "source_wheel", |
| srcs = [":source_tarball"], |
| outs = ["protobuf-%s.tar.gz" % PROTOBUF_PYTHON_VERSION], |
| cmd = """ |
| set -eux |
| tar -xzvf $(location :source_tarball) |
| cd protobuf/ |
| python3 setup.py sdist |
| cd .. |
| mv protobuf/dist/*.tar.gz $@ |
| """, |
| target_compatible_with = select({ |
| "@system_python//:none": ["@platforms//:incompatible"], |
| "//conditions:default": [], |
| }), |
| ) |
| |
| py_wheel( |
| name = "binary_wheel", |
| abi = select({ |
| "//python:full_api_3.7": "cp37m", |
| "//python:full_api_3.8": "cp38", |
| "//python:full_api_3.9": "cp39", |
| "//conditions:default": "abi3", |
| }), |
| author = "protobuf@googlegroups.com", |
| author_email = "protobuf@googlegroups.com", |
| classifiers = [ |
| "Programming Language :: Python", |
| "Programming Language :: Python :: 3", |
| "Programming Language :: Python :: 3.7", |
| "Programming Language :: Python :: 3.8", |
| "Programming Language :: Python :: 3.9", |
| "Programming Language :: Python :: 3.10", |
| ], |
| distribution = "protobuf", |
| extra_distinfo_files = { |
| "//:LICENSE": "LICENSE", |
| }, |
| homepage = "https://developers.google.com/protocol-buffers/", |
| license = "3-Clause BSD License", |
| platform = select({ |
| ":linux_x86_64_local": "linux_x86_64", |
| ":linux_x86_64_release": "manylinux2014_x86_64", |
| ":linux_aarch64_local": "linux_aarch64", |
| ":linux_aarch64_release": "manylinux2014_aarch64", |
| ":osx_universal2": "macosx_10_9_universal2", |
| ":osx_aarch64": "macosx_11_0_arm64", |
| ":windows_x86_32": "win32", |
| ":windows_x86_64": "win_amd64", |
| "//conditions:default": "any", |
| }), |
| python_requires = ">=3.7", |
| python_tag = selects.with_or({ |
| ("//python:limited_api_3.7", "//python:full_api_3.7"): "cp37", |
| "//python:full_api_3.8": "cp38", |
| "//python:full_api_3.9": "cp39", |
| "//python:limited_api_3.10": "cp310", |
| "//conditions:default": "cp" + SYSTEM_PYTHON_VERSION, |
| }), |
| strip_path_prefixes = [ |
| "python/dist/", |
| "python/", |
| "src/", |
| ], |
| target_compatible_with = select({ |
| "@system_python//:none": ["@platforms//:incompatible"], |
| "//conditions:default": [], |
| }), |
| version = PROTOBUF_PYTHON_VERSION, |
| deps = [ |
| ":message_mod", |
| ":plugin_py_pb2", |
| ":well_known_proto_py_pb2", |
| "@com_google_protobuf//:python_srcs", |
| ], |
| ) |
| |
| py_wheel( |
| name = "pure_python_wheel", |
| abi = "none", |
| author = "protobuf@googlegroups.com", |
| author_email = "protobuf@googlegroups.com", |
| classifiers = [ |
| "Programming Language :: Python", |
| "Programming Language :: Python :: 3", |
| "Programming Language :: Python :: 3.7", |
| "Programming Language :: Python :: 3.8", |
| "Programming Language :: Python :: 3.9", |
| "Programming Language :: Python :: 3.10", |
| ], |
| distribution = "protobuf", |
| extra_distinfo_files = { |
| "//:LICENSE": "LICENSE", |
| }, |
| homepage = "https://developers.google.com/protocol-buffers/", |
| license = "3-Clause BSD License", |
| platform = "any", |
| python_requires = ">=3.7", |
| python_tag = "py3", |
| strip_path_prefixes = [ |
| "python/", |
| "src/", |
| ], |
| target_compatible_with = select({ |
| "@system_python//:none": ["@platforms//:incompatible"], |
| "//conditions:default": [], |
| }), |
| version = PROTOBUF_PYTHON_VERSION, |
| deps = [ |
| ":plugin_py_pb2", |
| ":well_known_proto_py_pb2", |
| "@com_google_protobuf//:python_srcs", |
| ], |
| ) |
| |
| py_wheel( |
| name = "test_wheel", |
| testonly = True, |
| abi = "none", |
| distribution = "protobuftests", |
| extra_distinfo_files = { |
| "//:LICENSE": "LICENSE", |
| }, |
| platform = "any", |
| python_tag = "py3", |
| strip_path_prefixes = [ |
| "python/", |
| "src/", |
| ], |
| target_compatible_with = select({ |
| "@system_python//:none": ["@platforms//:incompatible"], |
| "//conditions:default": [], |
| }), |
| version = PROTOBUF_PYTHON_VERSION, |
| deps = [ |
| "//python/pb_unit_tests:test_files", |
| "@com_google_protobuf//:python_common_test_protos", |
| "@com_google_protobuf//:python_specific_test_protos", |
| "@com_google_protobuf//:python_test_srcs", |
| "@com_google_protobuf//src/google/protobuf:testdata", |
| ], |
| ) |
| |
| py_dist( |
| name = "dist", |
| binary_wheel = ":binary_wheel", |
| full_api_cpus = [ |
| # TODO(b/231485326): fix win32 build |
| "win32", |
| "win64", |
| ], |
| # Windows needs version-specific wheels until 3.10. |
| full_api_versions = [ |
| "37", |
| "38", |
| "39", |
| ], |
| # Limited API: these wheels will satisfy any Python version >= the |
| # given version. |
| # |
| # Technically the limited API doesn't have the functions we need until |
| # 3.10, but on Linux we can get away with using 3.7 (see ../python_api.h for |
| # details). |
| limited_api_wheels = { |
| # TODO(b/231485326): fix win32 build |
| "win32": "310", |
| "win64": "310", |
| "linux-x86_64": "37", |
| "linux-aarch_64": "37", |
| "osx-universal2": "37", |
| }, |
| pure_python_wheel = ":pure_python_wheel", |
| tags = ["manual"], |
| ) |