[Cmake-commits] CMake branch, next, updated. v3.5.0-rc2-188-g5f6fe80

Brad King brad.king at kitware.com
Wed Feb 17 14:11:37 EST 2016


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  5f6fe805da87fc1d3b4b66d0e9917643b626dd15 (commit)
       via  87f44b7525ebc9761b32b98f0c9e1276431e6ec1 (commit)
      from  ba189140f63bfd9166356ff608f1c281b9c0a394 (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 -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5f6fe805da87fc1d3b4b66d0e9917643b626dd15
commit 5f6fe805da87fc1d3b4b66d0e9917643b626dd15
Merge: ba18914 87f44b7
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Feb 17 14:11:35 2016 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Wed Feb 17 14:11:35 2016 -0500

    Merge topic 'fix-static-private-non-target-depends' into next
    
    87f44b75 Fix export of STATIC library PRIVATE non-target dependencies


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=87f44b7525ebc9761b32b98f0c9e1276431e6ec1
commit 87f44b7525ebc9761b32b98f0c9e1276431e6ec1
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Feb 17 13:34:15 2016 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Feb 17 14:01:11 2016 -0500

    Fix export of STATIC library PRIVATE non-target dependencies
    
    In commit v3.5.0-rc1~43^2 (Fix export of STATIC library PRIVATE
    dependencies with CMP0022 NEW, 2016-01-15) we taught
    target_link_libraries to generate `$<LINK_ONLY:$<TARGET_NAME:dep>>` in
    INTERFACE_LINK_LIBRARIES instead of `$<LINK_ONLY:dep>` so that `dep` can
    be recognized as a target name and updated during export.  However, this
    approach does not work when `dep` is just a plain library name and not a
    target because `$<TARGET_NAME:...>` requires the name of a reachable
    target.
    
    Since we do not know during target_link_libraries whether the name will
    correspond to a reachable target or not, we cannot inject the
    `$<TARGET_NAME:...>` expression.  Revert this change and solve the
    original problem instead by teaching the export logic to recognize and
    update target names directly in `$<LINK_ONLY:...>` expressions.
    
    Reported-by: Ben Boeckel <ben.boeckel at kitware.com>

diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index e8a2e6a..c005995 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -772,6 +772,27 @@ cmExportFileGenerator::ResolveTargetsInGeneratorExpression(
     lastPos = endPos;
     }
 
+  pos = 0;
+  lastPos = pos;
+  while (errorString.empty() &&
+         (pos = input.find("$<LINK_ONLY:", lastPos)) != input.npos)
+    {
+    std::string::size_type nameStartPos = pos + sizeof("$<LINK_ONLY:") - 1;
+    std::string::size_type endPos = input.find(">", nameStartPos);
+    if (endPos == input.npos)
+      {
+      errorString = "$<LINK_ONLY:...> expression incomplete";
+      break;
+      }
+    std::string libName = input.substr(nameStartPos, endPos - nameStartPos);
+    if (cmGeneratorExpression::IsValidTargetName(libName) &&
+        this->AddTargetNamespace(libName, target, missingTargets))
+      {
+      input.replace(nameStartPos, endPos - nameStartPos, libName);
+      }
+    lastPos = nameStartPos + libName.size() + 1;
+    }
+
   this->ReplaceInstallPrefix(input);
 
   if (!errorString.empty())
diff --git a/Source/cmTargetLinkLibrariesCommand.cxx b/Source/cmTargetLinkLibrariesCommand.cxx
index 5f3246a..435346a 100644
--- a/Source/cmTargetLinkLibrariesCommand.cxx
+++ b/Source/cmTargetLinkLibrariesCommand.cxx
@@ -432,11 +432,8 @@ cmTargetLinkLibrariesCommand::HandleLibrary(const std::string& lib,
         {
         std::string configLib = this->Target
                                      ->GetDebugGeneratorExpressions(lib, llt);
-        if (cmGeneratorExpression::IsValidTargetName(configLib))
-          {
-          configLib = "$<LINK_ONLY:$<TARGET_NAME:" + configLib + ">>";
-          }
-        else if (cmGeneratorExpression::Find(configLib) != std::string::npos)
+        if (cmGeneratorExpression::IsValidTargetName(lib)
+            || cmGeneratorExpression::Find(lib) != std::string::npos)
           {
           configLib = "$<LINK_ONLY:" + configLib + ">";
           }
diff --git a/Tests/RunCMake/target_link_libraries/RunCMakeTest.cmake b/Tests/RunCMake/target_link_libraries/RunCMakeTest.cmake
index 8307607..1466fbf 100644
--- a/Tests/RunCMake/target_link_libraries/RunCMakeTest.cmake
+++ b/Tests/RunCMake/target_link_libraries/RunCMakeTest.cmake
@@ -8,3 +8,5 @@ run_cmake(MixedSignature)
 run_cmake(Separate-PRIVATE-LINK_PRIVATE-uses)
 run_cmake(SubDirTarget)
 run_cmake(SharedDepNotTarget)
+run_cmake(StaticPrivateDepNotExported)
+run_cmake(StaticPrivateDepNotTarget)
diff --git a/Tests/RunCMake/target_link_libraries/StaticPrivateDepNotExported-result.txt b/Tests/RunCMake/target_link_libraries/StaticPrivateDepNotExported-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries/StaticPrivateDepNotExported-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/target_link_libraries/StaticPrivateDepNotExported-stderr.txt b/Tests/RunCMake/target_link_libraries/StaticPrivateDepNotExported-stderr.txt
new file mode 100644
index 0000000..6bb44ab
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries/StaticPrivateDepNotExported-stderr.txt
@@ -0,0 +1 @@
+CMake Error: install\(EXPORT "Exp" ...\) includes target "foo" which requires target "not_exported" that is not in the export set.
diff --git a/Tests/RunCMake/target_link_libraries/StaticPrivateDepNotExported.cmake b/Tests/RunCMake/target_link_libraries/StaticPrivateDepNotExported.cmake
new file mode 100644
index 0000000..9b97918
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries/StaticPrivateDepNotExported.cmake
@@ -0,0 +1,7 @@
+cmake_policy(SET CMP0022 NEW)
+enable_language(C)
+add_library(foo STATIC empty.c)
+add_library(not_exported STATIC empty.c)
+target_link_libraries(foo PRIVATE not_exported)
+install(TARGETS foo EXPORT Exp DESTINATION lib)
+install(EXPORT Exp DESTINATION lib/cmake/Exp)
diff --git a/Tests/RunCMake/target_link_libraries/StaticPrivateDepNotTarget.cmake b/Tests/RunCMake/target_link_libraries/StaticPrivateDepNotTarget.cmake
new file mode 100644
index 0000000..7122ae9
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries/StaticPrivateDepNotTarget.cmake
@@ -0,0 +1,6 @@
+cmake_policy(SET CMP0022 NEW)
+enable_language(C)
+add_library(foo STATIC empty.c)
+target_link_libraries(foo PRIVATE not_a_target)
+install(TARGETS foo EXPORT Exp DESTINATION lib)
+install(EXPORT Exp DESTINATION lib/cmake/Exp)

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

Summary of changes:
 Source/cmExportFileGenerator.cxx                   |   21 ++++++++++++++++++++
 Source/cmTargetLinkLibrariesCommand.cxx            |    7 ++-----
 .../target_link_libraries/RunCMakeTest.cmake       |    2 ++
 .../StaticPrivateDepNotExported-result.txt}        |    0
 .../StaticPrivateDepNotExported-stderr.txt         |    1 +
 .../StaticPrivateDepNotExported.cmake              |    7 +++++++
 .../StaticPrivateDepNotTarget.cmake                |    6 ++++++
 7 files changed, 39 insertions(+), 5 deletions(-)
 copy Tests/RunCMake/{CMP0004/CMP0004-NEW-result.txt => target_link_libraries/StaticPrivateDepNotExported-result.txt} (100%)
 create mode 100644 Tests/RunCMake/target_link_libraries/StaticPrivateDepNotExported-stderr.txt
 create mode 100644 Tests/RunCMake/target_link_libraries/StaticPrivateDepNotExported.cmake
 create mode 100644 Tests/RunCMake/target_link_libraries/StaticPrivateDepNotTarget.cmake


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list