load("@rules_pkg//pkg:deb.bzl", "pkg_deb")
load("@rules_pkg//pkg:tar.bzl", "pkg_tar")

filegroup(
    name = "srcs",
    srcs = glob(["**"]),
    visibility = ["//scripts:__subpackages__"],
)

pkg_tar(
    name = "bazel-bin",
    srcs = [
        "//scripts/packages:with-jdk/bazel",
        "//scripts/packages:with-jdk/bazel-real",
    ],
    mode = "0755",
    package_dir = "/usr/bin",
    strip_prefix = "/scripts/packages/with-jdk",
)

pkg_tar(
    name = "bazel-rc",
    srcs = ["//scripts/packages:bazel.bazelrc"],
    mode = "0644",
    package_dir = "/etc",
    strip_prefix = "/scripts/packages",
)

genrule(
    name = "rename-bash-completion",
    srcs = ["//scripts:bash_completion"],
    outs = ["etc/bash_completion.d/bazel"],
    cmd = "cp $< $@",
)

genrule(
    name = "rename-zsh-completion",
    srcs = ["//scripts/zsh_completion:_bazel"],
    outs = ["usr/share/zsh/vendor-completions/_bazel"],
    cmd = "cp $< $@",
)

pkg_tar(
    name = "bazel-completion",
    srcs = [
        ":etc/bash_completion.d/bazel",
        ":usr/share/zsh/vendor-completions/_bazel",
    ],
    mode = "0644",
    strip_prefix = ".",
)

pkg_tar(
    name = "debian-data",
    extension = "tar.gz",
    deps = [
        ":bazel-bin",
        ":bazel-completion",
        ":bazel-rc",
    ],
)

genrule(
    name = "debian_version",
    srcs = ["//scripts/packages:version.txt"],
    outs = [
        "version.txt",
    ],
    cmd =
        "cat $(location //scripts/packages:version.txt) " +
        # Debian package manager does not order our rcs correctly, insert a tilde
        # Non RC version number are not matched by the regex, example translations:
        # 0.1.2         0.1.2
        # 0.1.2rc2      0.1.2~rc2
        # 0.1.2rc2-jdk7 0.1.2~rc2-jdk7
        " | sed -E 's/^([0-9\\.]+)([^0-9\\.].*)$$/\\1~\\2/'" +
        " > $@\n",
)

pkg_deb(
    name = "bazel-debian",
    architecture = "amd64",
    built_using = "bazel",
    conffiles = [
        "/etc/bash_completion.d/bazel",
        "/etc/bazel.bazelrc",
        "/usr/share/zsh/vendor-completions/_bazel",
    ],
    data = ":debian-data",
    depends = [
        # Keep in sync with Depends section in ./control
        "g++",
        "zlib1g-dev",
        "unzip",
    ],
    description_file = "description",
    homepage = "https://bazel.build",
    maintainer = "The Bazel Authors <bazel-discuss@googlegroups.com>",
    package = "bazel",
    suggests = [
        # Keep in sync with Suggests section in ./control
        "google-jdk | java8-sdk-headless | java8-jdk | java8-sdk | oracle-java8-installer",
        "bash-completion",
    ],
    version_file = ":version.txt",
    visibility = ["//scripts/packages:__pkg__"],
)

filegroup(
    name = "debian-files",
    srcs = [
        "compat",
        "control",
        "copyright",
        "rules",
    ],
)

genrule(
    name = "generate-changelog-file",
    srcs = [
        "generate_changelog.py",
        "//:bazel-srcs",  # Force a rebuild on source change
    ],
    outs = ["changelog"],
    cmd = "python3 $(location generate_changelog.py) bazel-out/volatile-status.txt $(location changelog)",
    stamp = 1,
)

genrule(
    name = "bazel-debian-src",
    srcs = [
        "//:bazel-srcs",
        ":debian-files",
        ":changelog",
    ],
    outs = [
        "bazel.dsc",
        "bazel.tar.gz",
    ],
    cmd = """
        mkdir -p bazel/debian
        tar -xf $(location //:bazel-srcs) -C ./bazel
        for f in $(locations :debian-files); do
          cp $$f ./bazel/debian/
        done
        cp $(location :changelog) ./bazel/debian
        dpkg-source -b ./bazel
        cp ./bazel_*.dsc $(location bazel.dsc)
        cp ./bazel_*.tar.gz $(location bazel.tar.gz)
        """,
    target_compatible_with = ["@platforms//os:linux"],
    visibility = ["//scripts/packages:__pkg__"],
)
