David Ostrovsky 20c2fd4f0b Bazel: Add fixes for --incompatible_load_{java|python}_rules_from_bzl
This change is fixing "All Java build rules should be loaded from
Starlark" warning flagged by latest buildifier version: [1]. Python
rules are now also loaded from the Starlark.

Also extract codemirror library import to BUILD file. This is needed to
avoid cycle in the workspace file, after importing java rules from
Starlark.

[1] https://github.com/bazelbuild/buildtools/blob/master/WARNINGS.md#native-java

Change-Id: I36192c9465d988b25cf09c250e110f15850910cd
2019-09-02 00:42:25 +02:00

365 lines
9.4 KiB
Python

load("//tools/bzl:genrule2.bzl", "genrule2")
CM_CSS = [
"lib/codemirror.css",
"addon/dialog/dialog.css",
"addon/merge/merge.css",
"addon/scroll/simplescrollbars.css",
"addon/search/matchesonscrollbar.css",
"addon/lint/lint.css",
]
CM_JS = [
"lib/codemirror.js",
"mode/meta.js",
"keymap/emacs.js",
"keymap/sublime.js",
"keymap/vim.js",
]
CM_ADDONS = [
"dialog/dialog.js",
"edit/closebrackets.js",
"edit/matchbrackets.js",
"edit/trailingspace.js",
"scroll/annotatescrollbar.js",
"scroll/simplescrollbars.js",
"search/jump-to-line.js",
"search/matchesonscrollbar.js",
"search/searchcursor.js",
"search/search.js",
"selection/mark-selection.js",
"mode/multiplex.js",
"mode/overlay.js",
"mode/simple.js",
"lint/lint.js",
]
# Available themes must be enumerated here,
# in gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/Theme.java,
# in gerrit-gwtui/src/main/java/net/codemirror/theme/Themes.java
CM_THEMES = [
"3024-day",
"3024-night",
"abcdef",
"ambiance",
"base16-dark",
"base16-light",
"bespin",
"blackboard",
"cobalt",
"colorforth",
"dracula",
"duotone-dark",
"duotone-light",
"eclipse",
"elegant",
"erlang-dark",
"hopscotch",
"icecoder",
"isotope",
"lesser-dark",
"liquibyte",
"material",
"mbo",
"mdn-like",
"midnight",
"monokai",
"neat",
"neo",
"night",
"paraiso-dark",
"paraiso-light",
"pastel-on-dark",
"railscasts",
"rubyblue",
"seti",
"solarized",
"the-matrix",
"tomorrow-night-bright",
"tomorrow-night-eighties",
"ttcn",
"twilight",
"vibrant-ink",
"xq-dark",
"xq-light",
"yeti",
"zenburn",
]
# Available modes must be enumerated here,
# in gerrit-gwtui/src/main/java/net/codemirror/mode/Modes.java,
# gerrit-gwtui/src/main/java/net/codemirror/mode/ModeInfo.java,
# and in CodeMirror's own mode/meta.js script.
CM_MODES = [
"apl",
"asciiarmor",
"asn.1",
"asterisk",
"brainfuck",
"clike",
"clojure",
"cmake",
"cobol",
"coffeescript",
"commonlisp",
"crystal",
"css",
"cypher",
"d",
"dart",
"diff",
"django",
"dockerfile",
"dtd",
"dylan",
"ebnf",
"ecl",
"eiffel",
"elm",
"erlang",
"factor",
"fcl",
"forth",
"fortran",
"gas",
"gfm",
"gherkin",
"go",
"groovy",
"haml",
"handlebars",
"haskell-literate",
"haskell",
"haxe",
"htmlembedded",
"htmlmixed",
"http",
"idl",
"javascript",
"jinja2",
"jsx",
"julia",
"livescript",
"lua",
"markdown",
"mathematica",
"mbox",
"mirc",
"mllike",
"modelica",
"mscgen",
"mumps",
"nginx",
"nsis",
"ntriples",
"octave",
"oz",
"pascal",
"pegjs",
"perl",
"php",
"pig",
"powershell",
"properties",
"protobuf",
"pug",
"puppet",
"python",
"q",
"r",
"rpm",
"rst",
"ruby",
"rust",
"sas",
"sass",
"scheme",
"shell",
"sieve",
"slim",
"smalltalk",
"smarty",
"solr",
"soy",
"sparql",
"spreadsheet",
"sql",
"stex",
"stylus",
"swift",
"tcl",
"textile",
"tiddlywiki",
"tiki",
"toml",
"tornado",
"troff",
"ttcn-cfg",
"ttcn",
"turtle",
"twig",
"vb",
"vbscript",
"velocity",
"verilog",
"vhdl",
"vue",
"webidl",
"xml",
"xquery",
"yacas",
"yaml-frontmatter",
"yaml",
"z80",
]
CM_VERSION = "5.25.0"
TOP = "META-INF/resources/webjars/codemirror/%s" % CM_VERSION
TOP_MINIFIED = "META-INF/resources/webjars/codemirror-minified/%s" % CM_VERSION
LICENSE = "//lib:LICENSE-codemirror-original"
LICENSE_MINIFIED = "//lib:LICENSE-codemirror-minified"
DIFF_MATCH_PATCH_VERSION = "20121119-1"
DIFF_MATCH_PATCH_TOP = ("META-INF/resources/webjars/google-diff-match-patch/%s" %
DIFF_MATCH_PATCH_VERSION)
def pkg_cm():
for archive, suffix, top, license in [
("@codemirror-original//jar", "", TOP, LICENSE),
("@codemirror-minified//jar", "_r", TOP_MINIFIED, LICENSE_MINIFIED),
]:
# Main JavaScript and addons
genrule2(
name = "cm" + suffix,
cmd = " && ".join(
[
"echo '/** @license' >$@",
"unzip -p $(location %s) %s/LICENSE >>$@" % (archive, top),
"echo '*/' >>$@",
] +
["unzip -p $(location %s) %s/%s >>$@" % (archive, top, n) for n in CM_JS] +
[
"unzip -p $(location %s) %s/addon/%s >>$@" % (archive, top, n)
for n in CM_ADDONS
],
),
tools = [archive],
outs = ["cm%s.js" % suffix],
)
# Main CSS
genrule2(
name = "css" + suffix,
cmd = " && ".join(
[
"echo '/** @license' >$@",
"unzip -p $(location %s) %s/LICENSE >>$@" % (archive, top),
"echo '*/' >>$@",
] +
[
"unzip -p $(location %s) %s/%s >>$@" % (archive, top, n)
for n in CM_CSS
],
),
tools = [archive],
outs = ["cm%s.css" % suffix],
)
# Modes
for n in CM_MODES:
genrule2(
name = "mode_%s%s" % (n, suffix),
cmd = " && ".join(
[
"echo '/** @license' >$@",
"unzip -p $(location %s) %s/LICENSE >>$@" % (archive, top),
"echo '*/' >>$@",
"unzip -p $(location %s) %s/mode/%s/%s.js >>$@" % (archive, top, n, n),
],
),
tools = [archive],
outs = ["mode_%s%s.js" % (n, suffix)],
)
# Themes
for n in CM_THEMES:
genrule2(
name = "theme_%s%s" % (n, suffix),
cmd = " && ".join(
[
"echo '/** @license' >$@",
"unzip -p $(location %s) %s/LICENSE >>$@" % (archive, top),
"echo '*/' >>$@",
"unzip -p $(location %s) %s/theme/%s.css >>$@" % (archive, top, n),
],
),
tools = [archive],
outs = ["theme_%s%s.css" % (n, suffix)],
)
# Merge Addon bundled with diff-match-patch
genrule2(
name = "addon_merge_with_diff_match_patch%s" % suffix,
cmd = " && ".join(
[
"echo '/** @license' >$@",
"unzip -p $(location %s) %s/LICENSE >>$@" % (archive, top),
"echo '*/\n' >>$@",
"echo '// The google-diff-match-patch library is from https://repo1.maven.org/maven2/org/webjars/google-diff-match-patch/%s/google-diff-match-patch-%s.jar\n' >> $@" % (DIFF_MATCH_PATCH_VERSION, DIFF_MATCH_PATCH_VERSION),
"echo '/** @license' >>$@",
"echo 'LICENSE-Apache2.0' >>$@",
"echo '*/' >>$@",
"unzip -p $(location @diff-match-patch//jar) %s/diff_match_patch.js >>$@" % DIFF_MATCH_PATCH_TOP,
"echo ';' >> $@",
"unzip -p $(location %s) %s/addon/merge/merge.js >>$@" % (archive, top),
],
),
tools = [
"@diff-match-patch//jar",
# dependency just for license tracking.
":diff-match-patch",
archive,
"//lib:LICENSE-Apache2.0",
],
outs = ["addon_merge_with_diff_match_patch%s.js" % suffix],
)
# Jar packaging
genrule2(
name = "jar" + suffix,
cmd = " && ".join([
"cd $$TMP",
"mkdir -p net/codemirror/{addon,lib,mode,theme}",
"cp $$ROOT/$(location :css%s) net/codemirror/lib/cm.css" % suffix,
"cp $$ROOT/$(location :cm%s) net/codemirror/lib/cm.js" % suffix,
] +
[
"cp $$ROOT/$(location :mode_%s%s) net/codemirror/mode/%s.js" % (n, suffix, n)
for n in CM_MODES
] +
[
"cp $$ROOT/$(location :theme_%s%s) net/codemirror/theme/%s.css" % (n, suffix, n)
for n in CM_THEMES
] +
["cp $$ROOT/$(location :addon_merge_with_diff_match_patch%s) net/codemirror/addon/merge_bundled.js" % suffix] +
["zip -qr $$ROOT/$@ net/codemirror/{addon,lib,mode,theme}"]),
tools = [
":addon_merge_with_diff_match_patch%s" % suffix,
":cm%s" % suffix,
":css%s" % suffix,
] + [
":mode_%s%s" % (n, suffix)
for n in CM_MODES
] + [
":theme_%s%s" % (n, suffix)
for n in CM_THEMES
],
outs = ["codemirror%s.jar" % suffix],
)