# Description:
#   Main Java code for Bazel
package(
    default_visibility = ["//src:__subpackages__"],
)

java_library(
    name = "common",
    srcs = [
        "Constants.java",
    ],
    exports = ["//third_party:guava"],
    deps = [
        "//third_party:guava",
    ],
)

java_library(
    name = "shell",
    srcs = glob(["shell/*.java"]),
    deps = [
        ":common",
    ],
)

filegroup(
    name = "srcs",
    srcs = glob(["**"]) + [
        "//src/main/java/com/google/devtools/build/docgen:srcs",
        "//src/main/java/com/google/devtools/build/lib/actions:srcs",
        "//src/main/java/com/google/devtools/build/lib/bazel/dash:srcs",
        "//src/main/java/com/google/devtools/build/lib/bazel/repository/downloader:srcs",
        "//src/main/java/com/google/devtools/build/lib/query2:srcs",
        "//src/main/java/com/google/devtools/build/lib/remote:srcs",
        "//src/main/java/com/google/devtools/build/lib/rules/apple:srcs",
        "//src/main/java/com/google/devtools/build/lib/rules/apple/cpp:srcs",
        "//src/main/java/com/google/devtools/build/lib/rules/cpp:srcs",
        "//src/main/java/com/google/devtools/build/lib/rules/genquery:srcs",
        "//src/main/java/com/google/devtools/build/lib/rules/objc:srcs",
        "//src/main/java/com/google/devtools/build/lib/sandbox:srcs",
        "//src/main/java/com/google/devtools/build/lib/standalone:srcs",
        "//src/main/java/com/google/devtools/build/lib/worker:srcs",
        "//src/main/java/com/google/devtools/build/skyframe:srcs",
        "//src/main/java/com/google/devtools/common/options:srcs",
    ],
    visibility = [
        "//src:__pkg__",
        "//src/test/shell/bazel:__pkg__",
    ],
)

# This package provides a general-purpose directed graph utility class with
# implementations of numerous textbook graph algorithms and code to read and
# write AT&T GraphViz files.

java_library(
    name = "graph",
    srcs = glob(["graph/*.java"]),
    deps = [
        ":common",
        "//third_party:jsr305",
    ],
)

#   Java interfaces to various native UNIX system services.
java_library(
    name = "unix",
    srcs = glob([
        "unix/*.java",
    ]) + ["UnixJniLoader.java"],
    resources = select({
        # todo(dslomov): Get rid of this whole library on Windows.
        "//src:windows": [],
        "//conditions:default": ["//src/main/native:libunix.so"],
    }),
    deps = [
        ":common",
        ":shell",
    ],
)

# Library of concurrency utilities.
java_library(
    name = "concurrent",
    srcs = glob(["concurrent/*.java"]),
    deps = [
        ":common",
        ":preconditions",
        "//third_party:jsr305",
    ],
)

# Library of collection utilities.
java_library(
    name = "collect",
    srcs = glob([
        "collect/*.java",
        "collect/nestedset/*.java",
    ]),
    deps = [
        ":common",
        ":preconditions",
        "//third_party:jsr305",
    ],
)

java_library(
    name = "flags",
    srcs = glob([
        "flags/*.java",
    ]),
    deps = [
        ":io",
        "//src/main/java/com/google/devtools/common/options",
        "//src/main/protobuf:invocation_policy_java_proto",
        "//third_party:guava",
        "//third_party:jsr305",
        "//third_party/protobuf",
    ],
)

# Virtual file system; do not use externally!
java_library(
    name = "vfs",
    srcs = glob([
        "profiler/*.java",
        "vfs/*.java",
    ]),
    deps = [
        ":base-util",
        ":clock",
        ":common",
        ":concurrent",
        ":os_util",
        ":preconditions",
        ":unix",
        "//third_party:jsr305",
    ],
)

# Profiler chart library.
java_library(
    name = "profiler-output",
    srcs = glob([
        "profiler/chart/*.java",
        "profiler/output/*.java",
        "profiler/statistics/*.java",
    ]),
    deps = [
        ":common",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/build/lib/actions",
        "//third_party:jsr305",
    ],
)

# In-memory virtual file system.
java_library(
    name = "inmemoryfs",
    srcs = glob(["vfs/inmemoryfs/*.java"]),
    deps = [
        ":clock",
        ":common",
        ":concurrent",
        ":preconditions",
        ":unix",
        ":vfs",
        "//third_party:jsr305",
    ],
)

# Clock classes.
java_library(
    name = "clock",
    srcs = [
        "util/BlazeClock.java",
        "util/Clock.java",
        "util/JavaClock.java",
    ],
    deps = [
        ":concurrent",
    ],
)

# String canonicalizer.
java_library(
    name = "base-util",
    srcs = [
        "util/StringCanonicalizer.java",
        "util/StringTrie.java",
        "util/VarInt.java",
    ],
    deps = [
        ":common",
        ":preconditions",
    ],
)

# Varargs-avoiding overloads of Preconditions functions.
java_library(
    name = "preconditions",
    srcs = ["util/Preconditions.java"],
    deps = [
        ":common",
        "//third_party:jsr305",
    ],
)

# I/O utilities.
java_library(
    name = "io",
    srcs = glob(["util/io/*.java"]),
    deps = [
        ":clock",
        ":common",
        ":concurrent",
        ":vfs",
    ],
)

# General utilities.
java_library(
    name = "os_util",
    srcs = ["util/OS.java"],
)

java_library(
    name = "util",
    srcs = glob(
        ["util/*.java"],
        exclude = [
            "util/BlazeClock.java",
            "util/Clock.java",
            "util/ExitCode.java",
            "util/JavaClock.java",
            "util/OS.java",
            "util/Preconditions.java",
            "util/StringCanonicalizer.java",
            "util/StringTrie.java",
            "util/VarInt.java",
        ],
    ),
    exports = [
        ":base-util",
        ":clock",
        ":collect",
        ":exitcode-external",
        ":os_util",
        ":preconditions",
    ],
    deps = [
        ":base-util",
        ":collect",
        ":common",
        ":concurrent",
        ":exitcode-external",
        ":os_util",
        ":preconditions",
        ":shell",
        ":unix",
        ":vfs",
        "//src/main/java/com/google/devtools/common/options",
        "//third_party:jsr305",
    ],
)

java_library(
    name = "exitcode-external",
    srcs = [
        "util/ExitCode.java",
    ],
    deps = [
        "//third_party:guava",
    ],
)

# Event reporting infrastructure.
java_library(
    name = "events",
    srcs = glob(["events/*.java"]),
    deps = [
        ":common",
        ":concurrent",
        ":io",
        ":preconditions",
        ":vfs",
        "//third_party:jsr305",
    ],
)

########################################################################
#
# The "foundation" library (concurrent, events, util, vfs, inmemoryfs, options)
# Filesystem abstraction, event reporting, options parsing, I/O routines.
#

# These packages apparently depend on :foundation. I have no idea why, but to
# avoid breaking them, I allow them to depend on it.
java_library(
    name = "foundation",
    exports = [
        ":concurrent",
        ":events",
        # This should be removed at some point. Production code shouldn't use this.
        ":inmemoryfs",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/common/options",
    ],
)

java_library(
    name = "skylarkinterface",
    srcs = glob([
        "skylarkinterface/*.java",
    ]),
    deps = [
        "//third_party:jsr305",
    ],
)

########################################################################
#
# The "cmdline" library: Label validation and target pattern
# parsing. Both the label syntax and the target pattern syntax are a
# public interface, and all changes have to be made in a
# backwards-compatible manner. This library is intentionally
# standalone so it can be used outside without pulling in any internal
# code.
#

java_library(
    name = "cmdline",
    srcs = glob(["cmdline/*.java"]),
    deps = [
        ":base-util",
        ":common",
        ":concurrent",
        ":skylarkinterface",
        ":util",
        ":vfs",
        "//third_party:jsr305",
    ],
)

java_library(
    name = "syntax",
    srcs = glob([
        "syntax/**/*.java",
    ]),
    deps = [
        ":cmdline",
        ":collect",
        ":common",
        ":concurrent",
        ":events",
        ":skylarkinterface",
        ":util",
        ":vfs",
        "//third_party:asm",
        "//third_party:asm-commons",
        "//third_party:asm-util",
        "//third_party:auto_value",
        "//third_party:bytebuddy",
        "//third_party:jsr305",
    ],
)

########################################################################
#
# The "packages" library: syntax, packages, pkgcache.
# BUILD file scanning, parsing and evaluation; package loading and caching.
#

# IMPORTANT:  NOT A PUBLIC INTERFACE.
#
# DO NOT ADD A DEPENDENCY ON THIS TARGET, or any other in this
# package, without first talking to us.  Here are two good
# reasons:
#
# 1.  FRAGILITY. This is not a stable API, it's an internal interface.
#     It changes from time to time, and your client *will* be broken.
#
# 2.  CORRECTNESS.  The BUILD file parser changes rapidly.  If
#     your application depends upon it, your application will start to
#     bit-rot almost immediately.

java_library(
    name = "packages-internal",
    srcs = glob([
        "packages/*.java",
        "pkgcache/*.java",
    ]),
    exports = [
        ":cmdline",
        ":syntax",
    ],
    deps = [
        ":cmdline",
        ":collect",
        ":common",
        ":concurrent",
        ":events",
        ":skylarkinterface",
        ":syntax",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/common/options",
        "//src/main/protobuf:build_java_proto",
        "//third_party:guava",
        "//third_party:jsr305",
        "//third_party/protobuf",
    ],
)

java_library(
    name = "packages",
    exports = [
        ":foundation",
        ":packages-internal",
    ],
)

java_library(
    name = "java-toolchain-parser",
    srcs = [
        "rules/java/JavaToolchainData.java",
        "rules/java/JavaToolchainDataParser.java",
    ],
    deps = [
        ":concurrent",
        ":preconditions",
        "//src/main/protobuf:build_java_proto",
        "//third_party:guava",
        "//third_party:jsr305",
        "//third_party/protobuf",
    ],
)

java_library(
    name = "execution-requirements",
    srcs = ["analysis/actions/ExecutionRequirements.java"],
    visibility = [
        "//src/main/java/com/google/devtools/build/lib/rules:__subpackages__",
    ],
)

java_library(
    name = "build-base",
    srcs = glob(
        [
            "analysis/*.java",
            "analysis/actions/*.java",
            "analysis/buildinfo/*.java",
            "analysis/config/*.java",
            "analysis/constraints/*.java",
            "exec/*.java",
            "rules/*.java",
            "rules/extra/*.java",
            "rules/filegroup/*.java",
            "rules/fileset/*.java",
            "rules/test/*.java",
            "rules/repository/*.java",
            "skyframe/*.java",
        ],
        exclude = ["analysis/BuildInfo.java"],
    ) + [
        "runtime/BlazeServerStartupOptions.java",
    ],
    deps = [
        ":base-util",
        ":cmdline",
        ":collect",
        ":common",
        ":concurrent",
        ":events",
        ":exitcode-external",
        ":flags",
        ":graph",
        ":io",
        ":os_util",
        ":packages-internal",
        ":shell",
        ":skylarkinterface",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/build/lib/actions",
        "//src/main/java/com/google/devtools/build/skyframe",
        "//src/main/java/com/google/devtools/common/options",
        "//src/main/protobuf:extra_actions_base_java_proto",
        "//src/main/protobuf:invocation_policy_java_proto",
        "//src/main/protobuf:test_status_java_proto",
        "//third_party:auto_value",
        "//third_party:guava",
        "//third_party:jsr305",
        "//third_party/protobuf",
    ],
)

java_library(
    name = "bazel-rules",
    srcs = glob(
        [
            "bazel/rules/**/*.java",
        ],
        exclude = [
            "bazel/rules/workspace/*.java",
        ],
    ),
    resources = glob(
        [
            "bazel/rules/**/*.txt",
            "bazel/rules/**/*.WORKSPACE",
        ],
    ),
    deps = [
        ":android-rules",
        ":bazel",
        ":bazel-repository",
        ":build-base",
        ":build-info",
        ":collect",
        ":common",
        ":concurrent",
        ":events",
        ":ideinfo",
        ":java-rules",
        ":packages-internal",
        ":proto-rules",
        ":python-rules",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/build/lib/actions",
        "//src/main/java/com/google/devtools/build/lib/query2:query-output",
        "//src/main/java/com/google/devtools/build/lib/rules/apple",
        "//src/main/java/com/google/devtools/build/lib/rules/apple/cpp",
        "//src/main/java/com/google/devtools/build/lib/rules/cpp",
        "//src/main/java/com/google/devtools/build/lib/rules/genquery",
        "//src/main/java/com/google/devtools/build/lib/rules/objc",
        "//src/main/java/com/google/devtools/build/skyframe",
        "//src/main/java/com/google/devtools/common/options",
        "//src/main/protobuf:crosstool_config_java_proto",
        "//third_party:guava",
        "//third_party:joda_time",
        "//third_party:jsr305",
    ],
)

java_library(
    name = "bazel-main",
    srcs = glob(["bazel/*.java"]),
    resources = [
        "bazel/rules/java/java_stub_template.txt",
        "bazel/rules/python/stub_template.txt",
    ],
    deps = [
        ":bazel",
        ":bazel-commands",
        ":bazel-repository",
        ":bazel-rules",
        ":build-base",
        ":build-info",
        ":clock",
        ":events",
        ":io",
        ":packages-internal",
        ":shell",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/build/lib/actions",
        "//src/main/java/com/google/devtools/build/lib/bazel/dash",
        "//src/main/java/com/google/devtools/build/lib/remote",
        "//src/main/java/com/google/devtools/build/lib/sandbox",
        "//src/main/java/com/google/devtools/build/lib/standalone",
        "//src/main/java/com/google/devtools/build/lib/worker",
        "//src/main/java/com/google/devtools/build/skyframe",
        "//src/main/java/com/google/devtools/common/options",
        "//third_party:guava",
        "//third_party:jsr305",
    ],
)

java_library(
    name = "bazel-commands",
    srcs = glob(["bazel/commands/*.java"]),
    resources = ["bazel/commands/fetch.txt"],
    deps = [
        ":common",
        ":events",
        ":exitcode-external",
        ":java-rules",
        ":packages-internal",
        ":runtime",
        ":util",
        "//src/main/java/com/google/devtools/build/lib/query2",
        "//src/main/java/com/google/devtools/build/lib/query2:query-engine",
        "//src/main/java/com/google/devtools/common/options",
        "//third_party:guava",
    ],
)

java_library(
    name = "bazel-repository",
    srcs = glob(
        [
            "bazel/repository/**/*.java",
            "bazel/rules/workspace/*.java",
        ],
        exclude = ["bazel/repository/MavenConnector.java"],
    ),
    runtime_deps = [
        "//third_party:aether",
        "//third_party:apache_commons_codec",
        "//third_party:apache_commons_logging",
        "//third_party:apache_httpclient",
        "//third_party:apache_httpcore",
        "//third_party:jsch",
        "//third_party:maven",
        "//third_party:maven_model",
        "//third_party:plexus_interpolation",
        "//third_party:plexus_utils",
        "//third_party:slf4j",
    ],
    deps = [
        ":concurrent",
        ":events",
        ":maven-connector",
        ":runtime",
        ":util",
        "//src/java_tools/singlejar/java/com/google/devtools/build/zip",
        "//src/main/java/com/google/devtools/build/lib:build-base",
        "//src/main/java/com/google/devtools/build/lib:packages-internal",
        "//src/main/java/com/google/devtools/build/lib:shell",
        "//src/main/java/com/google/devtools/build/lib:skylarkinterface",
        "//src/main/java/com/google/devtools/build/lib:vfs",
        "//src/main/java/com/google/devtools/build/lib/bazel/repository/downloader",
        "//src/main/java/com/google/devtools/build/skyframe",
        "//third_party:aether",
        "//third_party:apache_commons_compress",
        "//third_party:guava",
        "//third_party:jgit",
        "//third_party:jsr305",
        "//third_party:maven",
        "//third_party:maven_model",
        "//third_party:plexus_component_annotations",
        "//third_party:xz",
    ],
)

java_library(
    name = "maven-connector",
    srcs = ["bazel/repository/MavenConnector.java"],
    deps = [
        "//third_party:aether",
        "//third_party:maven_model",
    ],
)

# Rules
java_library(
    name = "nativedeps-rules",
    srcs = glob(
        ["rules/nativedeps/*.java"],
    ),
    deps = [
        ":build-base",
        ":collect",
        ":common",
        ":concurrent",
        ":packages-internal",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/build/lib/actions",
        "//src/main/java/com/google/devtools/build/lib/rules/cpp",
        "//third_party:jsr305",
        "//third_party/protobuf",
    ],
)

java_library(
    name = "proto-rules",
    srcs = glob(
        ["rules/proto/*.java"],
    ),
    deps = [
        ":build-base",
        ":collect",
        ":common",
        ":concurrent",
        ":packages-internal",
        ":skylarkinterface",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/build/lib/actions",
        "//src/main/java/com/google/devtools/common/options",
        "//third_party:auto_value",
        "//third_party:guava",
        "//third_party:jsr305",
        "//third_party/protobuf",
    ],
)

java_library(
    name = "java-rules",
    srcs = glob(
        ["rules/java/*.java"],
        exclude = [
            "rules/java/JavaImplicitAttributes.java",
            "rules/java/JavaToolchainDataParser.java",
        ],
    ),
    deps = [
        ":build-base",
        ":collect",
        ":common",
        ":concurrent",
        ":events",
        ":java-implicit-attributes",
        ":packages-internal",
        ":shell",
        ":skylarkinterface",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/build/lib/actions",
        "//src/main/java/com/google/devtools/build/lib/rules/cpp",
        "//src/main/java/com/google/devtools/common/options",
        "//src/main/protobuf:extra_actions_base_java_proto",
        "//third_party:joda_time",
        "//third_party:jsr305",
        "//third_party/protobuf",
    ],
)

java_library(
    name = "java-implicit-attributes",
    srcs = ["rules/java/JavaImplicitAttributes.java"],
)

java_library(
    name = "android-rules",
    srcs = glob(
        ["rules/android/*.java"],
    ),
    deps = [
        ":build-base",
        ":collect",
        ":common",
        ":concurrent",
        ":events",
        ":java-rules",
        ":nativedeps-rules",
        ":packages-internal",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/build/lib:skylarkinterface",
        "//src/main/java/com/google/devtools/build/lib/actions",
        "//src/main/java/com/google/devtools/build/lib/rules/cpp",
        "//src/main/java/com/google/devtools/common/options",
        "//src/main/protobuf:apk_manifest_java_proto",
        "//third_party:jsr305",
        "//third_party/protobuf",
    ],
)

java_library(
    name = "python-rules",
    srcs = glob(
        ["rules/python/*.java"],
    ),
    deps = [
        ":build-base",
        ":collect",
        ":common",
        ":concurrent",
        ":packages-internal",
        ":skylarkinterface",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/build/lib/actions",
        "//src/main/java/com/google/devtools/build/lib/rules/cpp",
        "//src/main/java/com/google/devtools/common/options",
        "//src/main/protobuf:crosstool_config_java_proto",
        "//src/main/protobuf:extra_actions_base_java_proto",
        "//third_party:jsr305",
        "//third_party/protobuf",
    ],
)

java_library(
    name = "ideinfo",
    srcs = glob(
        ["ideinfo/*.java"],
    ),
    deps = [
        ":android-rules",
        ":build-base",
        ":collect",
        ":common",
        ":concurrent",
        ":java-rules",
        ":packages-internal",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/build/lib/actions",
        "//src/main/java/com/google/devtools/build/lib/rules/cpp",
        "//src/main/protobuf:android_studio_ide_info_java_proto",
        "//third_party:guava",
        "//third_party:jsr305",
        "//third_party/protobuf",
    ],
)

java_library(
    name = "shared-base-rules",
    exports = [
        ":android-rules",
        ":java-rules",
        ":nativedeps-rules",
        ":proto-rules",
        ":python-rules",
    ],
)

java_library(
    name = "runtime",
    srcs = glob(
        [
            "runtime/*.java",
            "server/**/*.java",
            "runtime/commands/*.java",
            "buildtool/*.java",
            "buildtool/buildevent/*.java",
        ],
    ),
    deps = [
        ":build-base",
        ":clock",
        ":cmdline",
        ":collect",
        ":common",
        ":concurrent",
        ":events",
        ":exitcode-external",
        ":flags",
        ":io",
        ":packages-internal",
        ":profiler-output",
        ":shared-base-rules",
        ":shell",
        ":unix",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/build/docgen:docgen_javalib",
        "//src/main/java/com/google/devtools/build/lib/actions",
        "//src/main/java/com/google/devtools/build/lib/query2",
        "//src/main/java/com/google/devtools/build/lib/query2:query-engine",
        "//src/main/java/com/google/devtools/build/lib/query2:query-output",
        "//src/main/java/com/google/devtools/build/skyframe",
        "//src/main/java/com/google/devtools/common/options",
        "//src/main/protobuf:build_java_proto",
        "//src/main/protobuf:invocation_policy_java_proto",
        "//src/main/protobuf:test_status_java_proto",
        "//third_party:joda_time",
        "//third_party:jsr305",
        "//third_party/protobuf",
    ],
)

java_library(
    name = "bazel",
    resources = glob(["runtime/commands/*.txt"]),
    exports = [":runtime"],
)

java_library(
    name = "all-build-rules",
    exports = [
        ":build-base",
        ":common",
        ":concurrent",
        ":graph",
        ":packages-internal",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/build/lib/actions",
        "//src/main/java/com/google/devtools/build/lib/rules/objc",
        "//src/main/java/com/google/devtools/common/options",
    ],
)

java_library(
    name = "build",
    exports = [
        ":all-build-rules",
        ":build-base",
        ":foundation",
        ":packages",
        ":query2",
        "//src/main/java/com/google/devtools/build/lib/actions",
    ],
)

########################################################################
#
# The Blaze query language, revision 2: query2.
#

java_library(
    name = "query2",
    exports = [
        ":common",
        ":concurrent",
        ":events",
        ":foundation",
        ":graph",
        ":packages",
        ":util",
        ":vfs",
        "//src/main/java/com/google/devtools/build/lib/query2",
        "//src/main/java/com/google/devtools/common/options",
        "//src/main/protobuf:build_java_proto",
    ],
)

java_binary(
    name = "bazel/BazelServer",
    javacopts = [
        "-Xlint:all",
        "-Xlint:-path",
    ],
    main_class = "com.google.devtools.build.lib.bazel.BazelMain",
    runtime_deps = [
        ":bazel-main",
    ],
)

filegroup(
    name = "docs_embedded_in_sources",
    srcs = glob(["**/*.java"]),
)

genrule(
    name = "gen_buildencyclopedia",
    srcs = [":docs_embedded_in_sources"],
    outs = ["build-encyclopedia.zip"],
    cmd = (
        "mkdir -p $(@D)/be && " +
        "$(location //src/main/java/com/google/devtools/build/docgen:docgen_bin)" +
        " $$PWD/src/main/java/com/google/devtools/build/lib " +
        "com.google.devtools.build.lib.bazel.rules.BazelRuleClassProvider" +
        " $(@D)/be &&" +
        "zip -qj $@ $(@D)/be/*"
    ),
    tools = [
        "//src/main/java/com/google/devtools/build/docgen:docgen_bin",
        "//src/main/java/com/google/devtools/build/docgen:docgen_javalib",
    ],
)

# The skylark repository classes are passed as parameter of the Skylark documentation generator.
SKYLARK_REPOSITORY_CLASSES = [
    "com.google.devtools.build.lib.bazel.repository.skylark.SkylarkExecutionResult",
    "com.google.devtools.build.lib.bazel.repository.skylark.SkylarkOS",
    "com.google.devtools.build.lib.bazel.repository.skylark.SkylarkPath",
    "com.google.devtools.build.lib.bazel.repository.skylark.SkylarkRepositoryContext",
    "com.google.devtools.build.lib.bazel.repository.skylark.SkylarkRepositoryModule",
]

genrule(
    name = "gen_skylarklibrary",
    outs = ["skylark-library.zip"],
    cmd = "mkdir -p $(@D)/skylark-lib &&" +
          "$(location //src/main/java/com/google/devtools/build/docgen:skydoc_bin) $(@D)/skylark-lib " +
          " ".join(SKYLARK_REPOSITORY_CLASSES) +
          " && zip -qj $@ $(@D)/skylark-lib/*",
    tools = ["//src/main/java/com/google/devtools/build/docgen:skydoc_bin"],
)

# Bootstrapping SingleJar using Skylark rules
#
load("//tools/build_rules:java_rules_skylark.bzl", "bootstrap_java_library")

bootstrap_java_library(
    name = "shell-skylark",
    srcs = glob(["shell/*.java"]),
    jars = ["//third_party:guava"],
)

########################################################################
#
# Miscellaneous targets
#

# A library for just the BuildInfo class, so it can be used by the external
# SingleJar implementation.

java_library(
    name = "build-info",
    srcs = [
        "analysis/BuildInfo.java",
    ],
    deps = ["//third_party:joda_time"],
)
