[Cmake-commits] CMake branch, next, updated. v3.0.0-4169-ge884baa

Brad King brad.king at kitware.com
Wed Jul 9 13:20:09 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  e884baa631df6c5c9556eb9b3f351366e37bf92c (commit)
       via  e51f2a7b6cd45a3422f01dbecf3bdc63a84545ab (commit)
      from  58fb132fd71d372d9f39b8fdd9753630d91b64f4 (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=e884baa631df6c5c9556eb9b3f351366e37bf92c
commit e884baa631df6c5c9556eb9b3f351366e37bf92c
Merge: 58fb132 e51f2a7
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Jul 9 13:20:09 2014 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Wed Jul 9 13:20:09 2014 -0400

    Merge topic 'interface-sources-target-objects' into next
    
    e51f2a7b Allow INTERFACE_SOURCES to specify $<TARGET_OBJECTS> (#14970)


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e51f2a7b6cd45a3422f01dbecf3bdc63a84545ab
commit e51f2a7b6cd45a3422f01dbecf3bdc63a84545ab
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Jul 9 13:11:38 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 9 13:11:38 2014 -0400

    Allow INTERFACE_SOURCES to specify $<TARGET_OBJECTS> (#14970)
    
    Fix cmTarget::GetSourceFiles to set EvaluateForBuildsystem on the
    $<TARGET_PROPERTY:...,INTERFACE_SOURCES> generator expression so that
    the $<TARGET_OBJECTS> generator expression is allowed within an
    INTERFACE_SOURCES value.
    
    Extend the InterfaceLibrary test to cover this case.  Extend the
    RunCMake.TargetObjects test to cover failure of $<TARGET_OBJECTS>
    when used through $<TARGET_PROPERTY:...,INTERFACE_SOURCES> in a
    non-buildsystem context.

diff --git a/Help/manual/cmake-buildsystem.7.rst b/Help/manual/cmake-buildsystem.7.rst
index a7402f7..1ce9a7e 100644
--- a/Help/manual/cmake-buildsystem.7.rst
+++ b/Help/manual/cmake-buildsystem.7.rst
@@ -107,6 +107,12 @@ they may not be installed, exported, or used in the right hand side of
 :command:`target_link_libraries`.  They also may not be used as the ``TARGET``
 in a use of the :command:`add_custom_command(TARGET)` command signature.
 
+Although object libraries may not be named directly in calls to
+the :command:`target_link_libraries` command, they can be "linked"
+indirectly by using an :ref:`Interface Library <Interface Libraries>`
+whose :prop_tgt:`INTERFACE_SOURCES` target property is set to name
+``$<TARGET_OBJECTS:objlib>``.
+
 Build Specification and Usage Requirements
 ==========================================
 
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 13eac3b..3b83cd3 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -1210,6 +1210,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
         {
         cmGeneratorExpression ge(&context->Backtrace);
         cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(prop);
+        cge->SetEvaluateForBuildsystem(context->EvaluateForBuildsystem);
         std::string result = cge->Evaluate(context->Makefile,
                             context->Config,
                             context->Quiet,
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 0a7724c..667c2a4 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -6375,6 +6375,7 @@ void cmTargetInternals::AddInterfaceEntries(
           "$<TARGET_PROPERTY:" + *it + "," + prop + ">";
         cmGeneratorExpression ge(&it->Backtrace);
         cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(genex);
+        cge->SetEvaluateForBuildsystem(true);
         entries.push_back(
           new cmTargetInternals::TargetPropertyEntry(cge, *it));
         }
diff --git a/Tests/InterfaceLibrary/CMakeLists.txt b/Tests/InterfaceLibrary/CMakeLists.txt
index d4f49c2..fe202dd 100644
--- a/Tests/InterfaceLibrary/CMakeLists.txt
+++ b/Tests/InterfaceLibrary/CMakeLists.txt
@@ -18,8 +18,12 @@ set_property(TARGET imp::iface APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SOMEPRO
 set_property(TARGET imp::iface PROPERTY INTERFACE_SOMEPROP OFF)
 set_property(TARGET imp::iface PROPERTY INTERFACE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/does_not_exist.cpp)
 
+add_library(objlib OBJECT obj.cpp)
+add_library(iface_objlib INTERFACE)
+target_sources(iface_objlib INTERFACE $<TARGET_OBJECTS:objlib>)
+
 add_executable(InterfaceLibrary definetestexe.cpp)
-target_link_libraries(InterfaceLibrary iface_nodepends headeriface subiface)
+target_link_libraries(InterfaceLibrary iface_nodepends headeriface subiface iface_objlib)
 
 add_subdirectory(libsdir)
 
diff --git a/Tests/InterfaceLibrary/definetestexe.cpp b/Tests/InterfaceLibrary/definetestexe.cpp
index 30f2925..9044076 100644
--- a/Tests/InterfaceLibrary/definetestexe.cpp
+++ b/Tests/InterfaceLibrary/definetestexe.cpp
@@ -15,9 +15,10 @@
 #error Expected IFACE_HEADER_BUILDDIR
 #endif
 
+extern int obj();
 extern int sub();
 
 int main(int,char**)
 {
-  return sub();
+  return obj() + sub();
 }
diff --git a/Tests/InterfaceLibrary/obj.cpp b/Tests/InterfaceLibrary/obj.cpp
new file mode 100644
index 0000000..ee6f5fe
--- /dev/null
+++ b/Tests/InterfaceLibrary/obj.cpp
@@ -0,0 +1 @@
+int obj() { return 0; }
diff --git a/Tests/RunCMake/TargetObjects/BadContext-stderr.txt b/Tests/RunCMake/TargetObjects/BadContext-stderr.txt
index 92f2c91..2d31f79 100644
--- a/Tests/RunCMake/TargetObjects/BadContext-stderr.txt
+++ b/Tests/RunCMake/TargetObjects/BadContext-stderr.txt
@@ -1,4 +1,14 @@
-CMake Error at BadContext.cmake:2 \(file\):
+CMake Error at BadContext.cmake:4 \(file\):
+  Error evaluating generator expression:
+
+    \$<TARGET_OBJECTS:NoTarget>
+
+  The evaluation of the TARGET_OBJECTS generator expression is only suitable
+  for consumption by CMake.  It is not suitable for writing out elsewhere.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
++
+CMake Error at BadContext.cmake:5 \(file\):
   Error evaluating generator expression:
 
     \$<TARGET_OBJECTS:NoTarget>
diff --git a/Tests/RunCMake/TargetObjects/BadContext.cmake b/Tests/RunCMake/TargetObjects/BadContext.cmake
index 67962a4..5d7e33e 100644
--- a/Tests/RunCMake/TargetObjects/BadContext.cmake
+++ b/Tests/RunCMake/TargetObjects/BadContext.cmake
@@ -1,4 +1,7 @@
+add_library(iface INTERFACE)
+target_sources(iface INTERFACE $<TARGET_OBJECTS:NoTarget>)
 
 file(GENERATE OUTPUT test_output CONTENT $<TARGET_OBJECTS:NoTarget>)
+file(GENERATE OUTPUT test_output2 CONTENT $<TARGET_PROPERTY:iface,INTERFACE_SOURCES>)
 
 install(FILES $<TARGET_OBJECTS:NoTarget> DESTINATION objects)

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

Summary of changes:
 Help/manual/cmake-buildsystem.7.rst                |    6 ++++++
 Source/cmGeneratorExpressionEvaluator.cxx          |    1 +
 Source/cmTarget.cxx                                |    1 +
 Tests/InterfaceLibrary/CMakeLists.txt              |    6 +++++-
 Tests/InterfaceLibrary/definetestexe.cpp           |    3 ++-
 Tests/InterfaceLibrary/obj.cpp                     |    1 +
 Tests/RunCMake/TargetObjects/BadContext-stderr.txt |   12 +++++++++++-
 Tests/RunCMake/TargetObjects/BadContext.cmake      |    3 +++
 8 files changed, 30 insertions(+), 3 deletions(-)
 create mode 100644 Tests/InterfaceLibrary/obj.cpp


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list