diff --git a/scala_proto/scala_proto.bzl b/scala_proto/scala_proto.bzl index 81fe08eb8..a9b04de94 100644 --- a/scala_proto/scala_proto.bzl +++ b/scala_proto/scala_proto.bzl @@ -28,18 +28,6 @@ def scala_proto_repositories( url = "http://central.maven.org/maven2/", ) - native.maven_jar( - name = "scala_proto_rules_protoc_jar", - artifact = "com.github.os72:protoc-jar:3.6.0.1", - sha1 = "db8a7cc739f5b332e7f32fd5dfacae68f0062581", - server = "scala_proto_deps_maven_server", - ) - - native.bind( - name = "io_bazel_rules_scala/dependency/proto/protoc", - actual = "@scala_proto_rules_protoc_jar//jar", - ) - scala_jar_shas = { "2.11": { "scalapb_plugin": "b67e563d06f1bbb6ea704a063760a85ec7fb5809828402364d5418dd1c5cab06", @@ -444,7 +432,7 @@ def _gen_proto_srcjar_impl(ctx): deps_jars = collect_jars(jvm_deps) - worker_content = "{output}\n{paths}\n{flags_arg}\n{packages}\n{inputs}".format( + worker_content = "{output}\n{paths}\n{flags_arg}\n{packages}\n{inputs}\n{protoc}".format( output = ctx.outputs.srcjar.path, paths = _colon_paths(acc_imports.to_list()), # Command line args to worker cannot be empty so using padding @@ -453,7 +441,8 @@ def _gen_proto_srcjar_impl(ctx): packages = "-" + ":".join(depset(transitive = transitive_proto_paths).to_list()), # Pass inputs seprately because they doesn't always match to imports (ie blacklisted protos are excluded) - inputs = ":".join(sorted([f.path for f in _retained_protos(acc_imports, ctx.attr.blacklisted_protos)])) + inputs = ":".join(sorted([f.path for f in _retained_protos(acc_imports, ctx.attr.blacklisted_protos)])), + protoc = ctx.executable._protoc.path ) argfile = ctx.actions.declare_file( "%s_worker_input" % ctx.label.name, @@ -462,7 +451,7 @@ def _gen_proto_srcjar_impl(ctx): ctx.actions.write(output = argfile, content = worker_content) ctx.actions.run( executable = ctx.executable.generator, - inputs = depset([argfile], transitive = [acc_imports]), + inputs = depset([argfile, ctx.executable._protoc], transitive = [acc_imports]), outputs = [ctx.outputs.srcjar], mnemonic = "ProtoScalaPBRule", progress_message = "creating scalapb files %s" % ctx.label, @@ -496,6 +485,7 @@ scala_proto_srcjar = rule( allow_files = True, ), "blacklisted_protos" : attr.label_list(providers = [["proto"]]), + "_protoc": attr.label(executable = True, cfg = "host", default = "@com_google_protobuf//:protoc") }, outputs = { "srcjar": "lib%{name}.srcjar", diff --git a/src/scala/scripts/BUILD b/src/scala/scripts/BUILD index e4ba98d4a..01d989ca7 100644 --- a/src/scala/scripts/BUILD +++ b/src/scala/scripts/BUILD @@ -37,7 +37,6 @@ scala_library( ], deps = [ ":scala_proto_request_extractor", - "//external:io_bazel_rules_scala/dependency/proto/protoc", "//external:io_bazel_rules_scala/dependency/proto/protoc_bridge", "//external:io_bazel_rules_scala/dependency/proto/scalapb_plugin", "//external:io_bazel_rules_scala/dependency/proto/scalapbc", diff --git a/src/scala/scripts/PBGenerateRequest.scala b/src/scala/scripts/PBGenerateRequest.scala index ec2a7d6af..744b64b17 100644 --- a/src/scala/scripts/PBGenerateRequest.scala +++ b/src/scala/scripts/PBGenerateRequest.scala @@ -2,7 +2,7 @@ package scripts import java.nio.file.{Files, Path, Paths} -class PBGenerateRequest(val jarOutput: String, val scalaPBOutput: Path, val scalaPBArgs: List[String]) +class PBGenerateRequest(val jarOutput: String, val scalaPBOutput: Path, val scalaPBArgs: List[String], val protoc: Path) object PBGenerateRequest { @@ -42,7 +42,8 @@ object PBGenerateRequest { val scalaPBOutput = Files.createTempDirectory(tmp, "bazelscalapb") val flagPrefix = flagOpt.fold("")(_ + ":") val scalaPBArgs = s"--scala_out=$flagPrefix$scalaPBOutput" :: (padWithProtoPathPrefix(transitiveProtoPaths) ++ imports ++ protoFiles) - new PBGenerateRequest(jarOutput, scalaPBOutput, scalaPBArgs) + val protoc = Paths.get(args.get(5)) + new PBGenerateRequest(jarOutput, scalaPBOutput, scalaPBArgs, protoc) } private def padWithProtoPathPrefix(transitiveProtoPathFlags: List[String]) = diff --git a/src/scala/scripts/ScalaPBGenerator.scala b/src/scala/scripts/ScalaPBGenerator.scala index 1b9826f7f..4627e16a7 100644 --- a/src/scala/scripts/ScalaPBGenerator.scala +++ b/src/scala/scripts/ScalaPBGenerator.scala @@ -3,13 +3,11 @@ package scripts import java.io.PrintStream import java.nio.file.Path -import com.trueaccord.scalapb.{ScalaPBC, ScalaPbcException} import io.bazel.rulesscala.io_utils.DeleteRecursively import io.bazel.rulesscala.jar.JarCreator import io.bazel.rulesscala.worker.{GenericWorker, Processor} import protocbridge.ProtocBridge - -import scalapb.ScalaPbCodeGenerator +import scalapb.{ScalaPBC, ScalaPbCodeGenerator, ScalaPbcException} object ScalaPBWorker extends GenericWorker(new ScalaPBGenerator) { @@ -41,7 +39,7 @@ class ScalaPBGenerator extends Processor { val extractRequestResult = PBGenerateRequest.from(args) val config = ScalaPBC.processArgs(extractRequestResult.scalaPBArgs.toArray) val code = ProtocBridge.runWithGenerators( - protoc = a => com.github.os72.protocjar.Protoc.runProtoc(a.toArray), + protoc = exec(extractRequestResult.protoc), namedGenerators = Seq("scala" -> ScalaPbCodeGenerator), params = config.args) @@ -57,4 +55,7 @@ class ScalaPBGenerator extends Processor { deleteDir(extractRequestResult.scalaPBOutput) } } + + private def exec(protoc: Path): Seq[String] => Int = (args: Seq[String]) => + new ProcessBuilder(protoc.toString +: args: _*).inheritIO().start().waitFor() }