[Cmake-commits] CMake branch, next, updated. v3.2.2-3181-g5c72b42

Brad King brad.king at kitware.com
Tue May 26 14:06:46 EDT 2015


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  5c72b42b7b79a491ab89d625feacce149724128a (commit)
       via  2b8686c4269fe0e2bf37371646bebfbdec7a29b9 (commit)
      from  2249925931f659b47cb97824e6b315aa5e432310 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5c72b42b7b79a491ab89d625feacce149724128a
commit 5c72b42b7b79a491ab89d625feacce149724128a
Merge: 2249925 2b8686c
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue May 26 14:06:45 2015 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue May 26 14:06:45 2015 -0400

    Merge topic 'imported-link-item' into next
    
    2b8686c4 Allow imported INTERFACE libraries to specify a link item


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2b8686c4269fe0e2bf37371646bebfbdec7a29b9
commit 2b8686c4269fe0e2bf37371646bebfbdec7a29b9
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue May 19 15:36:28 2015 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue May 26 14:06:30 2015 -0400

    Allow imported INTERFACE libraries to specify a link item
    
    Add an IMPORTED_LINK_ITEM[_<CONFIG>] target property to specify an item
    to be placed on the link line in place of an interface library since it
    has no library file of its own.  Restrict use of the property to
    imported INTERFACE libraries.
    
    This will be particularly useful for find modules that need to provide
    imported libraries from system SDKs where the full path to the library
    file is not known.  Now such find modules will be able to provide an
    imported interface library and set IMPORTED_LINK_ITEM to refer to the
    SDK library by name.  See issue 15267.
    
    The IMPORTED_LINK_ITEM[_<CONFIG>] property also allows us to implement
    MAP_IMPORTED_CONFIG_<CONFIG> for interface libraries.  Drop some of the
    special cases added by commit v3.0.0-rc1~301^2~1 (INTERFACE_LIBRARY:
    Avoid codepaths which set unneeded properties, 2013-11-20) and commit
    v3.0.0-rc1~237^2 (Don't search for IMPORTED_LOCATION of
    INTERFACE_LIBRARY, 2013-12-09).  Ensure the test added by commit
    v3.0.0-rc1~150^2 (InterfaceLibrary: Add test requiring
    MAP_IMPORTED_CONFIG whitelisting, 2014-01-09) still passes.

diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst
index 615254e..7c59895 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -150,6 +150,8 @@ Properties on Targets
    /prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES
    /prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY_CONFIG
    /prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY
+   /prop_tgt/IMPORTED_LINK_ITEM_CONFIG
+   /prop_tgt/IMPORTED_LINK_ITEM
    /prop_tgt/IMPORTED_LOCATION_CONFIG
    /prop_tgt/IMPORTED_LOCATION
    /prop_tgt/IMPORTED_NO_SONAME_CONFIG
diff --git a/Help/prop_tgt/IMPORTED_LINK_ITEM.rst b/Help/prop_tgt/IMPORTED_LINK_ITEM.rst
new file mode 100644
index 0000000..ca8aa03
--- /dev/null
+++ b/Help/prop_tgt/IMPORTED_LINK_ITEM.rst
@@ -0,0 +1,22 @@
+IMPORTED_LINK_ITEM
+------------------
+
+Specify the link line item for an :ref:`imported <Imported Targets>`
+:ref:`Interface Library <Interface Libraries>`.
+
+An interface library has no library file so linking to it normally
+adds its usage requirements but does not link to an actual library.
+The ``IMPORTED_LINK_ITEM`` property specifies a single item to
+be placed on the link line in place of the interface library.
+
+This property is intended for use in naming libraries provided by
+a platform SDK for which the full path to a library file may not
+be known.  The item may be a plain library name such as ``foo``
+but may *not* be a path (e.g. ``/usr/lib/libfoo.so``) or a flag
+(e.g. ``-Wl,...``).  The item is never treated as a library target
+name even if it happens to name one.
+
+The ``IMPORTED_LINK_ITEM`` property is allowed only on
+:ref:`imported <Imported Targets>` :ref:`Interface Libraries`
+and is rejected on targets of other types (for which
+the :prop_tgt:`IMPORTED_LOCATION` target property may be used).
diff --git a/Help/prop_tgt/IMPORTED_LINK_ITEM_CONFIG.rst b/Help/prop_tgt/IMPORTED_LINK_ITEM_CONFIG.rst
new file mode 100644
index 0000000..028b6d9
--- /dev/null
+++ b/Help/prop_tgt/IMPORTED_LINK_ITEM_CONFIG.rst
@@ -0,0 +1,7 @@
+IMPORTED_LINK_ITEM_<CONFIG>
+---------------------------
+
+<CONFIG>-specific version of :prop_tgt:`IMPORTED_LINK_ITEM` property.
+
+Configuration names correspond to those provided by the project from
+which the target is imported.
diff --git a/Help/release/dev/imported-link-item.rst b/Help/release/dev/imported-link-item.rst
new file mode 100644
index 0000000..17d6777
--- /dev/null
+++ b/Help/release/dev/imported-link-item.rst
@@ -0,0 +1,7 @@
+imported-link-item
+------------------
+
+* :ref:`Imported <Imported Targets>` :ref:`Interface Libraries` learned new
+  :prop_tgt:`IMPORTED_LINK_ITEM` and :prop_tgt:`IMPORTED_LINK_ITEM_<CONFIG>`
+  target properties to specify a link line item since interface libraries do
+  not have their own library files.
diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx
index e6cbe60..153a2b4 100644
--- a/Source/cmComputeLinkInformation.cxx
+++ b/Source/cmComputeLinkInformation.cxx
@@ -658,6 +658,13 @@ void cmComputeLinkInformation::AddItem(std::string const& item,
       // of COMPATIBLE_INTERFACE_ enforcement.  The generators will ignore
       // this for the actual link line.
       this->Items.push_back(Item(std::string(), true, tgt));
+
+      // Also add the item the interface specifies to be used in its place.
+      std::string const& linkItem = tgt->GetImportedLinkItem(config);
+      if (!linkItem.empty())
+        {
+        this->AddItem(linkItem, 0);
+        }
       }
     else
       {
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 88ec61b..f33f78b 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -77,6 +77,7 @@ struct cmTarget::ImportInfo
   std::string Location;
   std::string SOName;
   std::string ImportLibrary;
+  std::string LinkItem;
   std::string Languages;
   std::string Libraries;
   std::string LibrariesProp;
@@ -364,11 +365,6 @@ void cmTarget::SetMakefile(cmMakefile* mf)
       std::string configUpper = cmSystemTools::UpperCase(*ci);
       for(const char** p = configProps; *p; ++p)
         {
-        if (this->TargetTypeValue == INTERFACE_LIBRARY
-            && strcmp(*p, "MAP_IMPORTED_CONFIG_") != 0)
-          {
-          continue;
-          }
         std::string property = *p;
         property += configUpper;
         this->SetPropertyDefault(property, 0);
@@ -1675,7 +1671,10 @@ static bool whiteListedInterfaceProperty(const std::string& prop)
     return true;
     }
 
-  if (cmHasLiteralPrefix(prop, "MAP_IMPORTED_CONFIG_"))
+  if (prop == "IMPORTED_CONFIGURATIONS" ||
+      prop == "IMPORTED_LINK_ITEM" ||
+      cmHasLiteralPrefix(prop, "IMPORTED_LINK_ITEM_") ||
+      cmHasLiteralPrefix(prop, "MAP_IMPORTED_CONFIG_"))
     {
     return true;
     }
@@ -1745,6 +1744,11 @@ void cmTarget::SetProperty(const std::string& prop, const char* value)
           << this->Name << "\")\n";
     this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
     }
+  else if(cmHasLiteralPrefix(prop, "IMPORTED_LINK_ITEM") &&
+          !this->CheckImportedLinkItem(prop, value? value:""))
+    {
+    /* error was reported by check method */
+    }
   else if (prop == "LINK_LIBRARIES")
     {
     this->Internal->LinkImplementationPropertyEntries.clear();
@@ -1832,6 +1836,11 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value,
           << this->Name << "\")\n";
     this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
     }
+  else if(cmHasLiteralPrefix(prop, "IMPORTED_LINK_ITEM"))
+    {
+    this->Makefile->IssueMessage(cmake::FATAL_ERROR,
+      prop + " property may not be APPENDed.");
+    }
   else if (prop == "LINK_LIBRARIES")
     {
     cmListFileBacktrace lfbt = this->Makefile->GetBacktrace();
@@ -3837,6 +3846,16 @@ void cmTarget::GetFullNameComponents(std::string& prefix, std::string& base,
 }
 
 //----------------------------------------------------------------------------
+std::string cmTarget::GetImportedLinkItem(std::string const& config) const
+{
+  if (cmTarget::ImportInfo const* info = this->GetImportInfo(config))
+    {
+    return info->LinkItem;
+    }
+  return std::string();
+}
+
+//----------------------------------------------------------------------------
 std::string cmTarget::GetFullPath(const std::string& config, bool implib,
                                   bool realname) const
 {
@@ -5393,15 +5412,9 @@ bool cmTarget::GetMappedConfig(std::string const& desired_config,
                                const char** imp,
                                std::string& suffix) const
 {
-  if (this->GetType() == INTERFACE_LIBRARY)
-    {
-    // This method attempts to find a config-specific LOCATION for the
-    // IMPORTED library. In the case of INTERFACE_LIBRARY, there is no
-    // LOCATION at all, so leaving *loc and *imp unchanged is the appropriate
-    // and valid response.
-    return true;
-    }
-  std::string const locPropBase = "IMPORTED_LOCATION";
+  std::string const locPropBase =
+    this->GetType() == INTERFACE_LIBRARY?
+    "IMPORTED_LINK_ITEM" : "IMPORTED_LOCATION";
 
   // Track the configuration-specific property suffix.
   suffix = "_";
@@ -5451,7 +5464,9 @@ bool cmTarget::GetMappedConfig(std::string const& desired_config,
   // any other configuration.
   if(!mappedConfigs.empty() && !*loc && !*imp)
     {
-    return false;
+    // Interface libraries are always available because their
+    // link item is optional so it is okay to leave *loc empty.
+    return this->GetType() == cmTarget::INTERFACE_LIBRARY;
     }
 
   // If we have not yet found it then there are no mapped
@@ -5515,7 +5530,9 @@ bool cmTarget::GetMappedConfig(std::string const& desired_config,
   // If we have not yet found it then the target location is not available.
   if(!*loc && !*imp)
     {
-    return false;
+    // Interface libraries are always available because their
+    // link item is optional so it is okay to leave *loc empty.
+    return this->GetType() == cmTarget::INTERFACE_LIBRARY;
     }
 
   return true;
@@ -5568,6 +5585,10 @@ void cmTarget::ComputeImportInfo(std::string const& desired_config,
   }
   if(this->GetType() == INTERFACE_LIBRARY)
     {
+    if (loc)
+      {
+      info.LinkItem = loc;
+      }
     return;
     }
 
@@ -5692,6 +5713,37 @@ void cmTarget::ComputeImportInfo(std::string const& desired_config,
 }
 
 //----------------------------------------------------------------------------
+bool cmTarget::CheckImportedLinkItem(std::string const& prop,
+                                     std::string const& value) const
+{
+  if (this->GetType() != cmTarget::INTERFACE_LIBRARY ||
+      !this->IsImported())
+    {
+    this->Makefile->IssueMessage(cmake::FATAL_ERROR, prop +
+      " property may be set only on imported INTERFACE library targets.");
+    return false;
+    }
+  if (!value.empty())
+    {
+    if (value[0] == '-')
+      {
+      this->Makefile->IssueMessage(cmake::FATAL_ERROR, prop +
+        " property value\n  " + value + "\nmay not start in '-'.");
+      return false;
+      }
+    std::string::size_type bad = value.find_first_of(":/\\;");
+    if (bad != value.npos)
+      {
+      this->Makefile->IssueMessage(cmake::FATAL_ERROR, prop +
+        " property value\n  " + value + "\nmay not contain '" +
+        value.substr(bad,1) + "'.");
+      return false;
+      }
+    }
+  return true;
+}
+
+//----------------------------------------------------------------------------
 cmTarget::LinkInterface const* cmTarget::GetLinkInterface(
                                                   const std::string& config,
                                                   cmTarget const* head) const
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 1a8b75a..5e4f632 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -434,6 +434,9 @@ public:
       no soname at all.  */
   bool IsImportedSharedLibWithoutSOName(const std::string& config) const;
 
+  /** Get the link item for an imported interface library.  */
+  std::string GetImportedLinkItem(std::string const& config) const;
+
   /** Get the full path to the target according to the settings in its
       makefile and the configuration type.  */
   std::string GetFullPath(const std::string& config="", bool implib = false,
@@ -791,6 +794,9 @@ private:
   void ComputeImportInfo(std::string const& desired_config,
                          ImportInfo& info) const;
 
+  bool CheckImportedLinkItem(std::string const& prop,
+                             std::string const& value) const;
+
   // Cache target compile paths for each configuration.
   struct CompileInfo;
   CompileInfo const* GetCompileInfo(const std::string& config) const;
diff --git a/Tests/InterfaceLibrary/CMakeLists.txt b/Tests/InterfaceLibrary/CMakeLists.txt
index ee81419..76d3176 100644
--- a/Tests/InterfaceLibrary/CMakeLists.txt
+++ b/Tests/InterfaceLibrary/CMakeLists.txt
@@ -25,8 +25,23 @@ target_sources(iface_objlib INTERFACE $<TARGET_OBJECTS:objlib>)
 add_library(intermediate INTERFACE)
 target_link_libraries(intermediate INTERFACE iface_objlib)
 
+add_library(item_fake STATIC item_fake.cpp)
+add_library(item_real STATIC item.cpp)
+add_library(item_iface INTERFACE IMPORTED)
+set_property(TARGET item_iface PROPERTY IMPORTED_LINK_ITEM item_real)
+add_dependencies(item_iface item_real)
+link_directories(${CMAKE_CURRENT_BINARY_DIR})
+
 add_executable(InterfaceLibrary definetestexe.cpp)
-target_link_libraries(InterfaceLibrary iface_nodepends headeriface subiface intermediate)
+target_link_libraries(InterfaceLibrary
+  iface_nodepends
+  headeriface
+  subiface
+  intermediate
+
+  item_iface
+  item_fake # ensure that 'item_real' is ordered in place of item_iface
+  )
 
 add_subdirectory(libsdir)
 
diff --git a/Tests/InterfaceLibrary/definetestexe.cpp b/Tests/InterfaceLibrary/definetestexe.cpp
index 9044076..e6b7f58 100644
--- a/Tests/InterfaceLibrary/definetestexe.cpp
+++ b/Tests/InterfaceLibrary/definetestexe.cpp
@@ -17,8 +17,9 @@
 
 extern int obj();
 extern int sub();
+extern int item();
 
 int main(int,char**)
 {
-  return obj() + sub();
+  return obj() + sub() + item();
 }
diff --git a/Tests/InterfaceLibrary/item.cpp b/Tests/InterfaceLibrary/item.cpp
new file mode 100644
index 0000000..be612c9
--- /dev/null
+++ b/Tests/InterfaceLibrary/item.cpp
@@ -0,0 +1 @@
+int item() { return 0; }
diff --git a/Tests/InterfaceLibrary/item_fake.cpp b/Tests/InterfaceLibrary/item_fake.cpp
new file mode 100644
index 0000000..3944710
--- /dev/null
+++ b/Tests/InterfaceLibrary/item_fake.cpp
@@ -0,0 +1,2 @@
+extern int item_undefined();
+int item() { return item_undefined(); }
diff --git a/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-bad-value-result.txt b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-bad-value-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-bad-value-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-bad-value-stderr.txt b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-bad-value-stderr.txt
new file mode 100644
index 0000000..6a18cac
--- /dev/null
+++ b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-bad-value-stderr.txt
@@ -0,0 +1,44 @@
+^CMake Error at IMPORTED_LINK_ITEM-bad-value.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM property value
+
+    -flag
+
+  may not start in '-'.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at IMPORTED_LINK_ITEM-bad-value.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM property value
+
+    item1;item2
+
+  may not contain ';'.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at IMPORTED_LINK_ITEM-bad-value.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM property value
+
+    /path/to/item1
+
+  may not contain '/'.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at IMPORTED_LINK_ITEM-bad-value.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM property value
+
+    \\path\\to\\item1
+
+  may not contain '\\'.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at IMPORTED_LINK_ITEM-bad-value.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM property value
+
+    c:\\path\\to\\item1
+
+  may not contain ':'.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-bad-value.cmake b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-bad-value.cmake
new file mode 100644
index 0000000..91b0349
--- /dev/null
+++ b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-bad-value.cmake
@@ -0,0 +1,6 @@
+add_library(MyTarget INTERFACE IMPORTED)
+set_property(TARGET MyTarget PROPERTY IMPORTED_LINK_ITEM -flag)
+set_property(TARGET MyTarget PROPERTY IMPORTED_LINK_ITEM item1 item2)
+set_property(TARGET MyTarget PROPERTY IMPORTED_LINK_ITEM /path/to/item1)
+set_property(TARGET MyTarget PROPERTY IMPORTED_LINK_ITEM \\path\\to\\item1)
+set_property(TARGET MyTarget PROPERTY IMPORTED_LINK_ITEM c:\\path\\to\\item1)
diff --git a/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-iface-result.txt b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-iface-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-iface-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-iface-stderr.txt b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-iface-stderr.txt
new file mode 100644
index 0000000..1576f72
--- /dev/null
+++ b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-iface-stderr.txt
@@ -0,0 +1,45 @@
+^CMake Error at IMPORTED_LINK_ITEM-non-iface.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM property may be set only on imported INTERFACE library
+  targets.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at IMPORTED_LINK_ITEM-non-iface.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM property may not be APPENDed.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at IMPORTED_LINK_ITEM-non-iface.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM_DEBUG property may be set only on imported INTERFACE
+  library targets.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at IMPORTED_LINK_ITEM-non-iface.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM_DEBUG property may not be APPENDed.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at IMPORTED_LINK_ITEM-non-iface.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM property may be set only on imported INTERFACE library
+  targets.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at IMPORTED_LINK_ITEM-non-iface.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM property may be set only on imported INTERFACE library
+  targets.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at IMPORTED_LINK_ITEM-non-iface.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM property may be set only on imported INTERFACE library
+  targets.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at IMPORTED_LINK_ITEM-non-iface.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM property may be set only on imported INTERFACE library
+  targets.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-iface.cmake b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-iface.cmake
new file mode 100644
index 0000000..1f5092e
--- /dev/null
+++ b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-iface.cmake
@@ -0,0 +1,17 @@
+add_custom_target(MyCustom)
+set_property(TARGET MyCustom PROPERTY IMPORTED_LINK_ITEM item1)
+set_property(TARGET MyCustom APPEND PROPERTY IMPORTED_LINK_ITEM item2)
+set_property(TARGET MyCustom PROPERTY IMPORTED_LINK_ITEM_DEBUG item1)
+set_property(TARGET MyCustom APPEND PROPERTY IMPORTED_LINK_ITEM_DEBUG item2)
+
+add_library(MyStatic STATIC IMPORTED)
+set_property(TARGET MyStatic PROPERTY IMPORTED_LINK_ITEM item1)
+
+add_library(MyShared SHARED IMPORTED)
+set_property(TARGET MyShared PROPERTY IMPORTED_LINK_ITEM item1)
+
+add_library(MyModule MODULE IMPORTED)
+set_property(TARGET MyModule PROPERTY IMPORTED_LINK_ITEM item1)
+
+add_executable(MyExe IMPORTED)
+set_property(TARGET MyExe PROPERTY IMPORTED_LINK_ITEM item1)
diff --git a/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-imported-result.txt b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-imported-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-imported-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-imported-stderr.txt b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-imported-stderr.txt
new file mode 100644
index 0000000..8ef2987
--- /dev/null
+++ b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-imported-stderr.txt
@@ -0,0 +1,21 @@
+^CMake Error at IMPORTED_LINK_ITEM-non-imported.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM property may be set only on imported INTERFACE library
+  targets.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at IMPORTED_LINK_ITEM-non-imported.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM property may not be APPENDed.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at IMPORTED_LINK_ITEM-non-imported.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM_DEBUG property may be set only on imported INTERFACE
+  library targets.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at IMPORTED_LINK_ITEM-non-imported.cmake:[0-9]+ \(set_property\):
+  IMPORTED_LINK_ITEM_DEBUG property may not be APPENDed.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-imported.cmake b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-imported.cmake
new file mode 100644
index 0000000..beefdb5
--- /dev/null
+++ b/Tests/RunCMake/interface_library/IMPORTED_LINK_ITEM-non-imported.cmake
@@ -0,0 +1,5 @@
+add_library(MyTarget INTERFACE)
+set_property(TARGET MyTarget PROPERTY IMPORTED_LINK_ITEM item1)
+set_property(TARGET MyTarget APPEND PROPERTY IMPORTED_LINK_ITEM item2)
+set_property(TARGET MyTarget PROPERTY IMPORTED_LINK_ITEM_DEBUG item1)
+set_property(TARGET MyTarget APPEND PROPERTY IMPORTED_LINK_ITEM_DEBUG item2)
diff --git a/Tests/RunCMake/interface_library/RunCMakeTest.cmake b/Tests/RunCMake/interface_library/RunCMakeTest.cmake
index 201daa7..fac35b8 100644
--- a/Tests/RunCMake/interface_library/RunCMakeTest.cmake
+++ b/Tests/RunCMake/interface_library/RunCMakeTest.cmake
@@ -8,3 +8,6 @@ run_cmake(invalid_signature)
 run_cmake(global-interface)
 run_cmake(genex_link)
 run_cmake(add_custom_command-TARGET)
+run_cmake(IMPORTED_LINK_ITEM-bad-value)
+run_cmake(IMPORTED_LINK_ITEM-non-iface)
+run_cmake(IMPORTED_LINK_ITEM-non-imported)

-----------------------------------------------------------------------

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list