# Executable targets will output a pattern similar to the following
# cargo 1.53.0 (4369396ce 2021-04-27)
# Also Note, rustc_srcs is too big for this test
_FILES = {
    "cargo": ("--executable", r"^cargo [0-9\.]\+ ([0-9a-z]\+ [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\})"),
    "clippy": ("--executable", r"^clippy [0-9\.]\+ ([0-9a-z]\+ [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\})"),
    "rust_stdlib": ("--files", r"\.rlib"),
    "rustc": ("--executable", r"^rustc [0-9\.]\+ ([0-9a-z]\+ [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\})"),
    "rustc_lib": ("--files", r"rustc_driver"),
    "rustdoc": ("--executable", r"^rustdoc [0-9\.]\+ ([0-9a-z]\+ [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\})"),
    "rustfmt": ("--executable", r"^rustfmt [0-9\.]\+\-stable ([0-9a-z]\+ [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\})"),
}

# Generate a list manifest for all files in the filegroup
[
    genrule(
        name = "{}_manifest_genrule".format(files),
        srcs = ["//rust/toolchain:current_exec_{}_files".format(files)],
        outs = ["{}_manifest".format(files)],
        cmd = "for file in $(rootpaths //rust/toolchain:current_exec_{}_files); do echo $$file >> $@; done".format(files),
    )
    for files in _FILES
    if "--files" in _FILES[files]
]

# Test that all toolchain tools are executable targets
[
    sh_test(
        name = tool + "_test",
        srcs = ["current_exec_files_test.sh"],
        args = [
            "$(rootpath //rust/toolchain:current_exec_{}_files)".format(tool) if "--executable" == arg else "$(rootpath {}_manifest)".format(tool),
            arg,
            "'{}'".format(pattern),
        ],
        data = [
            "//rust/toolchain:current_exec_{}_files".format(tool),
        ] + (
            ["{}_manifest".format(tool)] if "--files" == arg else []
        ),
    )
    for tool, (arg, pattern) in _FILES.items()
]
