blob: df449341e1f70bc642f03fdb253221538b9d014c [file] [log] [blame]
load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
load("@bazel_skylib//rules:write_file.bzl", "write_file")
load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_library", "rust_test")
load(":input_from_different_cfg.bzl", "input_from_different_cfg")
write_file(
name = "gen_src",
out = "src.rs",
content = """
#[cfg(not(generated_file_as_root))]
pub fn forty_two() -> i32 { 42 }
#[cfg(generated_file_as_root)]
mod lib_for_src;
#[cfg(generated_file_as_root)]
pub fn get_forty_two_as_string() -> String {
format!("{}", lib_for_src::forty_two())
}
""".splitlines(),
newline = "unix",
)
write_file(
name = "gen_src_generated",
out = "src/generated.rs",
content = """
mod submodule;
#[cfg(test)]
#[test]
fn test_foo() {
assert_eq!(submodule::foo(), "foo");
}
""".splitlines(),
newline = "unix",
)
rust_library(
name = "libgensrc",
srcs = [
"lib.rs",
"submodule/mod.rs",
":src.rs",
],
edition = "2018",
tags = ["norustfmt"],
)
rust_library(
name = "libgensrc_with_crate_root",
srcs = [
"lib.rs",
"submodule/mod.rs",
":src.rs",
],
crate_root = "lib.rs",
edition = "2018",
tags = ["norustfmt"],
visibility = ["//visibility:public"],
)
rust_library(
name = "libgensrc_as_crate_root",
srcs = [
"lib.rs",
"lib_for_src.rs",
":src.rs",
],
crate_root = ":src.rs",
edition = "2018",
rustc_flags = ["--cfg=generated_file_as_root"],
tags = ["norustfmt"],
)
rust_library(
name = "lib_with_crate_root_in_subdir",
srcs = [
"src/generated.rs",
"src/generated/submodule.rs",
"src/lib.rs",
],
crate_root = "src/lib.rs",
edition = "2018",
tags = ["norustfmt"],
)
rust_test(
name = "lib_with_srcs_in_subdir_test",
srcs = [
"src/generated.rs",
"src/generated/submodule.rs",
"src/lib.rs",
],
edition = "2018",
tags = ["norustfmt"],
)
rust_test(
name = "lib_with_crate_root_in_subdir_test",
crate = "lib_with_crate_root_in_subdir",
edition = "2018",
tags = ["norustfmt"],
)
# When no lib.rs, main.rs file exists, we try to use the file that carries
# the target's name as a crate_root.
rust_library(
name = "src",
srcs = [
"lib_for_src.rs",
":src.rs",
],
edition = "2018",
rustc_flags = ["--cfg=generated_file_as_root"],
tags = ["norustfmt"],
)
rust_test(
name = "gensrc_test",
crate = ":libgensrc_with_crate_root",
edition = "2018",
tags = ["norustfmt"],
)
rust_binary(
name = "print_42",
srcs = [
"main.rs",
":src.rs",
],
edition = "2018",
tags = ["norustfmt"],
)
input_from_different_cfg(
name = "generated_in_different_cfg",
)
filegroup(
name = "input_from_different_cfg",
srcs = [":generated_in_different_cfg"],
output_group = "generated_file",
)
rust_library(
name = "gen_src_in_different_cfg_as_root",
srcs = [":input_from_different_cfg"],
edition = "2018",
tags = ["norustfmt"],
)
rust_test(
name = "gen_src_in_different_cfg_as_root_test",
crate = "gen_src_in_different_cfg_as_root",
edition = "2018",
tags = ["norustfmt"],
)
rust_library(
name = "gen_src_in_different_cfg",
srcs = [
"root.rs",
":input_from_different_cfg",
],
crate_root = "root.rs",
edition = "2018",
tags = ["norustfmt"],
)
rust_test(
name = "gen_src_in_different_cfg_test",
crate = "gen_src_in_different_cfg",
edition = "2018",
tags = ["norustfmt"],
)
bool_flag(
name = "change_cfg",
build_setting_default = False,
)
rust_test(
name = "gen_inputs_external_repo_test",
# This is regression testing a specific failure case for generated files _not_ in the root
# of an external repository.
crate = "@generated_inputs_in_external_repo//lib:generated_inputs_external_repo",
edition = "2021",
)