Brad King wrote:

> On Fri, Apr 26, 2013 at 10:39 AM, Stephen Kelly
> <steve...@gmail.com> wrote:
>> Brad King <brad.king@...> writes:
>>
>>> I looked into implementing this and realized that we're not propagating
>>> usage requirements from the entire link closure, only from the direct
>>> dependencies.
>>
>> Are you sure? Maybe I don't understand what you mean. Can you post a code
>> snippet?
>>
>>  add_library(foo SHARED empty.cpp)
>>  target_include_directories(foo INTERFACE /opt/foo)
>>  add_library(bar SHARED empty.cpp)
>>  add_library(sho SHARED empty.cpp)
>>
>>  target_link_libraries(sho bar)
>>  target_link_libraries(bar foo)
> 
> It appears to work but I do not see how from a quick read of the
> implementation.
> The AppendTllIncludes is only called for direct dependencies by tll(). 
> What propagates the requirement transitively in 2.8.11-rc3?


Ah, indeed. This solves the mystery of why the current implementation 
creates the generator expression for each entry instead of reading the 
property directly.

 $<TARGET_PROPERTY:foo,INTERFACE_INCLUDE_DIRECTORIES>

gives a transitively evaluated result, but 

 fooTarget->GetDefinition("INTERFACE_INCLUDE_DIRECTORIES")

does not.

The former works because it is part of the targetPropertyTransitiveWhitelist 
in cmGeneratorExpressionEvaluator when evaluating the TargetPropertyNode, so 
I probably also wanted to ensure re-use of the logic around there for 
context-sensitive conditions which relate to caching.

It can probably be refactored to bypass the genex evaluation though.

Thanks,

Steve.


--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to