From 28a999cff60fa5a8c9ca045ab2b202d83a0e0583 Mon Sep 17 00:00:00 2001 From: kaipi Date: Wed, 21 Mar 2018 14:49:11 -0700 Subject: Stop objc_proto_library from returning the generated sources. PiperOrigin-RevId: 189971511 --- .../build/lib/rules/objc/ProtobufSupport.java | 80 ++++++++++++---------- .../build/lib/rules/objc/ObjcProtoLibraryTest.java | 44 ++++-------- 2 files changed, 55 insertions(+), 69 deletions(-) (limited to 'src') diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java index b3c6d7e93c..3ae8e83d10 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java @@ -26,7 +26,6 @@ import com.google.common.collect.Sets; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; -import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.Builder; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; import com.google.devtools.build.lib.analysis.actions.FileWriteAction; import com.google.devtools.build.lib.analysis.actions.SpawnAction; @@ -165,13 +164,18 @@ final class ProtobufSupport { public ProtobufSupport registerGenerationActions() { int actionId = 0; + boolean isLinkingTarget = isLinkingTarget(); for (ImmutableSet inputProtos : orderedInputOutputKeySet()) { Iterable outputProtos = inputsToOutputsMap.get(inputProtos); - registerGenerationAction(outputProtos, inputProtos, getUniqueBundledProtosSuffix(actionId)); + registerGenerationAction( + outputProtos, + inputProtos, + getUniqueBundledProtosSuffix(actionId), + /* includeSources */ isLinkingTarget); actionId++; } - if (!isLinkingTarget()) { + if (!isLinkingTarget) { registerModuleMapGenerationAction(); } @@ -236,24 +240,10 @@ final class ProtobufSupport { public ProtobufSupport addFilesToBuild(NestedSetBuilder filesToBuild) { for (ImmutableSet inputProtoFiles : inputsToOutputsMap.keySet()) { ImmutableSet outputProtoFiles = inputsToOutputsMap.get(inputProtoFiles); - Iterable generatedSources = getProtoSourceFilesForCompilation(outputProtoFiles); - Iterable generatedHeaders = getGeneratedProtoOutputs(outputProtoFiles, - HEADER_SUFFIX); + Iterable generatedHeaders = + getGeneratedProtoOutputs(outputProtoFiles, HEADER_SUFFIX); - filesToBuild.addAll(generatedSources).addAll(generatedHeaders); - } - - int actionId = 0; - for (ImmutableSet inputProtos : orderedInputOutputKeySet()) { - ImmutableSet outputProtos = inputsToOutputsMap.get(inputProtos); - IntermediateArtifacts intermediateArtifacts = getUniqueIntermediateArtifacts(actionId); - - CompilationArtifacts compilationArtifacts = - getCompilationArtifacts(intermediateArtifacts, inputProtos, outputProtos); - - ObjcCommon common = getCommon(intermediateArtifacts, compilationArtifacts); - filesToBuild.addAll(common.getCompiledArchive().asSet()); - actionId++; + filesToBuild.addAll(generatedHeaders); } return this; @@ -454,14 +444,17 @@ final class ProtobufSupport { } private void registerGenerationAction( - Iterable outputProtos, Iterable inputProtos, String protoFileSuffix) { + Iterable outputProtos, + Iterable inputProtos, + String protoFileSuffix, + boolean includeSources) { Artifact protoInputsFile = getProtoInputsFile(protoFileSuffix); ruleContext.registerAction( FileWriteAction.create( ruleContext, protoInputsFile, getProtoInputsFileContents(outputProtos), false)); - ruleContext.registerAction( + SpawnAction.Builder actionBuilder = new SpawnAction.Builder() .setMnemonic("GenObjcBundledProtos") .addInput(attributes.getProtoCompiler()) @@ -470,10 +463,14 @@ final class ProtobufSupport { .addInput(protoInputsFile) .addInputs(inputProtos) .addOutputs(getGeneratedProtoOutputs(outputProtos, HEADER_SUFFIX)) - .addOutputs(getProtoSourceFilesForCompilation(outputProtos)) .setExecutable(attributes.getProtoCompiler().getExecPath()) - .addCommandLine(getGenerationCommandLine(protoInputsFile)) - .build(ruleContext)); + .addCommandLine(getGenerationCommandLine(protoInputsFile, includeSources)); + + if (includeSources) { + actionBuilder.addOutputs(getProtoSourceFilesForCompilation(outputProtos)); + } + + ruleContext.registerAction(actionBuilder.build(ruleContext)); } private Artifact getProtoInputsFile(String suffix) { @@ -490,19 +487,26 @@ final class ProtobufSupport { return Artifact.joinRootRelativePaths("\n", sorted); } - private CustomCommandLine getGenerationCommandLine(Artifact protoInputsFile) { - return new Builder() - .add("--input-file-list") - .addExecPath(protoInputsFile) - .add("--output-dir") - .addDynamicString(getWorkspaceRelativeOutputDir().getSafePathString()) - .add("--force") - .add("--proto-root-dir") - .addDynamicString(getGenfilesPathString()) - .add("--proto-root-dir") - .add(".") - .addExecPaths(VectorArg.addBefore("--config").each(portableProtoFilters)) - .build(); + private CustomCommandLine getGenerationCommandLine( + Artifact protoInputsFile, boolean includeSources) { + CustomCommandLine.Builder commandBuilder = + new CustomCommandLine.Builder() + .add("--input-file-list") + .addExecPath(protoInputsFile) + .add("--output-dir") + .addDynamicString(getWorkspaceRelativeOutputDir().getSafePathString()) + .add("--force") + .add("--proto-root-dir") + .addDynamicString(getGenfilesPathString()) + .add("--proto-root-dir") + .add(".") + .addExecPaths(VectorArg.addBefore("--config").each(portableProtoFilters)); + + if (!includeSources) { + commandBuilder.add("--headers-only"); + } + + return commandBuilder.build(); } private String getGenfilesPathString() { diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java index 2dbd7db711..8b24e74985 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java @@ -175,9 +175,7 @@ public class ObjcProtoLibraryTest extends ObjcRuleTestCase { assertThat(Artifact.toRootRelativePaths(filesToBuild)) .containsAllOf( "package/_generated_protos/opl_protobuf/package/FileA.pbobjc.h", - "package/_generated_protos/opl_protobuf/package/FileA.pbobjc.m", "package/_generated_protos/opl_protobuf/package/dir/FileB.pbobjc.h", - "package/_generated_protos/opl_protobuf/package/dir/FileB.pbobjc.m", "package/_generated_protos/opl_protobuf/dep/File.pbobjc.h"); } @@ -187,9 +185,7 @@ public class ObjcProtoLibraryTest extends ObjcRuleTestCase { assertThat(Artifact.toRootRelativePaths(filesToBuild)) .containsAllOf( "package/_generated_protos/nested_opl/package/FileA.pbobjc.h", - "package/_generated_protos/nested_opl/package/FileA.pbobjc.m", - "package/_generated_protos/nested_opl/package/dir/FileB.pbobjc.h", - "package/_generated_protos/nested_opl/package/dir/FileB.pbobjc.m"); + "package/_generated_protos/nested_opl/package/dir/FileB.pbobjc.h"); } @Test @@ -201,9 +197,7 @@ public class ObjcProtoLibraryTest extends ObjcRuleTestCase { assertThat(Artifact.toRootRelativePaths(filesToBuild)) .containsAllOf( "package/_generated_protos/opl_protobuf/package/FileA.pbobjc.h", - "package/_generated_protos/opl_protobuf/package/FileA.pbobjc.m", "package/_generated_protos/opl_protobuf/package/dir/FileB.pbobjc.h", - "package/_generated_protos/opl_protobuf/package/dir/FileB.pbobjc.m", "package/_generated_protos/opl_protobuf/dep/File.pbobjc.h"); } @@ -215,21 +209,13 @@ public class ObjcProtoLibraryTest extends ObjcRuleTestCase { assertThat(Artifact.toRootRelativePaths(filesToBuild)) .containsAllOf( outputPath + "J2ObjcDescriptor.pbobjc.h", - outputPath + "J2ObjcDescriptor.pbobjc.m", outputPath + "HTTP.pbobjc.h", - outputPath + "HTTP.pbobjc.m", outputPath + "HTTPS.pbobjc.h", - outputPath + "HTTPS.pbobjc.m", outputPath + "SomeURLBlah.pbobjc.h", - outputPath + "SomeURLBlah.pbobjc.m", outputPath + "ThumbnailURL.pbobjc.h", - outputPath + "ThumbnailURL.pbobjc.m", outputPath + "URL.pbobjc.h", - outputPath + "URL.pbobjc.m", outputPath + "URL2HTTPS.pbobjc.h", - outputPath + "URL2HTTPS.pbobjc.m", - outputPath + "Urlbar.pbobjc.h", - outputPath + "Urlbar.pbobjc.m"); + outputPath + "Urlbar.pbobjc.h"); } @Test @@ -237,31 +223,26 @@ public class ObjcProtoLibraryTest extends ObjcRuleTestCase { NestedSet filesToBuild = getFilesToBuild(getConfiguredTarget("//package:opl_protobuf_well_known_types")); assertThat(Artifact.toRootRelativePaths(filesToBuild)) - .containsAllOf( - "package/_generated_protos/opl_protobuf_well_known_types/package/FileA.pbobjc.h", - "package/_generated_protos/opl_protobuf_well_known_types/package/FileA.pbobjc.m"); + .contains( + "package/_generated_protos/opl_protobuf_well_known_types/package/FileA.pbobjc.h"); assertThat(Artifact.toRootRelativePaths(filesToBuild)) .doesNotContain( "package/_generated_protos/opl_protobuf_well_known_types/objcproto/WellKnownType.pbobjc.h"); - assertThat(Artifact.toRootRelativePaths(filesToBuild)) - .doesNotContain( - "package/_generated_protos/opl_protobuf_well_known_types/objcproto/WellKnownType.pbobjc.m"); } @Test public void testOutputsGenfile() throws Exception { NestedSet filesToBuild = getFilesToBuild(getConfiguredTarget("//package:gen_opl")); assertThat(Artifact.toRootRelativePaths(filesToBuild)) - .containsAllOf( - "package/_generated_protos/gen_opl/package/FileAGenfile.pbobjc.h", - "package/_generated_protos/gen_opl/package/FileAGenfile.pbobjc.m"); + .contains( + "package/_generated_protos/gen_opl/package/FileAGenfile.pbobjc.h"); } @Test - public void testSourceGenerationAction() throws Exception { + public void testHeaderGenerationAction() throws Exception { Artifact sourceFile = ActionsTestUtil.getFirstArtifactEndingWith( - getFilesToBuild(getConfiguredTarget("//package:opl_protobuf")), "/FileA.pbobjc.m"); + getFilesToBuild(getConfiguredTarget("//package:opl_protobuf")), "/FileA.pbobjc.h"); SpawnAction action = (SpawnAction) getGeneratingAction(sourceFile); Artifact inputFileList = @@ -290,7 +271,8 @@ public class ObjcProtoLibraryTest extends ObjcRuleTestCase { "--config", "package/proto_filter2.txt", "--config", - "package/proto_filter3.txt") + "package/proto_filter3.txt", + "--headers-only") .inOrder(); assertThat(Artifact.toRootRelativePaths(action.getInputs())) .containsAllOf( @@ -306,11 +288,11 @@ public class ObjcProtoLibraryTest extends ObjcRuleTestCase { @Test public void testWellKnownTypesProtoListInput() throws Exception { - Artifact sourceFile = + Artifact headerFile = ActionsTestUtil.getFirstArtifactEndingWith( getFilesToBuild(getConfiguredTarget("//package:opl_protobuf_well_known_types")), - "/FileA.pbobjc.m"); - SpawnAction action = (SpawnAction) getGeneratingAction(sourceFile); + "/FileA.pbobjc.h"); + SpawnAction action = (SpawnAction) getGeneratingAction(headerFile); Artifact inputFileList = ActionsTestUtil.getFirstArtifactEndingWith( -- cgit v1.2.3