aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Carmi Grushko <carmi@google.com>2016-12-21 18:23:50 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-12-22 09:55:15 +0000
commitcf582615487a3dd541f073479f2a26a9376887b2 (patch)
tree626c3962dd4501830ab2232e6b1321c7628f5ff3 /src
parent303e5bf9ae55dcb494b27d53a2bee30855d38949 (diff)
cc_proto_library can build proto_library's from remote repos.
-- PiperOrigin-RevId: 142676227 MOS_MIGRATED_REVID=142676227
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java12
-rw-r--r--src/test/java/com/google/devtools/build/lib/BUILD1
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoLibraryTest.java49
3 files changed, 61 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
index a0aaa5a2ce..da7e446bee 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
@@ -275,7 +275,17 @@ public class CcProtoAspect extends NativeAspectClass implements ConfiguredAspect
}
private void createProtoCompileAction(SupportData supportData, Collection<Artifact> outputs) {
- String genfilesPath = ruleContext.getConfiguration().getGenfilesFragment().getPathString();
+ String genfilesPath =
+ ruleContext
+ .getConfiguration()
+ .getGenfilesFragment()
+ .getRelative(
+ ruleContext
+ .getLabel()
+ .getPackageIdentifier()
+ .getRepository()
+ .getPathUnderExecRoot())
+ .getPathString();
ImmutableList.Builder<ToolchainInvocation> invocations = ImmutableList.builder();
invocations.add(
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD
index 1bae10ad1e..6761357d70 100644
--- a/src/test/java/com/google/devtools/build/lib/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -967,6 +967,7 @@ java_test(
":analysis_testutil",
"//src/main/java/com/google/devtools/build/lib:build-base",
"//src/main/java/com/google/devtools/build/lib:vfs",
+ "//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
"//src/main/java/com/google/devtools/build/lib/rules/cpp/proto:ProtoCcHeaderProvider",
"//third_party:guava",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoLibraryTest.java
index 90a4a17578..b138480cc3 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoLibraryTest.java
@@ -15,10 +15,13 @@
package com.google.devtools.build.lib.rules.cpp.proto;
import static com.google.common.truth.Truth.assertThat;
+import static com.google.devtools.build.lib.actions.util.ActionsTestUtil.getFirstArtifactEndingWith;
import static com.google.devtools.build.lib.actions.util.ActionsTestUtil.prettyArtifactNames;
import com.google.common.collect.ImmutableList;
import com.google.common.eventbus.EventBus;
+import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.rules.cpp.CppCompilationContext;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -121,5 +124,51 @@ public class CcProtoLibraryTest extends BuildViewTestCase {
.containsExactly("x/foo.pb.h", "x/bar.pb.h");
}
+ @Test
+ public void outputDirectoryForProtoCompileAction() throws Exception {
+ scratch.file(
+ "x/BUILD",
+ "cc_proto_library(name = 'foo_cc_proto', deps = [':bar_proto'])",
+ "proto_library(name = 'bar_proto', srcs = ['bar.proto'])");
+
+ Artifact hFile =
+ getFirstArtifactEndingWith(
+ getFilesToBuild(getConfiguredTarget("//x:foo_cc_proto")), "bar.pb.h");
+ SpawnAction protoCompileAction = getGeneratingSpawnAction(hFile);
+
+ assertThat(protoCompileAction.getArguments())
+ .contains(
+ String.format(
+ "--cpp_out=%s", getTargetConfiguration().getGenfilesFragment().toString()));
+ }
+
+ @Test
+ public void outputDirectoryForProtoCompileAction_externalRepos() throws Exception {
+ scratch.file(
+ "x/BUILD", "cc_proto_library(name = 'foo_cc_proto', deps = ['@bla//foo:bar_proto'])");
+
+ // Create the rule '@bla//foo:bar_proto'.
+ scratch.file(
+ "/bla/foo/BUILD",
+ "package(default_visibility=['//visibility:public'])",
+ "proto_library(name = 'bar_proto', srcs = ['bar.proto'])");
+ String existingWorkspace =
+ new String(FileSystemUtils.readContentAsLatin1(rootDirectory.getRelative("WORKSPACE")));
+ scratch.overwriteFile(
+ "WORKSPACE", "local_repository(name = 'bla', path = '/bla/')", existingWorkspace);
+ invalidatePackages(); // A dash of magic to re-evaluate the WORKSPACE file.
+
+ Artifact hFile =
+ getFirstArtifactEndingWith(
+ getFilesToBuild(getConfiguredTarget("//x:foo_cc_proto")), "bar.pb.h");
+ SpawnAction protoCompileAction = getGeneratingSpawnAction(hFile);
+
+ assertThat(protoCompileAction.getArguments())
+ .contains(
+ String.format(
+ "--cpp_out=%s/external/bla",
+ getTargetConfiguration().getGenfilesFragment().toString()));
+ }
+
// TODO(carmi): test blacklisted protos. I don't currently understand what's the wanted behavior.
}