diff options
Diffstat (limited to 'tools/build_defs/groovy/groovy.bzl')
-rw-r--r-- | tools/build_defs/groovy/groovy.bzl | 438 |
1 files changed, 0 insertions, 438 deletions
diff --git a/tools/build_defs/groovy/groovy.bzl b/tools/build_defs/groovy/groovy.bzl deleted file mode 100644 index 992e7caf1a..0000000000 --- a/tools/build_defs/groovy/groovy.bzl +++ /dev/null @@ -1,438 +0,0 @@ -# Copyright 2015 The Bazel Authors. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//tools/build_rules:deprecation.bzl", "deprecated") - -def warning(rule): - print(deprecated( - "groovy", - rule, - "@bazel_tools//tools/build_defs/groovy:groovy.bzl", - "@io_bazel_rules_groovy//groovy:groovy.bzl")) - -def _groovy_jar_impl(ctx): - """Creates a .jar file from Groovy sources. Users should rely on - groovy_library instead of using this rule directly. - """ - warning("groovy_jar") - class_jar = ctx.outputs.class_jar - build_output = class_jar.path + ".build_output" - - # Extract all transitive dependencies - # TODO(bazel-team): get transitive dependencies from other groovy libraries - all_deps = set(ctx.files.deps) - for this_dep in ctx.attr.deps: - if hasattr(this_dep, "java"): - all_deps += this_dep.java.transitive_runtime_deps - - # Set up the output directory and set JAVA_HOME - cmd = "rm -rf %s\n" % build_output - cmd += "mkdir -p %s\n" % build_output - cmd += "export JAVA_HOME=external/local_jdk\n" - - # Set GROOVY_HOME by scanning through the groovy SDK to find the license file, - # which should be at the root of the SDK. - for file in ctx.files._groovysdk: - if file.basename == "CLI-LICENSE.txt": - cmd += "export GROOVY_HOME=%s\n" % file.dirname - break - - # Compile all files in srcs with groovyc - cmd += "$GROOVY_HOME/bin/groovyc %s -d %s %s\n" % ( - "-cp " + ":".join([dep.path for dep in all_deps]) if len(all_deps) != 0 else "", - build_output, - " ".join([src.path for src in ctx.files.srcs]), - ) - - # Discover all of the generated class files and write their paths to a file. - # Run the paths through sed to trim out everything before the package root so - # that the paths match how they should look in the jar file. - cmd += "find . -name '*.class' | sed 's:^./%s/::' > %s/class_list\n" % ( - build_output, - build_output, - ) - - # Create a jar file using the discovered paths - cmd += "root=`pwd`\n" - cmd += "cd %s; $root/%s Cc ../%s @class_list\n" % ( - build_output, - ctx.executable._zipper.path, - class_jar.basename, - ) - cmd += "cd $root\n" - - # Clean up temporary output - cmd += "rm -rf %s" % build_output - - # Execute the command - ctx.action( - inputs = ( - ctx.files.srcs - + list(all_deps) - + ctx.files._groovysdk - + ctx.files._jdk - + ctx.files._zipper), - outputs = [class_jar], - mnemonic = "Groovyc", - command = "set -e;" + cmd, - use_default_shell_env = True, - ) - -_groovy_jar = rule( - attrs = { - "srcs": attr.label_list( - non_empty = True, - allow_files = FileType([".groovy"]), - ), - "deps": attr.label_list( - mandatory = False, - allow_files = FileType([".jar"]), - ), - "_groovysdk": attr.label( - default = Label("//external:groovy-sdk"), - ), - "_jdk": attr.label( - default = Label("//tools/defaults:jdk"), - ), - "_zipper": attr.label( - default = Label("@bazel_tools//tools/zip:zipper"), - executable = True, - single_file = True, - ), - }, - outputs = { - "class_jar": "lib%{name}.jar", - }, - implementation = _groovy_jar_impl, -) - -def groovy_library(name, srcs=[], deps=[], **kwargs): - """Rule analagous to java_library that accepts .groovy sources instead of - .java sources. The result is wrapped in a java_import so that java rules may - depend on it. - """ - warning("groovy_library") - _groovy_jar( - name = name + "-impl", - srcs = srcs, - deps = deps, - ) - native.java_import( - name = name, - jars = [name + "-impl"], - deps = deps, - **kwargs - ) - -def groovy_and_java_library(name, srcs=[], deps=[], **kwargs): - """Accepts .groovy and .java srcs to create a groovy_library and a - java_library. The groovy_library will depend on the java_library, so the - Groovy code may reference the Java code but not vice-versa. - """ - warning("groovy_and_java_library") - groovy_deps = deps - jars = [] - - # Put all .java sources in a java_library - java_srcs = [src for src in srcs if src.endswith(".java")] - if java_srcs: - native.java_library( - name = name + "-java", - srcs = java_srcs, - deps = deps, - ) - groovy_deps += [name + "-java"] - jars += ["lib" + name + "-java.jar"] - - # Put all .groovy sources in a groovy_library depending on the java_library - groovy_srcs = [src for src in srcs if src.endswith(".groovy")] - if groovy_srcs: - _groovy_jar( - name = name + "-groovy", - srcs = groovy_srcs, - deps = groovy_deps, - ) - jars += ["lib" + name + "-groovy.jar"] - - # Output a java_import combining both libraries - native.java_import( - name = name, - jars = jars, - deps = deps, - **kwargs - ) - -def groovy_binary(name, main_class, srcs=[], deps=[], **kwargs): - """Rule analagous to java_binary that accepts .groovy sources instead of .java - sources. - """ - warning("groovy_binary") - all_deps = deps + ["//external:groovy"] - if srcs: - groovy_library( - name = name + "-lib", - srcs = srcs, - deps = deps, - ) - all_deps += [name + "-lib"] - - native.java_binary( - name = name, - main_class = main_class, - runtime_deps = all_deps, - **kwargs - ) - -def path_to_class(path): - if path.startswith("src/test/groovy/"): - return path[len("src/test/groovy/") : path.index(".groovy")].replace('/', '.') - elif path.startswith("src/test/java/"): - return path[len("src/test/java/") : path.index(".groovy")].replace('/', '.') - else: - fail("groovy_test sources must be under src/test/java or src/test/groovy") - -def _groovy_test_impl(ctx): - warning("groovy_test") - # Collect jars from the Groovy sdk - groovy_sdk_jars = [file - for file in ctx.files._groovysdk - if file.basename.endswith(".jar") - ] - - # Extract all transitive dependencies - all_deps = set(ctx.files.deps + ctx.files._implicit_deps + groovy_sdk_jars) - for this_dep in ctx.attr.deps: - if hasattr(this_dep, 'java'): - all_deps += this_dep.java.transitive_runtime_deps - - # Infer a class name from each src file - classes = [path_to_class(src.path) for src in ctx.files.srcs] - - # Write a file that executes JUnit on the inferred classes - cmd = "external/local_jdk/bin/java %s -cp %s org.junit.runner.JUnitCore %s\n" % ( - " ".join(ctx.attr.jvm_flags), - ":".join([dep.short_path for dep in all_deps]), - " ".join(classes), - ) - ctx.file_action( - output = ctx.outputs.executable, - content = cmd - ) - - # Return all dependencies needed to run the tests - return struct( - runfiles=ctx.runfiles(files=list(all_deps) + ctx.files.data + ctx.files._jdk), - ) - -_groovy_test = rule( - attrs = { - "srcs": attr.label_list( - mandatory = True, - allow_files = FileType([".groovy"]), - ), - "deps": attr.label_list(allow_files = FileType([".jar"])), - "data": attr.label_list(allow_files = True), - "jvm_flags": attr.string_list(), - "_groovysdk": attr.label( - default = Label("//external:groovy-sdk"), - ), - "_jdk": attr.label( - default = Label("//tools/defaults:jdk"), - ), - "_implicit_deps": attr.label_list(default = [ - Label("//external:junit"), - ]), - }, - test = True, - implementation = _groovy_test_impl, -) - -def groovy_test( - name, - deps=[], - srcs=[], - data=[], - resources=[], - jvm_flags=[], - size="medium", - tags=[]): - # Create an extra jar to hold the resource files if any were specified - all_deps = deps - if resources: - native.java_library( - name = name + "-resources", - resources = resources, - ) - all_deps += [name + "-resources"] - - _groovy_test( - name = name, - size = size, - tags = tags, - srcs = srcs, - deps = all_deps, - data = data, - jvm_flags = jvm_flags, - ) - -def groovy_junit_test( - name, - tests, - deps=[], - groovy_srcs=[], - java_srcs=[], - data=[], - resources=[], - jvm_flags=[], - size="small", - tags=[]): - warning("groovy_junit_test") - groovy_lib_deps = deps + ["//external:junit"] - test_deps = deps + ["//external:junit"] - - if len(tests) == 0: - fail("Must provide at least one file in tests") - - # Put all Java sources into a Java library - if java_srcs: - native.java_library( - name = name + "-javalib", - srcs = java_srcs, - deps = deps + ["//external:junit"], - ) - groovy_lib_deps += [name + "-javalib"] - test_deps += [name + "-javalib"] - - # Put all tests and Groovy sources into a Groovy library - groovy_library( - name = name + "-groovylib", - srcs = tests + groovy_srcs, - deps = groovy_lib_deps, - ) - test_deps += [name + "-groovylib"] - - # Create a groovy test - groovy_test( - name = name, - deps = test_deps, - srcs = tests, - data = data, - resources = resources, - jvm_flags = jvm_flags, - size = size, - tags = tags, - ) - -def spock_test( - name, - specs, - deps=[], - groovy_srcs=[], - java_srcs=[], - data=[], - resources=[], - jvm_flags=[], - size="small", - tags=[]): - warning("spock_test") - groovy_lib_deps = deps + [ - "//external:junit", - "//external:spock", - ] - test_deps = deps + [ - "//external:junit", - "//external:spock", - ] - - if len(specs) == 0: - fail("Must provide at least one file in specs") - - # Put all Java sources into a Java library - if java_srcs: - native.java_library( - name = name + "-javalib", - srcs = java_srcs, - deps = deps + [ - "//external:junit", - "//external:spock", - ], - ) - groovy_lib_deps += [name + "-javalib"] - test_deps += [name + "-javalib"] - - # Put all specs and Groovy sources into a Groovy library - groovy_library( - name = name + "-groovylib", - srcs = specs + groovy_srcs, - deps = groovy_lib_deps, - ) - test_deps += [name + "-groovylib"] - - # Create a groovy test - groovy_test( - name = name, - deps = test_deps, - srcs = specs, - data = data, - resources = resources, - jvm_flags = jvm_flags, - size = size, - tags = tags, - ) - -def groovy_repositories(): - warning("groovy_repositories") - native.new_http_archive( - name = "groovy_sdk_artifact", - url = "http://dl.bintray.com/groovy/maven/apache-groovy-binary-2.4.4.zip", - sha256 = "a7cc1e5315a14ea38db1b2b9ce0792e35174161141a6a3e2ef49b7b2788c258c", - build_file_content = """ -filegroup( - name = "sdk", - srcs = glob(["groovy-2.4.4/**"], exclude_directories=0), - visibility = ["//visibility:public"], -) -java_import( - name = "groovy", - jars = ["groovy-2.4.4/lib/groovy-2.4.4.jar"], - visibility = ["//visibility:public"], -) -""", - ) - native.bind( - name = "groovy-sdk", - actual = "@groovy_sdk_artifact//:sdk", - ) - native.bind( - name = "groovy", - actual = "@groovy_sdk_artifact//:groovy", - ) - - native.maven_jar( - name = "junit_artifact", - artifact = "junit:junit:4.12", - ) - native.bind( - name = "junit", - actual = "@junit_artifact//jar", - ) - - native.maven_jar( - name = "spock_artifact", - artifact = "org.spockframework:spock-core:0.7-groovy-2.0", - ) - native.bind( - name = "spock", - actual = "@spock_artifact//jar", - ) |