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 ac29d0b8d8fd0d..62133d1900f4af 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 @@ public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) or .dylib

*/ - .add(attr("shared_library", LABEL).allowedFileTypes(CppFileTypes.SHARED_LIBRARY)) + .add( + attr("shared_library", LABEL) + .allowedFileTypes( + CppFileTypes.SHARED_LIBRARY, CppFileTypes.VERSIONED_SHARED_LIBRARY)) /* A single interface library for linking the shared library.

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 6b1198403eee3f..0d79c0f97ed3d0 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 @@ -179,6 +179,42 @@ public void testCcImportWithSharedLibrary() throws Exception { .containsExactly("bin _solib_k8/_U_S_Sa_Cfoo___Ua/libfoo.so"); } + @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 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");