|  | # Protobuf C# runtime | 
|  | # | 
|  | # See also code generation logic under /src/google/protobuf/compiler/csharp. | 
|  |  | 
|  | load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix") | 
|  | load("@rules_shell//shell:sh_binary.bzl", "sh_binary") | 
|  | load("//build_defs:internal_shell.bzl", "inline_sh_test") | 
|  | load("//conformance:defs.bzl", "conformance_test") | 
|  | load("//editions:defaults.bzl", "compile_edition_defaults", "embed_edition_defaults") | 
|  | load("//upb/cmake:build_defs.bzl", "staleness_test") | 
|  |  | 
|  | ################################################################################ | 
|  | # Tests | 
|  | ################################################################################ | 
|  |  | 
|  | conformance_test( | 
|  | name = "conformance_test", | 
|  | failure_list = "//conformance:failure_list_csharp.txt", | 
|  | maximum_edition = "2024", | 
|  | testee = "//conformance:conformance_csharp", | 
|  | ) | 
|  |  | 
|  | ################################################################################ | 
|  | # CSharp Runtime | 
|  | ################################################################################ | 
|  |  | 
|  | filegroup( | 
|  | name = "srcs", | 
|  | srcs = glob( | 
|  | [ | 
|  | "keys/*", | 
|  | "protos/*", | 
|  | "src/**/*.cs*",  # .cs and .csproj | 
|  | ], | 
|  | exclude = [ | 
|  | # Exclude generated files. | 
|  | "src/*/obj/**/*", | 
|  | ], | 
|  | ) + [ | 
|  | "src/Directory.Build.props", | 
|  | "src/Google.Protobuf.Test/testprotos.pb", | 
|  | "src/Google.Protobuf.sln", | 
|  | ], | 
|  | visibility = [ | 
|  | "//conformance:__subpackages__", | 
|  | "//csharp:__subpackages__", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | filegroup( | 
|  | name = "wkt_cs_srcs", | 
|  | srcs = [ | 
|  | "src/Google.Protobuf/Reflection/Descriptor.pb.cs", | 
|  | "src/Google.Protobuf/WellKnownTypes/Any.pb.cs", | 
|  | "src/Google.Protobuf/WellKnownTypes/Api.pb.cs", | 
|  | "src/Google.Protobuf/WellKnownTypes/Duration.pb.cs", | 
|  | "src/Google.Protobuf/WellKnownTypes/Empty.pb.cs", | 
|  | "src/Google.Protobuf/WellKnownTypes/FieldMask.pb.cs", | 
|  | "src/Google.Protobuf/WellKnownTypes/SourceContext.pb.cs", | 
|  | "src/Google.Protobuf/WellKnownTypes/Struct.pb.cs", | 
|  | "src/Google.Protobuf/WellKnownTypes/Timestamp.pb.cs", | 
|  | "src/Google.Protobuf/WellKnownTypes/Type.pb.cs", | 
|  | "src/Google.Protobuf/WellKnownTypes/Wrappers.pb.cs", | 
|  | ], | 
|  | visibility = ["//src/google/protobuf/compiler/csharp:__pkg__"], | 
|  | ) | 
|  |  | 
|  | inline_sh_test( | 
|  | name = "tests", | 
|  | srcs = [ | 
|  | "src/Google.Protobuf.sln", | 
|  | ":srcs", | 
|  | "//conformance:conformance_csharp_proto", | 
|  | "//csharp/src/Google.Protobuf.Conformance:srcs", | 
|  | ], | 
|  | cmd = """ | 
|  | cp $(rootpath //conformance:conformance_csharp_proto) `dirname $(location src/Google.Protobuf.sln)`/Google.Protobuf.Conformance/ | 
|  | pushd `dirname $(location src/Google.Protobuf.sln)`/.. | 
|  | dotnet restore src/Google.Protobuf.sln | 
|  | dotnet build -c Release src/Google.Protobuf.sln | 
|  | dotnet test -c Release -f net6.0 src/Google.Protobuf.Test/Google.Protobuf.Test.csproj | 
|  | popd | 
|  | """, | 
|  | ) | 
|  |  | 
|  | ################################################################################ | 
|  | # Distribution files | 
|  | ################################################################################ | 
|  |  | 
|  | pkg_files( | 
|  | name = "dist_files", | 
|  | srcs = [ | 
|  | ".editorconfig", | 
|  | ".gitignore", | 
|  | "BUILD.bazel", | 
|  | "CHANGES.txt", | 
|  | "Google.Protobuf.Tools.nuspec", | 
|  | "Google.Protobuf.Tools.targets", | 
|  | "NuGet.Config", | 
|  | "README.md", | 
|  | "build_packages.bat", | 
|  | "build_release.sh", | 
|  | "build_tools.sh", | 
|  | "buildall.bat", | 
|  | "buildall.sh", | 
|  | "generate_protos.sh", | 
|  | "install_dotnet_sdk.ps1", | 
|  | ":srcs", | 
|  | "//csharp/src/Google.Protobuf.Conformance:dist_files", | 
|  | ], | 
|  | strip_prefix = strip_prefix.from_root(""), | 
|  | visibility = ["//pkg:__pkg__"], | 
|  | ) | 
|  |  | 
|  | sh_binary( | 
|  | name = "release", | 
|  | srcs = ["build_release.sh"], | 
|  | args = ["$(location build_release.sh)"], | 
|  | ) | 
|  |  | 
|  | ################################################################################ | 
|  | # Generated edition defaults (and staleness test) | 
|  | ################################################################################ | 
|  |  | 
|  | compile_edition_defaults( | 
|  | name = "csharp_edition_defaults", | 
|  | srcs = [ | 
|  | "//:descriptor_proto", | 
|  | ], | 
|  | maximum_edition = "2024", | 
|  | minimum_edition = "PROTO2", | 
|  | ) | 
|  |  | 
|  | # TODO Make bazel tests use this output instead of the checked-in one | 
|  | embed_edition_defaults( | 
|  | name = "embedded_csharp_edition_defaults_generate", | 
|  | defaults = "csharp_edition_defaults", | 
|  | encoding = "base64", | 
|  | output = "generated/src/Google.Protobuf/Reflection/FeatureSetDescriptor.g.cs", | 
|  | placeholder = "DEFAULTS_VALUE", | 
|  | template = "src/Google.Protobuf/Reflection/FeatureSetDescriptor.g.cs.template", | 
|  | ) | 
|  |  | 
|  | staleness_test( | 
|  | name = "generated_csharp_defaults_staleness_test", | 
|  | outs = ["src/Google.Protobuf/Reflection/FeatureSetDescriptor.g.cs"], | 
|  | generated_pattern = "generated/%s", | 
|  | tags = ["manual"], | 
|  | target_files = ["src/Google.Protobuf/Reflection/FeatureSetDescriptor.g.cs"], | 
|  | ) |