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  f7ef08ef7c24385595fd652bc83dac3b41e87683 (commit)
       via  5b222354de7060af409d0d80aa06180ed1b3ac64 (commit)
      from  7c3f18ff68824eab38cb6a2b47e76a9ae1b2e130 (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=f7ef08ef7c24385595fd652bc83dac3b41e87683
commit f7ef08ef7c24385595fd652bc83dac3b41e87683
Merge: 7c3f18f 5b22235
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Wed Jun 5 09:10:04 2013 -0400
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Wed Jun 5 09:10:04 2013 -0400

    Merge branch 'fix-genex-HEAD-target' into next
    
    5b222354 Genex: Fix the HEAD target used for evaluated expressions


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5b222354de7060af409d0d80aa06180ed1b3ac64
commit 5b222354de7060af409d0d80aa06180ed1b3ac64
Author:     Stephen Kelly <steve...@gmail.com>
AuthorDate: Mon Jun 3 23:53:29 2013 +0200
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Wed Jun 5 09:05:00 2013 -0400

    Genex: Fix the HEAD target used for evaluated expressions
    
    If the expression $<TARGET_PROPERTY:prop> appears in the content
    of a target property, the target that prop is read from is
    the 'head target' of the expression. In contexts such as evaluating
    the content of a target property during generation, such
    as INCLUDE_DIRECTORIES, the 'head target' is the one on which the
    initial request was made.
    
    If evaluating a generator expression which is not a target property
    content, the target must be explicitly specified. Such contexts
    include add_custom_command and file(GENERATE). The content might
    then look like
    
     $<TARGET_PROPERTY:tgt,prop>
    
    However, as there is no HeadTarget set, any generator expressions
    evaluated as part of reading prop from tgt which do not specify
    the tgt directly report an error.
    
    Modify the logic of the TARGET_PROPERTY generator expression so
    that in such contexts, the 'head target' is set to the appropriate
    target which was first encountered.

diff --git a/Source/cmGeneratorExpressionEvaluator.cxx 
b/Source/cmGeneratorExpressionEvaluator.cxx
index de6371a..a01a0f8 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -315,6 +315,7 @@ static const char* targetPropertyTransitiveWhitelist[] = {
 
 std::string getLinkedTargetsContent(const std::vector<std::string> &libraries,
                                   cmTarget *target,
+                                  cmTarget *headTarget,
                                   cmGeneratorExpressionContext *context,
                                   cmGeneratorExpressionDAGChecker *dagChecker,
                                   const std::string &interfacePropertyName)
@@ -345,7 +346,7 @@ std::string getLinkedTargetsContent(const 
std::vector<std::string> &libraries,
   std::string linkedTargetsContent = cge->Evaluate(context->Makefile,
                       context->Config,
                       context->Quiet,
-                      context->HeadTarget,
+                      headTarget,
                       target,
                       dagChecker);
   if (cge->GetHadContextSensitiveCondition())
@@ -538,6 +539,8 @@ static const struct TargetPropertyNode : public 
cmGeneratorExpressionNode
       interfacePropertyName = "INTERFACE_COMPILE_DEFINITIONS";
       }
 
+    cmTarget *headTarget = context->HeadTarget ? context->HeadTarget : target;
+
     const char **transBegin = targetPropertyTransitiveWhitelist;
     const char **transEnd = targetPropertyTransitiveWhitelist
               + (sizeof(targetPropertyTransitiveWhitelist) /
@@ -547,11 +550,12 @@ static const struct TargetPropertyNode : public 
cmGeneratorExpressionNode
       {
       const cmTarget::LinkInterface *iface = target->GetLinkInterface(
                                                     context->Config,
-                                                    context->HeadTarget);
+                                                    headTarget);
       if(iface)
         {
         linkedTargetsContent =
                   getLinkedTargetsContent(iface->Libraries, target,
+                                          headTarget,
                                           context, &dagChecker,
                                           interfacePropertyName);
         }
@@ -561,11 +565,12 @@ static const struct TargetPropertyNode : public 
cmGeneratorExpressionNode
       {
       const cmTarget::LinkImplementation *impl = target->GetLinkImplementation(
                                                     context->Config,
-                                                    context->HeadTarget);
+                                                    headTarget);
       if(impl)
         {
         linkedTargetsContent =
                   getLinkedTargetsContent(impl->Libraries, target,
+                                          headTarget,
                                           context, &dagChecker,
                                           interfacePropertyName);
         }
@@ -614,7 +619,7 @@ static const struct TargetPropertyNode : public 
cmGeneratorExpressionNode
         std::string result = cge->Evaluate(context->Makefile,
                             context->Config,
                             context->Quiet,
-                            context->HeadTarget,
+                            headTarget,
                             target,
                             &dagChecker);
 
diff --git a/Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt 
b/Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt
index ad6671f..bcfbe3c 100644
--- a/Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt
+++ b/Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt
@@ -109,6 +109,11 @@ set_property(TARGET libbad APPEND PROPERTY
   INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/bad"
 )
 
+add_library(lib6 SHARED other.cpp)
+add_library(lib7 SHARED other.cpp)
+target_link_libraries(lib7 
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:lib6>)
+target_include_directories(lib7 PUBLIC 
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:/lib7/include>)
+add_custom_target(head_target_test "some_bogus_custom_tool 
\"$<TARGET_PROPERTY:lib7,INCLUDE_DIRECTORIES>$<TARGET_PROPERTY:lib7,INTERFACE_INCLUDE_DIRECTORIES>\"")
 
 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/lib5.cpp" "#include \"common.h\"\n")
 add_library(lib5 "${CMAKE_CURRENT_BINARY_DIR}/lib5.cpp")
diff --git a/Tests/IncludeDirectories/TargetIncludeDirectories/other.cpp 
b/Tests/IncludeDirectories/TargetIncludeDirectories/other.cpp
new file mode 100644
index 0000000..6673471
--- /dev/null
+++ b/Tests/IncludeDirectories/TargetIncludeDirectories/other.cpp
@@ -0,0 +1,6 @@
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
+int other() {
+  return 0;
+}

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

Summary of changes:


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

Reply via email to