Browse Source

add_library: Now support aliasing unknown import targets

Fixes #18327
Robert Maynard 6 years ago
parent
commit
6d5872a396

+ 5 - 0
Help/release/dev/allow-aliasing-unkown-import-targets.rst

@@ -0,0 +1,5 @@
+allow-aliasing-unkown-import-targets
+------------------------------------
+
+* :command:`add_library` command ``ALIAS`` option learned to support
+  import libraries of the ``UNKNOWN`` type.

+ 3 - 1
Source/cmAddLibraryCommand.cxx

@@ -222,7 +222,9 @@ bool cmAddLibraryCommand::InitialPass(std::vector<std::string> const& args,
         aliasedType != cmStateEnums::STATIC_LIBRARY &&
         aliasedType != cmStateEnums::MODULE_LIBRARY &&
         aliasedType != cmStateEnums::OBJECT_LIBRARY &&
-        aliasedType != cmStateEnums::INTERFACE_LIBRARY) {
+        aliasedType != cmStateEnums::INTERFACE_LIBRARY &&
+        !(aliasedType == cmStateEnums::UNKNOWN_LIBRARY &&
+          aliasedTarget->IsImported())) {
       std::ostringstream e;
       e << "cannot create ALIAS target \"" << libName << "\" because target \""
         << aliasedName << "\" is not a library.";

+ 13 - 3
Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt

@@ -17,7 +17,8 @@ create_header(bing)
 create_header(bung)
 create_header(arguments)
 create_header(list)
-create_header(target)
+create_header(target1)
+create_header(target2)
 
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 
@@ -69,14 +70,23 @@ set_property(TARGET lib4 APPEND PROPERTY INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BI
 set_property(TARGET lib4 APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/foh;$<TARGET_PROPERTY:lib3,INTERFACE_INCLUDE_DIRECTORIES>")
 
 add_library(somelib::withcolons UNKNOWN IMPORTED)
-set_property(TARGET somelib::withcolons PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/target")
-set_property(TARGET somelib::withcolons PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/target")
+set_property(TARGET somelib::withcolons PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/target1")
+set_property(TARGET somelib::withcolons PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/target1")
 
 set_property(TARGET TargetIncludeDirectories
   APPEND PROPERTY INCLUDE_DIRECTORIES
   "$<TARGET_PROPERTY:somelib::withcolons,INTERFACE_INCLUDE_DIRECTORIES>"
 )
 
+add_library(somelib_aliased UNKNOWN IMPORTED GLOBAL)
+set_property(TARGET somelib_aliased PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/target2")
+add_library(somelib::withcolons2 ALIAS somelib_aliased)
+
+set_property(TARGET TargetIncludeDirectories
+  APPEND PROPERTY INCLUDE_DIRECTORIES
+  "$<TARGET_PROPERTY:somelib::withcolons2,INTERFACE_INCLUDE_DIRECTORIES>"
+)
+
 add_custom_target(test_custom_target
         "some_bogus_custom_tool"
         $<TARGET_PROPERTY:TargetIncludeDirectories,COMPILE_DEFINITIONS>

+ 2 - 1
Tests/IncludeDirectories/TargetIncludeDirectories/main.cpp

@@ -10,7 +10,8 @@
 #include "foo.h"
 #include "list.h"
 #include "prefix_foo_bar_bat.h"
-#include "target.h"
+#include "target1.h"
+#include "target2.h"
 #include "ting.h"
 
 int main(int, char**)