1e0be26b7e
Partially completes #1068, and will allow mobile clients to drop their separate diff-match-patch imports. Does not yet try to handle case folding or combining-char stripping, and leaves some of the outer HTML wrapping up to the frontend for now. The logic for rendering the provided string has changed: missing chars are now only inserted if they follow a correct section, and the original text is shown instead of hyphens. This is an experiment, and can be changed if it's not well received.
174 lines
4.5 KiB
Python
174 lines
4.5 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:defs.bzl", "rust_library", "rust_test")
|
|
load("@rules_rust//cargo:cargo_build_script.bzl", "cargo_build_script")
|
|
load(":rustfmt.bzl", "rustfmt_fix", "rustfmt_test")
|
|
load("//ts/sql_format:defs.bzl", "sql_format")
|
|
|
|
# Build script
|
|
#######################
|
|
|
|
cargo_build_script(
|
|
name = "build_script",
|
|
srcs = glob(["build/*.rs"]),
|
|
build_script_env = {
|
|
"PROTO_TOP": "$(location //proto:.top_level)",
|
|
"PROTOC": "$(location @com_google_protobuf//:protoc)",
|
|
"RSLIB_FTL_ROOT": "$(location @rslib_ftl//:l10n.toml)",
|
|
"EXTRA_FTL_ROOT": "$(location @extra_ftl//:l10n.toml)",
|
|
"BAZEL": "1",
|
|
},
|
|
crate_root = "build/main.rs",
|
|
data = [
|
|
"//ftl",
|
|
"//proto",
|
|
"@com_google_protobuf//:protoc",
|
|
# bazel requires us to list these out separately
|
|
"//proto:.top_level",
|
|
"@rslib_ftl//:l10n.toml",
|
|
"@extra_ftl//:l10n.toml",
|
|
],
|
|
deps = [
|
|
"//rslib/cargo:prost_build",
|
|
],
|
|
)
|
|
|
|
# Library
|
|
#######################
|
|
|
|
_anki_compile_data = glob([
|
|
"src/**/*.sql",
|
|
"src/**/*.html",
|
|
"src/**/*.css",
|
|
"src/**/*.tex",
|
|
]) + [
|
|
"Cargo.toml", # prevents a warning about num_enum
|
|
"//:buildinfo.txt",
|
|
]
|
|
|
|
_anki_features = [
|
|
"translations",
|
|
]
|
|
|
|
_anki_rustc_env = {
|
|
"BUILDINFO": "$(location //:buildinfo.txt)",
|
|
}
|
|
|
|
rust_library(
|
|
name = "anki",
|
|
srcs = glob([
|
|
"src/**/*.rs",
|
|
]),
|
|
compile_data = _anki_compile_data,
|
|
crate_features = _anki_features,
|
|
proc_macro_deps = [
|
|
"//rslib/cargo:async_trait",
|
|
"//rslib/cargo:serde_derive",
|
|
"//rslib/cargo:serde_repr",
|
|
],
|
|
rustc_env = _anki_rustc_env,
|
|
visibility = ["//visibility:public"],
|
|
deps = [
|
|
":build_script",
|
|
"//rslib/cargo:ammonia",
|
|
"//rslib/cargo:blake3",
|
|
"//rslib/cargo:bytes",
|
|
"//rslib/cargo:chrono",
|
|
"//rslib/cargo:coarsetime",
|
|
"//rslib/cargo:csv",
|
|
"//rslib/cargo:dissimilar",
|
|
"//rslib/cargo:flate2",
|
|
"//rslib/cargo:fluent",
|
|
"//rslib/cargo:fnv",
|
|
"//rslib/cargo:futures",
|
|
"//rslib/cargo:hex",
|
|
"//rslib/cargo:htmlescape",
|
|
"//rslib/cargo:id_tree",
|
|
"//rslib/cargo:intl_memoizer",
|
|
"//rslib/cargo:itertools",
|
|
"//rslib/cargo:lazy_static",
|
|
"//rslib/cargo:nom",
|
|
"//rslib/cargo:num_cpus",
|
|
"//rslib/cargo:num_enum",
|
|
"//rslib/cargo:num_integer",
|
|
"//rslib/cargo:once_cell",
|
|
"//rslib/cargo:pin_project",
|
|
"//rslib/cargo:prost",
|
|
"//rslib/cargo:pulldown_cmark",
|
|
"//rslib/cargo:rand",
|
|
"//rslib/cargo:regex",
|
|
"//rslib/cargo:rusqlite",
|
|
"//rslib/cargo:scopeguard",
|
|
"//rslib/cargo:serde",
|
|
"//rslib/cargo:serde_aux",
|
|
"//rslib/cargo:serde_json",
|
|
"//rslib/cargo:serde_tuple",
|
|
"//rslib/cargo:sha1",
|
|
"//rslib/cargo:slog",
|
|
"//rslib/cargo:slog_async",
|
|
"//rslib/cargo:slog_envlogger",
|
|
"//rslib/cargo:slog_term",
|
|
"//rslib/cargo:strum",
|
|
"//rslib/cargo:tempfile",
|
|
"//rslib/cargo:tokio",
|
|
"//rslib/cargo:tokio_util",
|
|
"//rslib/cargo:unic_langid",
|
|
"//rslib/cargo:unicase",
|
|
"//rslib/cargo:unicode_normalization",
|
|
"//rslib/cargo:unic_ucd_category",
|
|
"//rslib/cargo:utime",
|
|
"//rslib/cargo:zip",
|
|
"//rslib/cargo:zstd",
|
|
"//rslib/cargo:pct_str",
|
|
"//rslib/i18n:anki_i18n",
|
|
] + select({
|
|
# rustls on Linux
|
|
"//platforms:linux_x86_64": ["@reqwest_rustls//:reqwest"],
|
|
"//platforms:linux_arm64": ["@reqwest_rustls//:reqwest"],
|
|
# native tls on other platforms
|
|
"//conditions:default": ["//rslib/cargo:reqwest"],
|
|
}),
|
|
)
|
|
|
|
# Tests
|
|
#######################
|
|
|
|
rust_test(
|
|
name = "anki_tests",
|
|
compile_data = _anki_compile_data,
|
|
crate = ":anki",
|
|
crate_features = _anki_features,
|
|
data = glob([
|
|
"tests/support/**",
|
|
]),
|
|
rustc_env = _anki_rustc_env,
|
|
rustc_flags = [
|
|
"-Dclippy::dbg_macro",
|
|
],
|
|
deps = [
|
|
"//rslib/cargo:env_logger",
|
|
"//rslib/cargo:linkcheck",
|
|
"//rslib/cargo:utime",
|
|
],
|
|
)
|
|
|
|
rustfmt_test(
|
|
name = "format_check",
|
|
srcs = glob([
|
|
"**/*.rs",
|
|
]),
|
|
)
|
|
|
|
rustfmt_fix(
|
|
name = "format",
|
|
srcs = glob([
|
|
"**/*.rs",
|
|
]),
|
|
)
|
|
|
|
sql_format(
|
|
name = "sql_format",
|
|
srcs = glob(["**/*.sql"]),
|
|
)
|