Add support for versioned shared libraries in CcImport

Permit ".so" files with "version extension" strings in CcImport rules using
existing shared version matcher.

Allows use of files like "foo.so.1a2"

PiperOrigin-RevId: 284166839
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImportRule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImportRule.java
index ac29d0b..62133d1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImportRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImportRule.java
@@ -51,7 +51,10 @@
             or <code>.dylib</code>
           </p>
         <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/
-        .add(attr("shared_library", LABEL).allowedFileTypes(CppFileTypes.SHARED_LIBRARY))
+        .add(
+            attr("shared_library", LABEL)
+                .allowedFileTypes(
+                    CppFileTypes.SHARED_LIBRARY, CppFileTypes.VERSIONED_SHARED_LIBRARY))
         /*<!-- #BLAZE_RULE($cc_import).ATTRIBUTE(interface_library) -->
           A single interface library for linking the shared library.
           <p> Permitted file types:
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java
index 6b11984..0d79c0f 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java
@@ -180,6 +180,42 @@
   }
 
   @Test
+  public void testCcImportWithVersionedSharedLibrary() throws Exception {
+    useConfiguration("--cpu=k8");
+    ConfiguredTarget target =
+        scratchConfiguredTarget(
+            "a",
+            "foo",
+            skylarkImplementationLoadStatement,
+            "cc_import(name = 'foo', shared_library = 'libfoo.so.1ab2.1_a2')");
+    Artifact dynamicLibrary =
+        Iterables.getOnlyElement(target.get(CcInfo.PROVIDER).getCcLinkingContext().getLibraries())
+            .getResolvedSymlinkDynamicLibrary();
+    Iterable<Artifact> dynamicLibrariesForRuntime =
+        target
+            .get(CcInfo.PROVIDER)
+            .getCcLinkingContext()
+            .getDynamicLibrariesForRuntime(/* linkingStatically= */ false);
+    assertThat(artifactsToStrings(ImmutableList.of(dynamicLibrary)))
+        .containsExactly("src a/libfoo.so.1ab2.1_a2");
+    assertThat(artifactsToStrings(dynamicLibrariesForRuntime))
+        .containsExactly("bin _solib_k8/_U_S_Sa_Cfoo___Ua/libfoo.so.1ab2.1_a2");
+  }
+
+  @Test
+  public void testCcImportWithInvalidVersionedSharedLibrary() throws Exception {
+    checkError(
+        "a",
+        "foo",
+        "does not produce any cc_import shared_library files " + "(expected .so, .dylib or .dll)",
+        skylarkImplementationLoadStatement,
+        "cc_import(",
+        "  name = 'foo',",
+        "  shared_library = 'libfoo.so.1ab2.ab',",
+        ")");
+  }
+
+  @Test
   public void testCcImportWithInterfaceSharedLibrary() throws Exception {
     useConfiguration("--cpu=k8");
     ConfiguredTarget target =