anki/rslib/i18n/BUILD.bazel

104 lines
2.4 KiB
Python

# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
load("@rules_rust//rust:rust.bzl", "rust_binary", "rust_library", "rust_test")
load("@rules_rust//cargo:cargo_build_script.bzl", "cargo_build_script")
load("//rslib:rustfmt.bzl", "rustfmt_fix", "rustfmt_test")
# Build script
#######################
cargo_build_script(
name = "build_script",
srcs = glob(["build/*.rs"]),
build_script_env = {
"RSLIB_FTL_ROOT": "$(location @rslib_ftl//:l10n.toml)",
"EXTRA_FTL_ROOT": "$(location @extra_ftl//:l10n.toml)",
},
crate_root = "build/main.rs",
data = [
"//ftl",
# bazel requires us to list these out separately
"@rslib_ftl//:l10n.toml",
"@extra_ftl//:l10n.toml",
],
deps = [
"//rslib/i18n/cargo:fluent",
"//rslib/i18n/cargo:fluent_syntax",
"//rslib/i18n/cargo:inflections",
"//rslib/i18n/cargo:serde",
"//rslib/i18n/cargo:serde_json",
"//rslib/i18n/cargo:unic_langid",
],
)
# Library
#######################
rust_library(
name = "anki_i18n",
srcs = glob([
"src/**/*.rs",
]),
visibility = ["//rslib:__subpackages__"],
deps = [
":build_script",
"//rslib/i18n/cargo:fluent",
"//rslib/i18n/cargo:fluent_bundle",
"//rslib/i18n/cargo:intl_memoizer",
"//rslib/i18n/cargo:num_format",
"//rslib/i18n/cargo:phf",
"//rslib/i18n/cargo:serde",
"//rslib/i18n/cargo:serde_json",
"//rslib/i18n/cargo:unic_langid",
],
)
# Tests
#######################
rust_test(
name = "i18n_tests",
crate = ":anki_i18n",
)
rustfmt_test(
name = "format_check",
srcs = glob([
"**/*.rs",
]),
)
rustfmt_fix(
name = "format",
srcs = glob([
"**/*.rs",
]),
)
# strings.json copying
###########################
# This separate binary is used to copy the generated strings.json into another location
# for downstream consumers
rust_binary(
name = "write_json",
srcs = [
"build/write_json.rs",
],
deps = [
":build_script",
],
)
genrule(
name = "strings_json",
outs = ["strings.json"],
cmd = """\
$(location :write_json) $(location strings.json)""",
tools = [
":write_json",
],
visibility = ["//visibility:public"],
)