| """ | 
 | Generates package naming variables for use with rules_pkg. | 
 | """ | 
 |  | 
 | load("@rules_pkg//:providers.bzl", "PackageVariablesInfo") | 
 | load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain") | 
 | load(":protobuf_version.bzl", "PROTOC_VERSION") | 
 |  | 
 | def _package_naming_impl(ctx): | 
 |   values = {} | 
 |   values["version"] = PROTOC_VERSION | 
 |  | 
 |   # infer from the current cpp toolchain. | 
 |   toolchain = find_cpp_toolchain(ctx) | 
 |   cpu = toolchain.cpu | 
 |   system_name = toolchain.target_gnu_system_name | 
 |  | 
 |   # rename cpus to match what we want artifacts to be | 
 |   if cpu == "systemz": | 
 |     cpu = "s390_64" | 
 |   elif cpu == "aarch64": | 
 |     cpu = "aarch_64" | 
 |   elif cpu == "ppc64": | 
 |     cpu = "ppcle_64" | 
 |  | 
 |   # use the system name to determine the os and then create platform names | 
 |   if "apple" in system_name: | 
 |     values["platform"] = "osx-" + cpu | 
 |   elif "linux" in system_name: | 
 |     values["platform"] = "linux-" + cpu | 
 |   elif "mingw" in system_name: | 
 |     if cpu == "x86_64": | 
 |       values["platform"] = "win64" | 
 |     else: | 
 |       values["platform"] = "win32" | 
 |   else: | 
 |     values["platform"] = "unknown" | 
 |  | 
 |   return PackageVariablesInfo(values = values) | 
 |  | 
 |  | 
 | package_naming = rule( | 
 |   implementation = _package_naming_impl, | 
 |     attrs = { | 
 |       # Necessary data dependency for find_cpp_toolchain. | 
 |       "_cc_toolchain": attr.label(default = Label("@bazel_tools//tools/cpp:current_cc_toolchain")), | 
 |     }, | 
 |     toolchains = ["@bazel_tools//tools/cpp:toolchain_type"], | 
 |     incompatible_use_toolchain_transition = True, | 
 | ) |