diff --git a/scala/scala.bzl b/scala/scala.bzl index 63e631abc..998466be5 100644 --- a/scala/scala.bzl +++ b/scala/scala.bzl @@ -598,9 +598,9 @@ def _scala_junit_test_impl(ctx): _implicit_deps = { "_ijar": attr.label(executable=True, cfg="host", default=Label("@bazel_tools//tools/jdk:ijar"), allow_files=True), "_scalac": attr.label(executable=True, cfg="host", default=Label("//src/java/io/bazel/rulesscala/scalac"), allow_files=True), - "_scalalib": attr.label(default=Label("@scala//:lib/scala-library.jar"), single_file=True, allow_files=True), - "_scalacompiler": attr.label(default=Label("@scala//:lib/scala-compiler.jar"), single_file=True, allow_files=True), - "_scalareflect": attr.label(default=Label("@scala//:lib/scala-reflect.jar"), single_file=True, allow_files=True), + "_scalalib": attr.label(default=Label("@scala//:scala-library"), single_file=True, allow_files=True), + "_scalacompiler": attr.label(default=Label("@scala//:scala-compiler"), single_file=True, allow_files=True), + "_scalareflect": attr.label(default=Label("@scala//:scala-reflect"), single_file=True, allow_files=True), "_java": attr.label(executable=True, cfg="host", default=Label("@bazel_tools//tools/jdk:java"), allow_files=True), "_javac": attr.label(executable=True, cfg="host", default=Label("@bazel_tools//tools/jdk:javac"), allow_files=True), "_jar": attr.label(executable=True, cfg="host", default=Label("//src/java/io/bazel/rulesscala/jar:binary_deploy.jar"), allow_files=True), @@ -670,9 +670,9 @@ scala_test = rule( attrs={ "main_class": attr.string(default="org.scalatest.tools.Runner"), "suites": attr.string_list(), - "_scalatest": attr.label(default=Label("@scalatest//file"), single_file=True, allow_files=True), + "_scalatest": attr.label(default=Label("@scalatest//jar"), single_file=True, allow_files=True), "_scalatest_reporter": attr.label(default=Label("//scala/support:test_reporter")), - "_scalaxml": attr.label(default=Label("@scala//:lib/scala-xml_2.11-1.0.4.jar"), single_file=True, allow_files=True), + "_scalaxml": attr.label(default=Label("@scala//:scala-xml"), single_file=True, allow_files=True), } + _implicit_deps + _common_attrs, outputs={ "jar": "%{name}.jar", @@ -703,46 +703,33 @@ def scala_mvn_artifact(artifact): SCALA_BUILD_FILE = """ # scala.BUILD -exports_files([ - "bin/scala", - "bin/scalac", - "bin/scaladoc", - "lib/config-1.2.1.jar", - "lib/jline-2.12.1.jar", - "lib/scala-actors-2.11.0.jar", - "lib/scala-actors-migration_2.11-1.1.0.jar", - "lib/scala-compiler.jar", - "lib/scala-continuations-library_2.11-1.0.2.jar", - "lib/scala-continuations-plugin_2.11.8-1.0.2.jar", - "lib/scala-library.jar", - "lib/scala-parser-combinators_2.11-1.0.4.jar", - "lib/scala-reflect.jar", - "lib/scala-swing_2.11-1.0.2.jar", - "lib/scala-xml_2.11-1.0.4.jar", - "lib/scalap-2.11.8.jar", -]) - -filegroup( +java_import( name = "scala-xml", - srcs = ["lib/scala-xml_2.11-1.0.4.jar"], + jars = ["lib/scala-xml_2.11-1.0.4.jar"], visibility = ["//visibility:public"], ) -filegroup( +java_import( name = "scala-parser-combinators", - srcs = ["lib/scala-parser-combinators_2.11-1.0.4.jar"], + jars = ["lib/scala-parser-combinators_2.11-1.0.4.jar"], visibility = ["//visibility:public"], ) -filegroup( +java_import( name = "scala-library", - srcs = ["lib/scala-library.jar"], + jars = ["lib/scala-library.jar"], visibility = ["//visibility:public"], ) -filegroup( +java_import( + name = "scala-compiler", + jars = ["lib/scala-compiler.jar"], + visibility = ["//visibility:public"], +) + +java_import( name = "scala-reflect", - srcs = ["lib/scala-reflect.jar"], + jars = ["lib/scala-reflect.jar"], visibility = ["//visibility:public"], ) """ @@ -755,7 +742,8 @@ def scala_repositories(): url = "http://bazel-mirror.storage.googleapis.com/downloads.typesafe.com/scala/2.11.8/scala-2.11.8.tgz", build_file_content = SCALA_BUILD_FILE, ) - native.http_file( + + native.http_jar( name = "scalatest", url = "http://bazel-mirror.storage.googleapis.com/oss.sonatype.org/content/groups/public/org/scalatest/scalatest_2.11/2.2.6/scalatest_2.11-2.2.6.jar", sha256 = "f198967436a5e7a69cfd182902adcfbcb9f2e41b349e1a5c8881a2407f615962", @@ -786,6 +774,8 @@ def scala_repositories(): native.bind(name = 'io_bazel_rules_scala/dependency/scala/scala_library', actual = '@scala//:scala-library') + native.bind(name = 'io_bazel_rules_scala/dependency/scala/scala_compiler', actual = '@scala//:scala-compiler') + native.bind(name = 'io_bazel_rules_scala/dependency/scala/scala_reflect', actual = '@scala//:scala-reflect') def scala_export_to_java(name, exports, runtime_deps): @@ -797,7 +787,7 @@ def scala_export_to_java(name, exports, runtime_deps): name = name, # these are the outputs of the scala_library targets jars = jars, - runtime_deps = ["@scala//:lib/scala-library.jar"] + runtime_deps + runtime_deps = ["@scala//:scala-library"] + runtime_deps ) def _sanitize_string_for_usage(s): diff --git a/scala/support/BUILD b/scala/support/BUILD index 36f01aee9..b71008df5 100644 --- a/scala/support/BUILD +++ b/scala/support/BUILD @@ -1,8 +1,11 @@ load("//scala:scala.bzl", "scala_library") - -scala_library(name = "test_reporter", - srcs = ["JUnitXmlReporter.scala"], - deps = ["@scalatest//file", "//src/scala:scala_xml"], - visibility = ["//visibility:public"], - ) +scala_library( + name = "test_reporter", + srcs = ["JUnitXmlReporter.scala"], + visibility = ["//visibility:public"], + deps = [ + "@scala//:scala-xml", + "@scalatest//jar", + ], +) diff --git a/src/java/io/bazel/rulesscala/scalac/BUILD b/src/java/io/bazel/rulesscala/scalac/BUILD index 5c736fb0d..7d19fd772 100644 --- a/src/java/io/bazel/rulesscala/scalac/BUILD +++ b/src/java/io/bazel/rulesscala/scalac/BUILD @@ -1,14 +1,18 @@ -java_binary(name = "scalac", - main_class = "io.bazel.rulesscala.scalac.ScalaCInvoker", - srcs = ["ScalaCInvoker.java", "CompileOptions.java", "ScalacProcessor.java"], - - deps = [ - "@scala//:lib/scala-library.jar", - "@scala//:lib/scala-reflect.jar", - "@scala//:lib/scala-compiler.jar", - "//src/java/io/bazel/rulesscala/jar", - "//src/java/io/bazel/rulesscala/worker", - "//src/java/com/google/devtools/build/lib:worker", - ], - visibility = ["//visibility:public"], +java_binary( + name = "scalac", + srcs = [ + "CompileOptions.java", + "ScalaCInvoker.java", + "ScalacProcessor.java", + ], + main_class = "io.bazel.rulesscala.scalac.ScalaCInvoker", + visibility = ["//visibility:public"], + deps = [ + "//src/java/com/google/devtools/build/lib:worker", + "//src/java/io/bazel/rulesscala/jar", + "//src/java/io/bazel/rulesscala/worker", + "@scala//:scala-compiler", + "@scala//:scala-library", + "@scala//:scala-reflect", + ], ) diff --git a/src/scala/BUILD b/src/scala/BUILD deleted file mode 100644 index dd358530b..000000000 --- a/src/scala/BUILD +++ /dev/null @@ -1,18 +0,0 @@ -java_import( - name = "parser_combinators", - jars = ["@scala//:lib/scala-parser-combinators_2.11-1.0.4.jar"], - visibility = ["//visibility:public"], -) - -java_import( - name = "scala_xml", - jars = ["@scala//:lib/scala-xml_2.11-1.0.4.jar"], - visibility = ["//visibility:public"], -) - -java_import( - name = "scala_compiler", - jars = ["@scala//:lib/scala-compiler.jar"], - visibility = ["//visibility:public"], -) - diff --git a/src/scala/io/bazel/rules_scala/jmh_support/BUILD b/src/scala/io/bazel/rules_scala/jmh_support/BUILD index 4a47b8a04..8c16020bb 100644 --- a/src/scala/io/bazel/rules_scala/jmh_support/BUILD +++ b/src/scala/io/bazel/rules_scala/jmh_support/BUILD @@ -1,23 +1,23 @@ load("//scala:scala.bzl", "scala_binary", "scala_library") scala_library( - name = "benchmark_generator_lib", - srcs = ["BenchmarkGenerator.scala"], - deps = [ - "//external:io_bazel_rules_scala/dependency/jmh/jmh_core", - "//external:io_bazel_rules_scala/dependency/jmh/jmh_generator_asm", - "//external:io_bazel_rules_scala/dependency/jmh/jmh_generator_reflection", - "//external:io_bazel_rules_scala/dependency/jmh/org_ows2_asm_asm", - "//src/scala:scala_compiler", - "//src/java/io/bazel/rulesscala/io_utils", - "//src/java/io/bazel/rulesscala/jar", - ], - visibility = ["//visibility:public"], + name = "benchmark_generator_lib", + srcs = ["BenchmarkGenerator.scala"], + visibility = ["//visibility:public"], + deps = [ + "//external:io_bazel_rules_scala/dependency/jmh/jmh_core", + "//external:io_bazel_rules_scala/dependency/jmh/jmh_generator_asm", + "//external:io_bazel_rules_scala/dependency/jmh/jmh_generator_reflection", + "//external:io_bazel_rules_scala/dependency/jmh/org_ows2_asm_asm", + "//src/java/io/bazel/rulesscala/io_utils", + "//src/java/io/bazel/rulesscala/jar", + "@scala//:scala-compiler", + ], ) scala_binary( - name = "benchmark_generator", - main_class = "io.bazel.rules_scala.jmh_support.BenchmarkGenerator", - deps = [":benchmark_generator_lib"], - visibility = ["//visibility:public"], + name = "benchmark_generator", + main_class = "io.bazel.rules_scala.jmh_support.BenchmarkGenerator", + visibility = ["//visibility:public"], + deps = [":benchmark_generator_lib"], ) diff --git a/src/scala/io/bazel/rules_scala/scrooge_support/BUILD b/src/scala/io/bazel/rules_scala/scrooge_support/BUILD index bacfc4396..94c157ab8 100644 --- a/src/scala/io/bazel/rules_scala/scrooge_support/BUILD +++ b/src/scala/io/bazel/rules_scala/scrooge_support/BUILD @@ -1,23 +1,23 @@ load("//scala:scala.bzl", "scala_library") scala_library( - name = "compiler", - srcs = ["Compiler.scala"], - deps = [ - "//external:io_bazel_rules_scala/dependency/thrift/scrooge_generator", - "//external:io_bazel_rules_scala/dependency/thrift/util_core", - "//external:io_bazel_rules_scala/dependency/thrift/util_logging", - "//src/scala:parser_combinators", - ":focused_zip_importer", - ], - visibility = ["//visibility:public"], + name = "compiler", + srcs = ["Compiler.scala"], + visibility = ["//visibility:public"], + deps = [ + ":focused_zip_importer", + "//external:io_bazel_rules_scala/dependency/thrift/scrooge_generator", + "//external:io_bazel_rules_scala/dependency/thrift/util_core", + "//external:io_bazel_rules_scala/dependency/thrift/util_logging", + "@scala//:scala-parser-combinators", + ], ) scala_library( - name = "focused_zip_importer", - srcs = ["FocusedZipImporter.scala"], - deps = [ - "//external:io_bazel_rules_scala/dependency/thrift/scrooge_generator", - ], - visibility = ["//visibility:public"], + name = "focused_zip_importer", + srcs = ["FocusedZipImporter.scala"], + visibility = ["//visibility:public"], + deps = [ + "//external:io_bazel_rules_scala/dependency/thrift/scrooge_generator", + ], ) diff --git a/src/scala/io/bazel/rules_scala/tut_support/BUILD b/src/scala/io/bazel/rules_scala/tut_support/BUILD index d8cf58d37..7c74acc4c 100644 --- a/src/scala/io/bazel/rules_scala/tut_support/BUILD +++ b/src/scala/io/bazel/rules_scala/tut_support/BUILD @@ -1,19 +1,19 @@ load("//scala:scala.bzl", "scala_binary", "scala_library") scala_library( - name = "tut_compiler_lib", - srcs = ["TutCompiler.scala"], - deps = [ - "//external:io_bazel_rules_scala/dependency/tut/tut_core", - "//src/scala:scala_compiler", - "//src/java/io/bazel/rulesscala/io_utils", - ], - visibility = ["//visibility:public"], + name = "tut_compiler_lib", + srcs = ["TutCompiler.scala"], + visibility = ["//visibility:public"], + deps = [ + "//external:io_bazel_rules_scala/dependency/tut/tut_core", + "//src/java/io/bazel/rulesscala/io_utils", + "@scala//:scala-compiler", + ], ) scala_binary( - name = "tut_compiler", - main_class = "io.bazel.rules_scala.tut_support.TutCompiler", - deps = [":tut_compiler_lib"], - visibility = ["//visibility:public"], + name = "tut_compiler", + main_class = "io.bazel.rules_scala.tut_support.TutCompiler", + visibility = ["//visibility:public"], + deps = [":tut_compiler_lib"], ) diff --git a/src/scala/scripts/BUILD b/src/scala/scripts/BUILD index f54ad091f..bce67e564 100644 --- a/src/scala/scripts/BUILD +++ b/src/scala/scripts/BUILD @@ -1,26 +1,26 @@ load("//scala:scala.bzl", "scala_binary", "scala_library") scala_library( - name = "generator_lib", - srcs = ["TwitterScroogeGenerator.scala"], - deps = [ - "//external:io_bazel_rules_scala/dependency/thrift/scrooge_generator", - "//external:io_bazel_rules_scala/dependency/thrift/util_core", - "//external:io_bazel_rules_scala/dependency/thrift/util_logging", - "//src/scala/io/bazel/rules_scala/scrooge_support:compiler", - "//src/scala:parser_combinators", - "//src/java/io/bazel/rulesscala/jar", - "//src/java/io/bazel/rulesscala/worker", - "//src/java/io/bazel/rulesscala/io_utils", - ], - visibility = ["//visibility:public"], + name = "generator_lib", + srcs = ["TwitterScroogeGenerator.scala"], + visibility = ["//visibility:public"], + deps = [ + "//external:io_bazel_rules_scala/dependency/thrift/scrooge_generator", + "//external:io_bazel_rules_scala/dependency/thrift/util_core", + "//external:io_bazel_rules_scala/dependency/thrift/util_logging", + "//src/java/io/bazel/rulesscala/io_utils", + "//src/java/io/bazel/rulesscala/jar", + "//src/java/io/bazel/rulesscala/worker", + "//src/scala/io/bazel/rules_scala/scrooge_support:compiler", + "@scala//:scala-parser-combinators", + ], ) scala_binary( - name = "generator", - main_class = "scripts.ScroogeWorker", - deps = [ - ":generator_lib", - ], - visibility = ["//visibility:public"], + name = "generator", + main_class = "scripts.ScroogeWorker", + visibility = ["//visibility:public"], + deps = [ + ":generator_lib", + ], ) diff --git a/test/BUILD b/test/BUILD index 8bbfa134e..81d19a0e3 100644 --- a/test/BUILD +++ b/test/BUILD @@ -27,12 +27,16 @@ java_binary( java_import( name = "lib_import", # these are the outputs of the scala_library targets - jars = [":HelloLib_deploy.jar", - "OtherLib_deploy.jar", - "Exported_deploy.jar", - "Runtime_deploy.jar", - ], - runtime_deps = ["org_scala_lang__scala_library", "OtherJavaLib"] + jars = [ + ":HelloLib_deploy.jar", + "OtherLib_deploy.jar", + "Exported_deploy.jar", + "Runtime_deploy.jar", + ], + runtime_deps = [ + "OtherJavaLib", + "@scala//:scala-library", + ], ) scala_export_to_java( @@ -52,11 +56,6 @@ java_binary( deps = [":lib_import_2"], ) -java_import( - name = "org_scala_lang__scala_library", - jars = ["@scala//:lib/scala-library.jar"] -) - scala_binary( name = "ScalaBinary", srcs = ["ScalaBinary.scala"], diff --git a/test/aspect/BUILD b/test/aspect/BUILD new file mode 100644 index 000000000..a6bfe86cc --- /dev/null +++ b/test/aspect/BUILD @@ -0,0 +1,9 @@ +load(":aspect.bzl", "aspect_test") +load("//scala:scala.bzl", "scala_test") + +aspect_test( + name = "test", + scala_rule = ":dummy", +) + +scala_test(name = "dummy") diff --git a/test/aspect/aspect.bzl b/test/aspect/aspect.bzl new file mode 100644 index 000000000..10cae597c --- /dev/null +++ b/test/aspect/aspect.bzl @@ -0,0 +1,52 @@ +attr_aspects = [ + "_scalalib", + "_scalacompiler", + "_scalareflect", + "_scalaxml", +] + +def _aspect_impl(target, ctx): + visited = [target.label.name] + for name in attr_aspects: + if hasattr(ctx.rule.attr, name): + attr = getattr(ctx.rule.attr, name) + if hasattr(attr, "visited"): + visited += attr.visited + return struct(visited = visited) + +test_aspect = aspect( + attr_aspects = attr_aspects, + implementation = _aspect_impl, +) + +def _rule_impl(ctx): + expected = [ + "dummy", + "scala-library", + "scala-compiler", + "scala-reflect", + "scala-xml", + ] + visited = ctx.attr.scala_rule.visited + if visited == expected: + content = "true" + else: + content = """ + echo Expected these rules to be visited by the aspect: 1>&2 + echo %s, 1>&2 + echo but got these instead: 1>&2 + echo %s 1>&2 + false + """ % (', '.join(expected), ', '.join(visited)) + ctx.file_action( + output = ctx.outputs.executable, + content = content, + ) + return struct() + +aspect_test = rule( + implementation = _rule_impl, + attrs = { "scala_rule" : attr.label(aspects = [test_aspect]) }, + test = True, +) +