Skip to content
Closed
16 changes: 2 additions & 14 deletions examples/testing/multi_frameworks_toolchain/BUILD
Original file line number Diff line number Diff line change
@@ -1,25 +1,13 @@
load("@io_bazel_rules_scala//scala:scala.bzl", "setup_scala_testing_toolchain")
load(":deps.bzl", "scalatest_classpath")

setup_scala_testing_toolchain(
name = "testing_toolchain",
junit_classpath = [
"@io_bazel_rules_scala_junit_junit",
"@io_bazel_rules_scala_org_hamcrest_hamcrest_core",
],
scalatest_classpath = [
"@io_bazel_rules_scala_scalactic",
"@io_bazel_rules_scala_scalatest",
"@io_bazel_rules_scala_scalatest_compatible",
"@io_bazel_rules_scala_scalatest_core",
"@io_bazel_rules_scala_scalatest_featurespec",
"@io_bazel_rules_scala_scalatest_flatspec",
"@io_bazel_rules_scala_scalatest_freespec",
"@io_bazel_rules_scala_scalatest_funspec",
"@io_bazel_rules_scala_scalatest_funsuite",
"@io_bazel_rules_scala_scalatest_matchers_core",
"@io_bazel_rules_scala_scalatest_mustmatchers",
"@io_bazel_rules_scala_scalatest_shouldmatchers",
],
scalatest_classpath = scalatest_classpath(),
specs2_classpath = [
"@io_bazel_rules_scala_org_specs2_specs2_common",
"@io_bazel_rules_scala_org_specs2_specs2_core",
Expand Down
20 changes: 20 additions & 0 deletions examples/testing/multi_frameworks_toolchain/deps.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION")
load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "version_suffix")

_SCALATEST_CLASSPATH = [
"@io_bazel_rules_scala_scalactic",
"@io_bazel_rules_scala_scalatest",
"@io_bazel_rules_scala_scalatest_compatible",
"@io_bazel_rules_scala_scalatest_core",
"@io_bazel_rules_scala_scalatest_featurespec",
"@io_bazel_rules_scala_scalatest_flatspec",
"@io_bazel_rules_scala_scalatest_freespec",
"@io_bazel_rules_scala_scalatest_funspec",
"@io_bazel_rules_scala_scalatest_funsuite",
"@io_bazel_rules_scala_scalatest_matchers_core",
"@io_bazel_rules_scala_scalatest_mustmatchers",
"@io_bazel_rules_scala_scalatest_shouldmatchers",
]

def scalatest_classpath():
return [dep + version_suffix(SCALA_VERSION) for dep in _SCALATEST_CLASSPATH]
102 changes: 3 additions & 99 deletions scala/BUILD
Original file line number Diff line number Diff line change
@@ -1,68 +1,12 @@
load("@rules_java//java:defs.bzl", "java_import", "java_library")
load("//scala:providers.bzl", "declare_deps_provider")
load("//scala:scala.bzl", "setup_scala_toolchain")
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_MAJOR_VERSION")
load("//scala:scala.bzl", "declare_dep_providers", "setup_scala_toolchains")

toolchain_type(
name = "toolchain_type",
visibility = ["//visibility:public"],
)

_SCALA_COMPILE_CLASSPATH_DEPS = [
"@io_bazel_rules_scala_scala_compiler",
"@io_bazel_rules_scala_scala_library",
] + (["@io_bazel_rules_scala_scala_reflect"] if SCALA_MAJOR_VERSION.startswith("2") else [
"@io_bazel_rules_scala_scala_interfaces",
"@io_bazel_rules_scala_scala_tasty_core",
"@io_bazel_rules_scala_scala_asm",
"@io_bazel_rules_scala_scala_library_2",
])

_SCALA_LIBRARY_CLASSPATH_DEPS = [
"@io_bazel_rules_scala_scala_library",
] + (["@io_bazel_rules_scala_scala_reflect"] if SCALA_MAJOR_VERSION.startswith("2") else [
"@io_bazel_rules_scala_scala_library_2",
])

_SCALA_MACRO_CLASSPATH_DEPS = [
"@io_bazel_rules_scala_scala_library",
] + (["@io_bazel_rules_scala_scala_reflect"] if SCALA_MAJOR_VERSION.startswith("2") else [
"@io_bazel_rules_scala_scala_library_2",
])

_PARSER_COMBINATORS_DEPS = ["@io_bazel_rules_scala_scala_parser_combinators"]

_SCALA_XML_DEPS = ["@io_bazel_rules_scala_scala_xml"]

_SEMANTICDB_DEPS = ["@org_scalameta_semanticdb_scalac"] if SCALA_MAJOR_VERSION.startswith("2") else []

setup_scala_toolchain(
name = "default_toolchain",
scala_compile_classpath = _SCALA_COMPILE_CLASSPATH_DEPS,
scala_library_classpath = _SCALA_LIBRARY_CLASSPATH_DEPS,
scala_macro_classpath = _SCALA_MACRO_CLASSPATH_DEPS,
use_argument_file_in_runner = True,
)

setup_scala_toolchain(
name = "unused_dependency_checker_error_toolchain",
dependency_tracking_method = "ast-plus",
scala_compile_classpath = _SCALA_COMPILE_CLASSPATH_DEPS,
scala_library_classpath = _SCALA_LIBRARY_CLASSPATH_DEPS,
scala_macro_classpath = _SCALA_MACRO_CLASSPATH_DEPS,
unused_dependency_checker_mode = "error",
)

setup_scala_toolchain(
name = "minimal_direct_source_deps",
dependency_mode = "plus-one",
dependency_tracking_method = "ast",
scala_compile_classpath = _SCALA_COMPILE_CLASSPATH_DEPS,
scala_library_classpath = _SCALA_LIBRARY_CLASSPATH_DEPS,
scala_macro_classpath = _SCALA_MACRO_CLASSPATH_DEPS,
strict_deps_mode = "error",
unused_dependency_checker_mode = "error",
)
setup_scala_toolchains()

java_import(
name = "bazel_test_runner_deploy",
Expand All @@ -76,44 +20,4 @@ java_library(
visibility = ["//visibility:public"],
)

declare_deps_provider(
name = "scala_compile_classpath_provider",
deps_id = "scala_compile_classpath",
visibility = ["//visibility:public"],
deps = _SCALA_COMPILE_CLASSPATH_DEPS,
)

declare_deps_provider(
name = "scala_library_classpath_provider",
deps_id = "scala_library_classpath",
visibility = ["//visibility:public"],
deps = _SCALA_LIBRARY_CLASSPATH_DEPS,
)

declare_deps_provider(
name = "scala_macro_classpath_provider",
deps_id = "scala_macro_classpath",
visibility = ["//visibility:public"],
deps = _SCALA_MACRO_CLASSPATH_DEPS,
)

declare_deps_provider(
name = "scala_xml_provider",
deps_id = "scala_xml",
visibility = ["//visibility:public"],
deps = _SCALA_XML_DEPS,
)

declare_deps_provider(
name = "parser_combinators_provider",
deps_id = "parser_combinators",
visibility = ["//visibility:public"],
deps = _PARSER_COMBINATORS_DEPS,
)

declare_deps_provider(
name = "semanticdb_provider",
deps_id = "semanticdb",
visibility = ["//visibility:public"],
deps = _SEMANTICDB_DEPS,
)
declare_dep_providers()
15 changes: 6 additions & 9 deletions scala/private/common_attributes.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ load(
"@io_bazel_rules_scala//scala:plusone.bzl",
_collect_plus_one_deps_aspect = "collect_plus_one_deps_aspect",
)
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSIONS")
load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "version_suffix")

common_attrs_for_plugin_bootstrapping = {
"srcs": attr.label_list(allow_files = [
Expand Down Expand Up @@ -55,12 +57,8 @@ common_attrs = {}
common_attrs.update(common_attrs_for_plugin_bootstrapping)

common_attrs.update({
"_dependency_analyzer_plugin": attr.label(
default = Label(
"@io_bazel_rules_scala//third_party/dependency_analyzer/src/main:dependency_analyzer",
),
allow_files = [".jar"],
mandatory = False,
"_dependency_analyzer_plugin": attr.label_list(
default = [Label("@io_bazel_rules_scala//third_party/dependency_analyzer/src/main:dependency_analyzer" + version_suffix(scala_version)) for scala_version in SCALA_VERSIONS],
),
"unused_dependency_checker_mode": attr.string(
values = [
Expand All @@ -84,10 +82,9 @@ implicit_deps = {
"_java_runtime": attr.label(
default = Label("@bazel_tools//tools/jdk:current_java_runtime"),
),
"_scalac": attr.label(
executable = True,
"_scalac": attr.label_list(
cfg = "exec",
default = Label("@io_bazel_rules_scala//src/java/io/bazel/rulesscala/scalac"),
default = [Label("@io_bazel_rules_scala//src/java/io/bazel/rulesscala/scalac:scalac" + version_suffix(version)) for version in SCALA_VERSIONS],
allow_files = True,
),
"_exe": attr.label(
Expand Down
88 changes: 46 additions & 42 deletions scala/private/macros/scala_repositories.bzl
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
load(
"@io_bazel_rules_scala//scala:scala_cross_version.bzl",
"extract_major_version",
"extract_minor_version",
"version_suffix",
_default_maven_server_urls = "default_maven_server_urls",
)
load("//third_party/repositories:repositories.bzl", "repositories")
load(
"@io_bazel_rules_scala_config//:config.bzl",
"SCALA_MAJOR_VERSION",
"SCALA_MINOR_VERSION",
"SCALA_VERSION",
)
load("//third_party/repositories:repositories.bzl", "toolchain_repositories")
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSIONS")

def _dt_patched_compiler_impl(rctx):
# Need to give the file a .zip extension so rctx.extract knows what type of archive it is
Expand Down Expand Up @@ -37,16 +35,18 @@ def _validate_scalac_srcjar(srcjar):
count += 1
return count == 1

def dt_patched_compiler_setup(scala_compiler_srcjar = None):
patch = "@io_bazel_rules_scala//dt_patches:dt_compiler_%s.patch" % SCALA_MAJOR_VERSION
def dt_patched_compiler_setup(scala_version, scala_compiler_srcjar = None):
scala_major_version = extract_major_version(scala_version)
scala_minor_version = extract_minor_version(scala_version)
patch = "@io_bazel_rules_scala//dt_patches:dt_compiler_%s.patch" % scala_major_version

minor_version = int(SCALA_MINOR_VERSION)
minor_version = int(scala_minor_version)

if SCALA_MAJOR_VERSION == "2.12":
if scala_major_version == "2.12":
if minor_version >= 1 and minor_version <= 7:
patch = "@io_bazel_rules_scala//dt_patches:dt_compiler_%s.1.patch" % SCALA_MAJOR_VERSION
patch = "@io_bazel_rules_scala//dt_patches:dt_compiler_%s.1.patch" % scala_major_version
elif minor_version <= 11:
patch = "@io_bazel_rules_scala//dt_patches:dt_compiler_%s.8.patch" % SCALA_MAJOR_VERSION
patch = "@io_bazel_rules_scala//dt_patches:dt_compiler_%s.8.patch" % scala_major_version

build_file_content = "\n".join([
"package(default_visibility = [\"//visibility:public\"])",
Expand All @@ -56,7 +56,7 @@ def dt_patched_compiler_setup(scala_compiler_srcjar = None):
")",
])
default_scalac_srcjar = {
"url": "https://repo1.maven.org/maven2/org/scala-lang/scala-compiler/%s/scala-compiler-%s-sources.jar" % (SCALA_VERSION, SCALA_VERSION),
"url": "https://repo1.maven.org/maven2/org/scala-lang/scala-compiler/%s/scala-compiler-%s-sources.jar" % (scala_version, scala_version),
}
srcjar = scala_compiler_srcjar if scala_compiler_srcjar != None else default_scalac_srcjar
_validate_scalac_srcjar(srcjar) or fail(
Expand All @@ -65,14 +65,14 @@ def dt_patched_compiler_setup(scala_compiler_srcjar = None):
)
if "label" in srcjar:
dt_patched_compiler(
name = "scala_compiler_source",
name = "scala_compiler_source" + version_suffix(scala_version),
build_file_content = build_file_content,
patch = patch,
srcjar = srcjar["label"],
)
else:
http_archive(
name = "scala_compiler_source",
name = "scala_compiler_source" + version_suffix(scala_version),
build_file_content = build_file_content,
patches = [patch],
url = srcjar.get("url"),
Expand Down Expand Up @@ -120,38 +120,23 @@ def rules_scala_setup(scala_compiler_srcjar = None):
],
)

dt_patched_compiler_setup(scala_compiler_srcjar)

ARTIFACT_IDS = [
"io_bazel_rules_scala_scala_library",
"io_bazel_rules_scala_scala_compiler",
"io_bazel_rules_scala_scala_reflect",
"io_bazel_rules_scala_scala_xml",
"io_bazel_rules_scala_scala_parser_combinators",
"org_scalameta_semanticdb_scalac",
] if SCALA_MAJOR_VERSION.startswith("2") else [
"io_bazel_rules_scala_scala_library",
"io_bazel_rules_scala_scala_compiler",
"io_bazel_rules_scala_scala_interfaces",
"io_bazel_rules_scala_scala_tasty_core",
"io_bazel_rules_scala_scala_asm",
"io_bazel_rules_scala_scala_xml",
"io_bazel_rules_scala_scala_parser_combinators",
"io_bazel_rules_scala_scala_library_2",
]
for scala_version in SCALA_VERSIONS:
dt_patched_compiler_setup(scala_version, scala_compiler_srcjar)

def rules_scala_toolchain_deps_repositories(
maven_servers = _default_maven_server_urls(),
overriden_artifacts = {},
fetch_sources = False,
validate_scala_version = True):
repositories(
for_artifact_ids = ARTIFACT_IDS,
maven_servers = maven_servers,
fetch_sources = fetch_sources,
overriden_artifacts = overriden_artifacts,
validate_scala_version = validate_scala_version,
)
for scala_version in SCALA_VERSIONS:
toolchain_repositories(
scala_version,
for_artifact_ids = _artifact_ids(scala_version),
maven_servers = maven_servers,
fetch_sources = fetch_sources,
overriden_artifacts = overriden_artifacts,
validate_scala_version = validate_scala_version,
)

def scala_repositories(
maven_servers = _default_maven_server_urls(),
Expand All @@ -168,3 +153,22 @@ def scala_repositories(
overriden_artifacts,
fetch_sources,
)

def _artifact_ids(scala_version):
return [
"io_bazel_rules_scala_scala_library",
"io_bazel_rules_scala_scala_compiler",
"io_bazel_rules_scala_scala_reflect",
"io_bazel_rules_scala_scala_xml",
"io_bazel_rules_scala_scala_parser_combinators",
"org_scalameta_semanticdb_scalac",
] if scala_version.startswith("2") else [
"io_bazel_rules_scala_scala_library",
"io_bazel_rules_scala_scala_compiler",
"io_bazel_rules_scala_scala_interfaces",
"io_bazel_rules_scala_scala_tasty_core",
"io_bazel_rules_scala_scala_asm",
"io_bazel_rules_scala_scala_xml",
"io_bazel_rules_scala_scala_parser_combinators",
"io_bazel_rules_scala_scala_library_2",
]
Loading