Add make variables for runfiles location of $(JAVABASE) to support --no_legacy_external_runfiles. (#272) Add make variables for runfiles locations of `$(JAVA)` and `$(JAVABASE)`. These are needed to access these paths when passing them to test rules via `env` when using `--no_legacy_external_runfiles`. The original make variables still work in exec contexts such as genrules. Closes #272 COPYBARA_INTEGRATE_REVIEW=https://github.com/bazelbuild/rules_java/pull/272 from thirtyseven:patch-2 438b659093cb8bc4a1d0b1560a6a22dee463405f PiperOrigin-RevId: 726438570 Change-Id: I74e0815e1e71547c653a7b53bff801c62392f075
diff --git a/java/common/rules/java_runtime.bzl b/java/common/rules/java_runtime.bzl index 52b1301..85acb22 100644 --- a/java/common/rules/java_runtime.bzl +++ b/java/common/rules/java_runtime.bzl
@@ -152,6 +152,8 @@ platform_common.TemplateVariableInfo({ "JAVA": java_binary_exec_path, "JAVABASE": java_home, + "JAVA_ROOTPATH": java_binary_runfiles_path, + "JAVABASE_ROOTPATH": java_home_runfiles_path, }), ToolchainInfo(java_runtime = java_runtime_info), ]
diff --git a/test/repo/BUILD.bazel b/test/repo/BUILD.bazel index 7f6887a..6522f97 100644 --- a/test/repo/BUILD.bazel +++ b/test/repo/BUILD.bazel
@@ -1,5 +1,6 @@ load("@rules_java//java:defs.bzl", "java_binary", "java_library", "java_test") # copybara-use-repo-external-label load("@rules_java//toolchains:default_java_toolchain.bzl", "default_java_toolchain") # copybara-use-repo-external-label +load("@rules_shell//shell:sh_test.bzl", "sh_test") java_library( name = "lib", @@ -24,6 +25,28 @@ ], ) +genrule( + name = "MakeVarGenruleTest", + outs = ["MakeVarGenruleTestSuccess"], + cmd = "test -f $(JAVA) && test -d $(JAVABASE) && touch $@", + toolchains = ["@rules_java//toolchains:current_java_runtime"], + tools = ["@rules_java//toolchains:current_java_runtime"], +) + +sh_test( + name = "MakeVarTest", + srcs = ["src/MakeVarTest.sh"], + data = [ + "MakeVarGenruleTestSuccess", + "@rules_java//toolchains:current_java_runtime", + ], + env = { + "JAVA_ROOTPATH": "$(JAVA_ROOTPATH)", + "JAVABASE_ROOTPATH": "$(JAVABASE_ROOTPATH)", + }, + toolchains = ["@rules_java//toolchains:current_java_runtime"], +) + default_java_toolchain( name = "my_funky_toolchain", bootclasspath = ["@bazel_tools//tools/jdk:platformclasspath"],
diff --git a/test/repo/MODULE.bazel b/test/repo/MODULE.bazel index 1be13d4..85f9928 100644 --- a/test/repo/MODULE.bazel +++ b/test/repo/MODULE.bazel
@@ -44,3 +44,5 @@ ) register_toolchains("//:all") + +bazel_dep(name = "rules_shell", version = "0.4.0", dev_dependency = True)
diff --git a/test/repo/WORKSPACE b/test/repo/WORKSPACE index 872e89a..08589c2 100644 --- a/test/repo/WORKSPACE +++ b/test/repo/WORKSPACE
@@ -25,3 +25,18 @@ name = "my_jar", urls = ["file:///tmp/my_jar.jar"], ) + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "rules_shell", + sha256 = "3e114424a5c7e4fd43e0133cc6ecdfe54e45ae8affa14fadd839f29901424043", + strip_prefix = "rules_shell-0.4.0", + url = "https://github.com/bazelbuild/rules_shell/releases/download/v0.4.0/rules_shell-v0.4.0.tar.gz", +) + +load("@rules_shell//shell:repositories.bzl", "rules_shell_dependencies", "rules_shell_toolchains") + +rules_shell_dependencies() + +rules_shell_toolchains()
diff --git a/test/repo/src/MakeVarTest.sh b/test/repo/src/MakeVarTest.sh new file mode 100755 index 0000000..7307dfd --- /dev/null +++ b/test/repo/src/MakeVarTest.sh
@@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +if [ ! -x "$JAVABASE_ROOTPATH/bin/java" ]; then + echo '$JAVABASE_RUNFILES does not point to a working JRE' && exit 1 +fi + +echo $JAVA_ROOTPATH +if [ ! -x "$JAVA_ROOTPATH" ]; then + echo '$JAVA_ROOTPATH does not exist' && exit 1 +fi \ No newline at end of file
diff --git a/toolchains/java_toolchain_alias.bzl b/toolchains/java_toolchain_alias.bzl index 3488925..54973c0 100644 --- a/toolchains/java_toolchain_alias.bzl +++ b/toolchains/java_toolchain_alias.bzl
@@ -26,6 +26,8 @@ platform_common.TemplateVariableInfo({ "JAVA": str(toolchain.java_executable_exec_path), "JAVABASE": str(toolchain.java_home), + "JAVA_ROOTPATH": str(toolchain.java_executable_runfiles_path), + "JAVABASE_ROOTPATH": str(toolchain.java_home_runfiles_path), }), # See b/65239471 for related discussion of handling toolchain runfiles/data. DefaultInfo(