[Cmake-commits] CMake branch, next, updated. v3.0.0-4286-gbc237a1

Brad King brad.king at kitware.com
Wed Jul 16 13:06:34 EDT 2014


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  bc237a1a2acace345b93ef313767e81e92461d2e (commit)
       via  63032f691bded7691c6c12581cccdedd1eaf4d78 (commit)
       via  989b2512fe6641e9cab8db0e2dbc8ec17ba6980d (commit)
      from  b9a2f277a51aa87b142fa0f7b1e38b47f4dce2c5 (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=bc237a1a2acace345b93ef313767e81e92461d2e
commit bc237a1a2acace345b93ef313767e81e92461d2e
Merge: b9a2f27 63032f6
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Jul 16 13:06:33 2014 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Wed Jul 16 13:06:33 2014 -0400

    Merge topic 'generalize-LINK_ONLY' into next
    
    63032f69 Honor $<LINK_ONLY> when checking interface properties
    989b2512 Make $<LINK_ONLY> available to projects (#14751)


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=63032f691bded7691c6c12581cccdedd1eaf4d78
commit 63032f691bded7691c6c12581cccdedd1eaf4d78
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Jul 15 11:34:02 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 16 13:07:19 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>.

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();

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=989b2512fe6641e9cab8db0e2dbc8ec17ba6980d
commit 989b2512fe6641e9cab8db0e2dbc8ec17ba6980d
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Jul 15 11:14:49 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 16 13:07:19 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


More information about the Cmake-commits mailing list