def _lein_repository(repository_ctx):
    java = _check_jdk(repository_ctx)
    url = "https://raw.githubusercontent.com/technomancy/leiningen/%s/bin/lein" % (repository_ctx.attr.version,)
    repository_ctx.download(
        url = url,
        output = "home/lein.sh.in",
        sha256 = repository_ctx.attr.sha256,
        executable = False,
    )
    repository_ctx.template("home/lein.sh", "home/lein.sh.in", {"LEIN_JVM_OPTS": "JVM_OPTS"})
    repository_ctx.file(
        "leinbuild.sh",
        """#!/bin/bash
abspath() {{
  # Compatibility script for OS X which lacks realpath
  if [ ! -z "$(which realpath)" ]; then
    realpath -s "$1"
  else
    [[ $1 = /* ]] && echo "$1" || echo "$PWD/${{1#./}}"
  fi
}}
set -eo pipefail
# If the locally specified path to java exists, use it.
# Otherwise, fallback to the system default (which may be incompatible).
# TODO(shahms): This should be a toolchain if we keep leiningen around at all.
LOCAL_JAVA_CMD="{java}"
if [[ -x $LOCAL_JAVA_CMD ]]; then
  export JAVA_CMD="$LOCAL_JAVA_CMD"
fi
export LEIN_HOME="$(abspath "$0.runfiles/{repo}/home")"
export HOME="$LEIN_HOME",
export JVM_OPTS="-Duser.home=$LEIN_HOME"
PROJECT="$(dirname "${{1:?Missing project.cls path}}")"
EXECROOT="$PWD"
cd "$PROJECT"
"$LEIN_HOME/lein.sh" -o cljsbuild once prod
"$LEIN_HOME/lein.sh" -o licenses | sort > licenses.txt
cd "$EXECROOT"
mv "$PROJECT"/resources/public/js/main.js "${{2:?Missing main.js output path}}"
mv "$PROJECT"/licenses.txt "${{3:?Missing licenses.txt output path}}"
""".format(
            repo = repository_ctx.name,
            java = java,
        ),
        executable = True,
    )
    repository_ctx.file(
        "WORKSPACE",
        "workspace(name = \"org_leiningen\")\n",
    )
    repository_ctx.file(
        "BUILD",
        "\n".join(
            [
                "package(default_visibility = [\"//visibility:public\"])",
                "licenses([\"reciprocal\"])  # EPL 1.0",
                "sh_binary(name = \"leinbuild\", srcs = [\"leinbuild.sh\"], data = glob([\"home/**/*\"]))",
            ],
        ),
    )
    repository_ctx.symlink(
        repository_ctx.path(Label("@//kythe/web/ui:project.clj")),
        "project.clj",
    )

    # Each of these commands will fetch additional dependencies into LEIN_HOME.
    lein_home = repository_ctx.path("home")
    for cmd in (["deps"], ["cljsbuild", "once"], ["licenses"]):
        repository_ctx.execute(
            ["home/lein.sh"] + cmd,
            environment = {
                "LEIN_HOME": str(lein_home),
                "HOME": str(lein_home),
                "JVM_OPTS": "-Duser.home=" + str(lein_home),
            },
        )

lein_repository = repository_rule(
    implementation = _lein_repository,
    attrs = {
        "version": attr.string(
            default = "2.5.3",
        ),
        "sha256": attr.string(mandatory = True),
    },
    environ = ["PATH", "LEIN_JAVA_CMD"],
)

def _check_jdk(repository_ctx):
    java = repository_ctx.os.environ.get("LEIN_JAVA_CMD") or repository_ctx.which("java")
    result = repository_ctx.execute([java, "-version"])
    if result.return_code != 0:
        fail("Error determining JDK version: {error} (with LEIN_JAVA_CMD={java})".format(
            error = result.stderr,
            java = java,
        ))
    lines = result.stderr.split("\n")
    if len(lines) < 1:
        fail("Error determining JDK version (with LEIN_JAVA_CMD={java})".format(
            java = java,
        ))
    version = lines[0].split(" ")[-1].strip("\"")
    if not version.startswith("1.8"):
        fail("Leiningen requires JDK8, found: {version} (with LEIN_JAVA_CMD={java})".format(
            version = version,
            java = java,
        ))
    return java
