Introduce is_cc_test_link_action build variable

--
PiperOrigin-RevId: 143664295
MOS_MIGRATED_REVID=143664295
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
index 1aa41ed..f82c35b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
@@ -112,6 +112,9 @@
   /** A build variable whose presence indicates that PIC code should be generated. */
   public static final String FORCE_PIC_VARIABLE = "force_pic";
 
+  /** A build variable whose presence indicates that this action is a cc_test linking action. */
+  public static final String IS_CC_TEST_LINK_ACTION_VARIABLE = "is_cc_test_link_action";
+
   // Builder-only
   // Null when invoked from tests (e.g. via createTestBuilder).
   @Nullable private final RuleContext ruleContext;
@@ -1281,6 +1284,10 @@
         buildVariables.addStringVariable(FORCE_PIC_VARIABLE, "");
       }
 
+      if (useTestOnlyFlags()) {
+        buildVariables.addStringVariable(IS_CC_TEST_LINK_ACTION_VARIABLE, "");
+      }
+
       // rpath
       if (linkArgCollector.getRpathRoot() != null) {
         buildVariables.addStringVariable(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariablesTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariablesTest.java
index f789163..633ae48 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariablesTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariablesTest.java
@@ -225,4 +225,24 @@
     assertThat(interfaceLibraryOutput).endsWith("ignored");
     assertThat(interfaceLibraryBuilder).endsWith("ignored");
   }
+
+  @Test
+  public void testIsCcTestLinkActionBuildVariable() throws Exception {
+    scratch.file("x/BUILD",
+        "cc_test(name = 'foo_test', srcs = ['a.cc'])",
+        "cc_binary(name = 'foo', srcs = ['a.cc'])");
+    scratch.file("x/a.cc");
+
+    ConfiguredTarget testTarget = getConfiguredTarget("//x:foo_test");
+    Variables testVariables = getLinkBuildVariables(testTarget, LinkTargetType.EXECUTABLE);
+
+    assertThat(testVariables.isAvailable(CppLinkActionBuilder.IS_CC_TEST_LINK_ACTION_VARIABLE))
+        .isTrue();
+
+    ConfiguredTarget binaryTarget = getConfiguredTarget("//x:foo");
+    Variables binaryVariables = getLinkBuildVariables(binaryTarget, LinkTargetType.EXECUTABLE);
+
+    assertThat(binaryVariables.isAvailable(CppLinkActionBuilder.IS_CC_TEST_LINK_ACTION_VARIABLE))
+        .isFalse();
+  }
 }