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  20c6cc63a86f2a10e07d540e51aa29d6d5fcb4d1 (commit)
       via  6e7e881c57e8ff7295a1007d329708143b54baad (commit)
       via  0400cd5dd1be33ebcc2c2d5dba8233a78b1cee68 (commit)
      from  f63c00f8b5257c41f3369cebf79a3217de3141d0 (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=20c6cc63a86f2a10e07d540e51aa29d6d5fcb4d1
commit 20c6cc63a86f2a10e07d540e51aa29d6d5fcb4d1
Merge: f63c00f 6e7e881
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Wed Jul 16 13:28:50 2014 -0400
Commit:     CMake Topic Stage <kwro...@kitware.com>
CommitDate: Wed Jul 16 13:28:50 2014 -0400

    Merge topic 'generalize-LINK_ONLY' into next
    
    6e7e881c Honor $<LINK_ONLY> when checking interface properties
    0400cd5d Make $<LINK_ONLY> available to projects (#14751)


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6e7e881c57e8ff7295a1007d329708143b54baad
commit 6e7e881c57e8ff7295a1007d329708143b54baad
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Tue Jul 15 11:34:02 2014 -0400
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Wed Jul 16 13:28:47 2014 -0400

    Honor $<LINK_ONLY> when checking interface properties
    
    Callers of cmTarget::GetLinkImplementationClosure are interested in the
    set of targets whose interface properties propagate to the current
    target.  This excludes targets guarded by $<LINK_ONLY>.
    
    Teach the CompatibleInterface test to cover suppression of interface
    compatibility tests with $<LINK_ONLY>.  Although this is not recommended
    in practice, it is a way of covering the above behavior.

diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index ffdeb6a..cdece87 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -6018,7 +6018,7 @@ void processILibs(const std::string& config,
     {
     tgts.push_back(item.Target);
     if(cmTarget::LinkInterface const* iface =
-       item.Target->GetLinkInterfaceLibraries(config, headTarget, false))
+       item.Target->GetLinkInterfaceLibraries(config, headTarget, true))
       {
       for(std::vector<cmLinkItem>::const_iterator
             it = iface->Libraries.begin();
diff --git a/Tests/CompatibleInterface/CMakeLists.txt 
b/Tests/CompatibleInterface/CMakeLists.txt
index 350b518..668a97b 100644
--- a/Tests/CompatibleInterface/CMakeLists.txt
+++ b/Tests/CompatibleInterface/CMakeLists.txt
@@ -1,5 +1,5 @@
 
-cmake_minimum_required(VERSION 2.8)
+cmake_minimum_required(VERSION 3.0)
 
 project(CompatibleInterface)
 
@@ -54,6 +54,15 @@ set_property(TARGET iface1 PROPERTY 
INTERFACE_NUMBER_MAX_PROP2 200)
 add_executable(CompatibleInterface main.cpp)
 target_link_libraries(CompatibleInterface iface1)
 
+add_library(foo STATIC foo.cpp)
+add_library(bar SHARED bar.cpp)
+set_property(TARGET foo APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SOMEPROP)
+set_property(TARGET foo PROPERTY INTERFACE_SOMEPROP ON)
+# Use LINK_ONLY to suppress usage requirements and allow the check to pass.
+set_property(TARGET bar PROPERTY INTERFACE_LINK_LIBRARIES $<LINK_ONLY:foo>)
+set_property(TARGET CompatibleInterface PROPERTY SOMEPROP OFF)
+target_link_libraries(CompatibleInterface bar)
+
 set_property(TARGET CompatibleInterface PROPERTY BOOL_PROP2 ON)
 set_property(TARGET CompatibleInterface PROPERTY BOOL_PROP3 ON)
 set_property(TARGET CompatibleInterface PROPERTY STRING_PROP2 prop2)
diff --git a/Tests/CompatibleInterface/bar.cpp 
b/Tests/CompatibleInterface/bar.cpp
new file mode 100644
index 0000000..2e09900
--- /dev/null
+++ b/Tests/CompatibleInterface/bar.cpp
@@ -0,0 +1,7 @@
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
+int bar()
+{
+  return 0;
+}
diff --git a/Tests/CompatibleInterface/foo.cpp 
b/Tests/CompatibleInterface/foo.cpp
new file mode 100644
index 0000000..e05eb7e
--- /dev/null
+++ b/Tests/CompatibleInterface/foo.cpp
@@ -0,0 +1,4 @@
+int foo()
+{
+  return 0;
+}
diff --git a/Tests/CompatibleInterface/main.cpp 
b/Tests/CompatibleInterface/main.cpp
index e23625a..d20b64b 100644
--- a/Tests/CompatibleInterface/main.cpp
+++ b/Tests/CompatibleInterface/main.cpp
@@ -40,8 +40,14 @@ enum {
 
 #include "iface2.h"
 
+int foo();
+#ifdef _WIN32
+__declspec(dllimport)
+#endif
+int bar();
+
 int main(int argc, char **argv)
 {
   Iface2 if2;
-  return if2.foo();
+  return if2.foo() + foo() + bar();
 }

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0400cd5dd1be33ebcc2c2d5dba8233a78b1cee68
commit 0400cd5dd1be33ebcc2c2d5dba8233a78b1cee68
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Tue Jul 15 11:14:49 2014 -0400
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Wed Jul 16 13:28:44 2014 -0400

    Make $<LINK_ONLY> available to projects (#14751)
    
    Previously this generator expression was used internally by the
    target_link_libraries command to honor private linking requirements of
    static libraries in their INTERFACE_LINK_LIBRARIES.  Remove the check
    that limits $<LINK_ONLY> to this use case to make it available for
    project code to use too.

diff --git a/Help/manual/cmake-generator-expressions.7.rst 
b/Help/manual/cmake-generator-expressions.7.rst
index 9e82674..bc24798 100644
--- a/Help/manual/cmake-generator-expressions.7.rst
+++ b/Help/manual/cmake-generator-expressions.7.rst
@@ -188,6 +188,13 @@ property is non-empty::
   Marks ``...`` as being the name of a target.  This is required if exporting
   targets to multiple dependent export sets.  The ``...`` must be a literal
   name of a target- it may not contain generator expressions.
+``$<LINK_ONLY:...>``
+  Content of ``...`` except when evaluated in a link interface while
+  propagating :ref:`Target Usage Requirements`, in which case it is the
+  empty string.
+  Intended for use only in an :prop_tgt:`INTERFACE_LINK_LIBRARIES` target
+  property, perhaps via the :command:`target_link_libraries` command,
+  to specify private link dependencies without other usage requirements.
 ``$<INSTALL_INTERFACE:...>``
   Content of ``...`` when the property is exported using 
:command:`install(EXPORT)`,
   and empty otherwise.
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index b4688c4..ffdeb6a 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -3555,6 +3555,8 @@ void cmTarget::ExpandLinkItems(std::string const& prop,
 {
   cmGeneratorExpression ge;
   cmGeneratorExpressionDAGChecker dagChecker(this->GetName(), prop, 0, 0);
+  // The $<LINK_ONLY> expression may be in a link interface to specify private
+  // link dependencies that are otherwise excluded from usage requirements.
   if(usage_requirements_only)
     {
     dagChecker.SetTransitivePropertiesOnly();
@@ -6057,18 +6059,8 @@ void cmTarget::GetTransitivePropertyTargets(const 
std::string& config,
                                       cmTarget const* headTarget,
                                       std::vector<cmTarget const*> &tgts) const
 {
-  // The $<LINK_ONLY> expression may be in a link interface to specify private
-  // link dependencies that are otherwise excluded from usage requirements.
-  // Currently $<LINK_ONLY> is internal to CMake and only ever added by
-  // target_link_libraries for PRIVATE dependencies of STATIC libraries in
-  // INTERFACE_LINK_LIBRARIES which is used under CMP0022 NEW behavior.
-  bool usage_requirements_only =
-    this->GetType() == STATIC_LIBRARY &&
-    this->GetPolicyStatusCMP0022() != cmPolicies::WARN &&
-    this->GetPolicyStatusCMP0022() != cmPolicies::OLD;
   if(cmTarget::LinkInterface const* iface =
-     this->GetLinkInterfaceLibraries(config, headTarget,
-                                     usage_requirements_only))
+     this->GetLinkInterfaceLibraries(config, headTarget, true))
     {
     for(std::vector<cmLinkItem>::const_iterator it = iface->Libraries.begin();
         it != iface->Libraries.end(); ++it)
diff --git a/Tests/InterfaceLinkLibraries/CMakeLists.txt 
b/Tests/InterfaceLinkLibraries/CMakeLists.txt
index bd0cf74..9e14c44 100644
--- a/Tests/InterfaceLinkLibraries/CMakeLists.txt
+++ b/Tests/InterfaceLinkLibraries/CMakeLists.txt
@@ -9,6 +9,9 @@ target_compile_definitions(foo_shared INTERFACE FOO_LIBRARY)
 add_library(bar_shared SHARED bar_vs6_1.cpp)
 target_compile_definitions(bar_shared INTERFACE BAR_LIBRARY)
 set_property(TARGET bar_shared APPEND PROPERTY INTERFACE_LINK_LIBRARIES 
foo_shared)
+add_library(zot_shared SHARED zot_vs6_1.cpp)
+target_compile_definitions(zot_shared INTERFACE ZOT_LIBRARY)
+set_property(TARGET bar_shared APPEND PROPERTY INTERFACE_LINK_LIBRARIES 
$<LINK_ONLY:zot_shared>)
 
 add_executable(shared_test main_vs6_1.cpp)
 set_property(TARGET shared_test APPEND PROPERTY LINK_LIBRARIES bar_shared)
@@ -18,6 +21,9 @@ target_compile_definitions(foo_static INTERFACE FOO_LIBRARY)
 add_library(bar_static STATIC bar_vs6_2.cpp)
 target_compile_definitions(bar_static INTERFACE BAR_LIBRARY)
 set_property(TARGET bar_static APPEND PROPERTY INTERFACE_LINK_LIBRARIES 
foo_static)
+add_library(zot_static STATIC zot_vs6_2.cpp)
+target_compile_definitions(zot_static INTERFACE ZOT_LIBRARY)
+set_property(TARGET bar_static APPEND PROPERTY INTERFACE_LINK_LIBRARIES 
$<LINK_ONLY:zot_static>)
 
 add_executable(static_test main_vs6_2.cpp)
 set_property(TARGET static_test APPEND PROPERTY LINK_LIBRARIES bar_static)
@@ -31,6 +37,9 @@ target_compile_definitions(bar_shared_private INTERFACE 
BAR_LIBRARY)
 target_compile_definitions(bar_shared_private PRIVATE BAR_USE_BANG)
 set_property(TARGET bar_shared_private APPEND PROPERTY LINK_LIBRARIES 
bang_shared_private)
 set_property(TARGET bar_shared_private APPEND PROPERTY 
INTERFACE_LINK_LIBRARIES foo_shared_private)
+add_library(zot_shared_private SHARED zot_vs6_3.cpp)
+target_compile_definitions(zot_shared_private INTERFACE ZOT_LIBRARY)
+set_property(TARGET bar_shared_private APPEND PROPERTY 
INTERFACE_LINK_LIBRARIES $<LINK_ONLY:zot_shared_private>)
 
 add_executable(shared_private_test main_vs6_3.cpp)
 set_property(TARGET shared_private_test APPEND PROPERTY LINK_LIBRARIES 
bar_shared_private)
@@ -44,6 +53,9 @@ target_compile_definitions(bar_static_private INTERFACE 
BAR_LIBRARY)
 target_compile_definitions(bar_static_private PRIVATE BAR_USE_BANG)
 set_property(TARGET bar_static_private APPEND PROPERTY LINK_LIBRARIES 
bang_static_private)
 set_property(TARGET bar_static_private APPEND PROPERTY 
INTERFACE_LINK_LIBRARIES $<LINK_ONLY:bang_static_private> foo_static_private)
+add_library(zot_static_private STATIC zot_vs6_4.cpp)
+target_compile_definitions(zot_static_private INTERFACE ZOT_LIBRARY)
+set_property(TARGET bar_static_private APPEND PROPERTY 
INTERFACE_LINK_LIBRARIES $<LINK_ONLY:zot_static_private>)
 
 add_executable(InterfaceLinkLibraries main_vs6_4.cpp)
 set_property(TARGET InterfaceLinkLibraries APPEND PROPERTY LINK_LIBRARIES 
bar_static_private)
diff --git a/Tests/InterfaceLinkLibraries/main.cpp 
b/Tests/InterfaceLinkLibraries/main.cpp
index a54076a..6e1295a 100644
--- a/Tests/InterfaceLinkLibraries/main.cpp
+++ b/Tests/InterfaceLinkLibraries/main.cpp
@@ -11,9 +11,13 @@
 #error Unexpected BANG_LIBRARY
 #endif
 
-#include "bar.h"
+#ifdef ZOT_LIBRARY
+#error Unexpected ZOT_LIBRARY
+#endif
+
+#include "zot.h"
 
 int main(void)
 {
-  return foo() + bar();
+  return foo() + bar() + zot();
 }
diff --git a/Tests/InterfaceLinkLibraries/zot.cpp 
b/Tests/InterfaceLinkLibraries/zot.cpp
new file mode 100644
index 0000000..69462b0
--- /dev/null
+++ b/Tests/InterfaceLinkLibraries/zot.cpp
@@ -0,0 +1,6 @@
+#include "zot.h"
+
+int zot()
+{
+  return 0;
+}
diff --git a/Tests/InterfaceLinkLibraries/zot.h 
b/Tests/InterfaceLinkLibraries/zot.h
new file mode 100644
index 0000000..5e4fb1e
--- /dev/null
+++ b/Tests/InterfaceLinkLibraries/zot.h
@@ -0,0 +1,7 @@
+
+#include "bar.h"
+
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
+int zot();
diff --git a/Tests/InterfaceLinkLibraries/zot_vs6_1.cpp 
b/Tests/InterfaceLinkLibraries/zot_vs6_1.cpp
new file mode 100644
index 0000000..c588c5f
--- /dev/null
+++ b/Tests/InterfaceLinkLibraries/zot_vs6_1.cpp
@@ -0,0 +1 @@
+#include "zot.cpp"
diff --git a/Tests/InterfaceLinkLibraries/zot_vs6_2.cpp 
b/Tests/InterfaceLinkLibraries/zot_vs6_2.cpp
new file mode 100644
index 0000000..c588c5f
--- /dev/null
+++ b/Tests/InterfaceLinkLibraries/zot_vs6_2.cpp
@@ -0,0 +1 @@
+#include "zot.cpp"
diff --git a/Tests/InterfaceLinkLibraries/zot_vs6_3.cpp 
b/Tests/InterfaceLinkLibraries/zot_vs6_3.cpp
new file mode 100644
index 0000000..c588c5f
--- /dev/null
+++ b/Tests/InterfaceLinkLibraries/zot_vs6_3.cpp
@@ -0,0 +1 @@
+#include "zot.cpp"
diff --git a/Tests/InterfaceLinkLibraries/zot_vs6_4.cpp 
b/Tests/InterfaceLinkLibraries/zot_vs6_4.cpp
new file mode 100644
index 0000000..c588c5f
--- /dev/null
+++ b/Tests/InterfaceLinkLibraries/zot_vs6_4.cpp
@@ -0,0 +1 @@
+#include "zot.cpp"

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

Summary of changes:


hooks/post-receive
-- 
CMake
_______________________________________________
Cmake-commits mailing list
Cmake-commits@cmake.org
http://public.kitware.com/mailman/listinfo/cmake-commits

Reply via email to