Skip to content

Commit 7240d24

Browse files
authored
Use java_common.run_ijar (#538)
* Use java_common.run_ijar * run lint fix * try to fix a test * fix up the tests * try one more time
1 parent 3e0713d commit 7240d24

File tree

5 files changed

+27
-95
lines changed

5 files changed

+27
-95
lines changed

scala/private/rule_impls.bzl

Lines changed: 24 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,9 @@ def _add_resources_cmd(ctx):
7070
res_cmd.extend([line])
7171
return "".join(res_cmd)
7272

73-
def _build_nosrc_jar(ctx, buildijar):
73+
def _build_nosrc_jar(ctx):
7474
resources = _add_resources_cmd(ctx)
7575
ijar_cmd = ""
76-
if buildijar:
77-
ijar_cmd = "\ncp {jar_output} {ijar_output}\n".format(
78-
jar_output = ctx.outputs.jar.path, ijar_output = ctx.outputs.ijar.path)
7976

8077
# this ensures the file is not empty
8178
resources += "META-INF/MANIFEST.MF=%s\n" % ctx.outputs.manifest.path
@@ -97,8 +94,6 @@ touch {statsfile}
9794
)
9895

9996
outs = [ctx.outputs.jar, ctx.outputs.statsfile]
100-
if buildijar:
101-
outs.extend([ctx.outputs.ijar])
10297

10398
inputs = ctx.files.resources + [
10499
ctx.outputs.manifest, ctx.executable._zipper, zipper_arg_path
@@ -132,31 +127,11 @@ def _expand_location(ctx, flags):
132127
def _join_path(args, sep = ","):
133128
return sep.join([f.path for f in args])
134129

135-
def compile_scala(ctx,
136-
target_label,
137-
output,
138-
manifest,
139-
statsfile,
140-
sources,
141-
cjars,
142-
all_srcjars,
143-
buildijar,
144-
transitive_compile_jars,
145-
plugins,
146-
resource_strip_prefix,
147-
resources,
148-
resource_jars,
149-
labels,
150-
in_scalacopts,
151-
print_compile_time,
152-
expect_java_output,
153-
scalac_jvm_flags = []):
154-
ijar_output_path = ""
155-
ijar_cmd_path = ""
156-
if buildijar:
157-
ijar_output_path = ctx.outputs.ijar.path
158-
ijar_cmd_path = ctx.executable._ijar.path
159-
130+
def compile_scala(ctx, target_label, output, manifest, statsfile, sources,
131+
cjars, all_srcjars, transitive_compile_jars, plugins,
132+
resource_strip_prefix, resources, resource_jars, labels,
133+
in_scalacopts, print_compile_time, expect_java_output,
134+
scalac_jvm_flags):
160135
# look for any plugins:
161136
plugins = _collect_plugin_paths(plugins)
162137
dependency_analyzer_plugin_jars = []
@@ -204,10 +179,7 @@ CurrentTarget: {current_target}
204179
scalac_args = """
205180
Classpath: {cp}
206181
ClasspathResourceSrcs: {classpath_resource_src}
207-
EnableIjar: {enableijar}
208182
Files: {files}
209-
IjarCmdPath: {ijar_cmd_path}
210-
IjarOutput: {ijar_out}
211183
JarOutput: {out}
212184
Manifest: {manifest}
213185
Plugins: {plugin_arg}
@@ -232,9 +204,6 @@ StatsfileOutput: {statsfile_output}
232204
cp = compiler_classpath,
233205
classpath_resource_src = _join_path(classpath_resources),
234206
files = _join_path(sources),
235-
enableijar = buildijar,
236-
ijar_out = ijar_output_path,
237-
ijar_cmd_path = ijar_cmd_path,
238207
srcjars = _join_path(all_srcjars.to_list()),
239208
# the resource paths need to be aligned in order
240209
resource_src = ",".join([f.path for f in resources]),
@@ -254,12 +223,10 @@ StatsfileOutput: {statsfile_output}
254223
output = argfile, content = scalac_args + optional_scalac_args)
255224

256225
outs = [output, statsfile]
257-
if buildijar:
258-
outs.extend([ctx.outputs.ijar])
259-
ins = (
260-
compiler_classpath_jars.to_list() + all_srcjars.to_list() + list(sources)
261-
+ plugins_list + dependency_analyzer_plugin_jars + classpath_resources +
262-
resources + resource_jars + [manifest, ctx.executable._ijar, argfile])
226+
ins = (compiler_classpath_jars.to_list() + all_srcjars.to_list() +
227+
list(sources) + plugins_list + dependency_analyzer_plugin_jars +
228+
classpath_resources + resources + resource_jars + [manifest, argfile])
229+
263230
ctx.actions.run(
264231
inputs = ins,
265232
outputs = outs,
@@ -334,7 +301,7 @@ def _compile_or_empty(ctx, manifest, jars, srcjars, buildijar,
334301
implicit_junit_deps_needed_for_java_compilation):
335302
# We assume that if a srcjar is present, it is not empty
336303
if len(ctx.files.srcs) + len(srcjars.to_list()) == 0:
337-
_build_nosrc_jar(ctx, buildijar)
304+
_build_nosrc_jar(ctx)
338305
# no need to build ijar when empty
339306
return struct(
340307
ijar = ctx.outputs.jar,
@@ -355,28 +322,30 @@ def _compile_or_empty(ctx, manifest, jars, srcjars, buildijar,
355322
f for f in ctx.files.srcs if f.basename.endswith(_scala_extension)
356323
] + java_srcs
357324
compile_scala(ctx, ctx.label, ctx.outputs.jar, manifest,
358-
ctx.outputs.statsfile, sources, jars, all_srcjars, buildijar,
325+
ctx.outputs.statsfile, sources, jars, all_srcjars,
359326
transitive_compile_jars, ctx.attr.plugins,
360327
ctx.attr.resource_strip_prefix, ctx.files.resources,
361328
ctx.files.resource_jars, jars2labels, ctx.attr.scalacopts,
362329
ctx.attr.print_compile_time, ctx.attr.expect_java_output,
363330
ctx.attr.scalac_jvm_flags)
364-
# compile the java now
365-
if buildijar:
366-
scala_output = ctx.outputs.ijar
367-
else:
368-
scala_output = ctx.outputs.jar
369-
java_jar = try_to_compile_java_jar(
370-
ctx, scala_output, all_srcjars, java_srcs,
371-
implicit_junit_deps_needed_for_java_compilation)
372331

373-
ijar = None
332+
# build ijar if needed
374333
if buildijar:
375-
ijar = ctx.outputs.ijar
334+
ijar = java_common.run_ijar(
335+
ctx.actions,
336+
jar = ctx.outputs.jar,
337+
target_label = ctx.label,
338+
java_toolchain = ctx.attr._java_toolchain)
376339
else:
377340
# macro code needs to be available at compile-time,
378341
# so set ijar == jar
379342
ijar = ctx.outputs.jar
343+
344+
# compile the java now
345+
java_jar = try_to_compile_java_jar(
346+
ctx, ijar, all_srcjars, java_srcs,
347+
implicit_junit_deps_needed_for_java_compilation)
348+
380349
full_jars = [ctx.outputs.jar]
381350
ijars = [ijar]
382351
if java_jar:

scala/scala.bzl

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@ _implicit_deps = {
2525
cfg = "host",
2626
default = Label("@bazel_tools//tools/jdk:singlejar"),
2727
allow_files = True),
28-
"_ijar": attr.label(
29-
executable = True,
30-
cfg = "host",
31-
default = Label("@bazel_tools//tools/jdk:ijar"),
32-
allow_files = True),
3328
"_scalac": attr.label(
3429
executable = True,
3530
cfg = "host",
@@ -146,9 +141,6 @@ _common_outputs = {
146141

147142
_library_outputs = {}
148143
_library_outputs.update(_common_outputs)
149-
_library_outputs.update({
150-
"ijar": "%{name}_ijar.jar",
151-
})
152144

153145
_scala_library_attrs = {}
154146
_scala_library_attrs.update(_implicit_deps)

src/java/io/bazel/rulesscala/scalac/CompileOptions.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@ public class CompileOptions {
1414
public final String classpath;
1515
public final String[] files;
1616
public final String[] sourceJars;
17-
public final boolean iJarEnabled;
18-
public final String ijarOutput;
19-
public final String ijarCmdPath;
2017
public final String[] javaFiles;
2118
public final Map<String, Resource> resourceFiles;
2219
public final String resourceStripPrefix;
@@ -49,16 +46,6 @@ public CompileOptions(List<String> args) {
4946
}
5047

5148
sourceJars = getCommaList(argMap, "SourceJars");
52-
iJarEnabled = booleanGetOrFalse(argMap, "EnableIjar");
53-
if (iJarEnabled) {
54-
ijarOutput =
55-
getOrError(argMap, "IjarOutput", "Missing required arg ijarOutput when ijar enabled");
56-
ijarCmdPath =
57-
getOrError(argMap, "IjarCmdPath", "Missing required arg ijarCmdPath when ijar enabled");
58-
} else {
59-
ijarOutput = null;
60-
ijarCmdPath = null;
61-
}
6249
resourceFiles = getResources(argMap);
6350
resourceStripPrefix = getOrEmpty(argMap, "ResourceStripPrefix");
6451
resourceJars = getCommaList(argMap, "ResourceJars");

src/java/io/bazel/rulesscala/scalac/ScalacProcessor.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,6 @@ public void processRequest(List<String> args) throws Exception {
7979
/** Now build the output jar */
8080
String[] jarCreatorArgs = {"-m", ops.manifestPath, outputPath.toString(), tmpPath.toString()};
8181
JarCreator.main(jarCreatorArgs);
82-
83-
/** Now build the output ijar */
84-
if (ops.iJarEnabled) {
85-
Process iostat =
86-
new ProcessBuilder()
87-
.command(ops.ijarCmdPath, ops.outputName, ops.ijarOutput)
88-
.inheritIO()
89-
.start();
90-
int exitCode = iostat.waitFor();
91-
if (exitCode != 0) {
92-
throw new RuntimeException("ijar process failed!");
93-
}
94-
}
9582
} finally {
9683
removeTmp(tmpPath);
9784
}

test_rules_scala.sh

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -176,11 +176,9 @@ test_scala_library_expect_failure_on_missing_direct_deps_warn_mode() {
176176

177177
test_scala_library_expect_failure_on_missing_direct_java() {
178178
dependency_target='//test_expect_failure/missing_direct_deps/internal_deps:transitive_dependency'
179-
#since bazel 0.12.0 the labels are only emmitted if ijar is in play
180-
dependency_file='test_expect_failure/missing_direct_deps/internal_deps/transitive_dependency_ijar.jar'
181179
test_target='//test_expect_failure/missing_direct_deps/internal_deps:transitive_dependency_java_user'
182180

183-
expected_message="$dependency_file.*$test_target"
181+
expected_message="$dependency_target.*$test_target"
184182

185183
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message "${expected_message}" $test_target "--strict_java_deps=error"
186184
}
@@ -194,7 +192,7 @@ test_scala_library_expect_failure_on_java_in_src_jar_when_disabled() {
194192
}
195193

196194
test_scala_library_expect_better_failure_message_on_missing_transitive_dependency_labels_from_other_jvm_rules() {
197-
transitive_target='.*transitive_dependency_ijar.jar'
195+
transitive_target='.*transitive_dependency-ijar.jar'
198196
direct_target='//test_expect_failure/missing_direct_deps/internal_deps:direct_java_provider_dependency'
199197
test_target='//test_expect_failure/missing_direct_deps/internal_deps:dependent_on_some_java_provider'
200198

@@ -205,10 +203,9 @@ test_scala_library_expect_better_failure_message_on_missing_transitive_dependenc
205203

206204
test_scala_library_expect_failure_on_missing_direct_deps_warn_mode_java() {
207205
dependency_target='//test_expect_failure/missing_direct_deps/internal_deps:transitive_dependency'
208-
dependency_file='test_expect_failure/missing_direct_deps/internal_deps/transitive_dependency_ijar.jar'
209206
test_target='//test_expect_failure/missing_direct_deps/internal_deps:transitive_dependency_java_user'
210207

211-
local expected_message="$dependency_file.*$test_target"
208+
local expected_message="$dependency_target.*$test_target"
212209

213210
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message "${expected_message}" ${test_target} "--strict_java_deps=warn" "ne"
214211
}

0 commit comments

Comments
 (0)