summaryrefslogtreecommitdiffstats
path: root/tools/bzl/plugin.bzl
blob: 939daf8c8e7164d113a0315e209452ac1c998ad5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
load("//tools/bzl:genrule2.bzl", "genrule2")
load(
    "//tools/bzl:gwt.bzl",
    "GWT_COMPILER_ARGS",
    "GWT_JVM_ARGS",
    "GWT_PLUGIN_DEPS",
    "GWT_PLUGIN_DEPS_NEVERLINK",
    "GWT_TRANSITIVE_DEPS",
    "PLUGIN_DEPS_NEVERLINK",
    "gwt_binary",
)

PLUGIN_DEPS = ["//gerrit-plugin-api:lib"]

PLUGIN_TEST_DEPS = [
    "//gerrit-acceptance-framework:lib",
    "//lib/bouncycastle:bcpg",
    "//lib/bouncycastle:bcpkix",
    "//lib/bouncycastle:bcprov",
]

def gerrit_plugin(
        name,
        deps = [],
        provided_deps = [],
        srcs = [],
        gwt_module = [],
        resources = [],
        manifest_entries = [],
        target_suffix = "",
        **kwargs):
    native.java_library(
        name = name + "__plugin",
        srcs = srcs,
        resources = resources,
        deps = provided_deps + deps + GWT_PLUGIN_DEPS_NEVERLINK + PLUGIN_DEPS_NEVERLINK,
        visibility = ["//visibility:public"],
        **kwargs
    )

    static_jars = []
    if gwt_module:
        static_jars = [":%s-static" % name]

    native.java_binary(
        name = "%s__non_stamped" % name,
        deploy_manifest_lines = manifest_entries + ["Gerrit-ApiType: plugin"],
        main_class = "Dummy",
        runtime_deps = [
            ":%s__plugin" % name,
        ] + static_jars,
        visibility = ["//visibility:public"],
        **kwargs
    )

    if gwt_module:
        native.java_library(
            name = name + "__gwt_module",
            resources = depset(srcs + resources).to_list(),
            runtime_deps = deps + GWT_PLUGIN_DEPS,
            visibility = ["//visibility:public"],
            **kwargs
        )
        genrule2(
            name = "%s-static" % name,
            cmd = " && ".join([
                "mkdir -p $$TMP/static",
                "unzip -qd $$TMP/static $(location %s__gwt_application)" % name,
                "cd $$TMP",
                "zip -qr $$ROOT/$@ .",
            ]),
            tools = [":%s__gwt_application" % name],
            outs = ["%s-static.jar" % name],
        )
        gwt_binary(
            name = name + "__gwt_application",
            module = [gwt_module],
            deps = GWT_PLUGIN_DEPS + GWT_TRANSITIVE_DEPS + ["//lib/gwt:dev"],
            module_deps = [":%s__gwt_module" % name],
            compiler_args = GWT_COMPILER_ARGS,
            jvm_args = GWT_JVM_ARGS,
        )

    # TODO(davido): Remove manual merge of manifest file when this feature
    # request is implemented: https://github.com/bazelbuild/bazel/issues/2009
    genrule2(
        name = name + target_suffix,
        stamp = 1,
        srcs = ["%s__non_stamped_deploy.jar" % name],
        cmd = " && ".join([
            "GEN_VERSION=$$(cat bazel-out/stable-status.txt | grep -w STABLE_BUILD_%s_LABEL | cut -d ' ' -f 2)" % name.upper(),
            "cd $$TMP",
            "unzip -q $$ROOT/$<",
            "echo \"Implementation-Version: $$GEN_VERSION\n$$(cat META-INF/MANIFEST.MF)\" > META-INF/MANIFEST.MF",
            "zip -qr $$ROOT/$@ .",
        ]),
        outs = ["%s%s.jar" % (name, target_suffix)],
        visibility = ["//visibility:public"],
    )