1. 24 Jun, 2013 1 commit
  2. 10 Jun, 2013 2 commits
    • Stephen Kelly's avatar
      Use a preprocessor loop to manage the valid transitive properties. · 0d8db250
      Stephen Kelly authored
      Hopefully this will prevent regressions when adding further transitive
      properties in the future.
      0d8db250
    • Stephen Kelly's avatar
      Add missing 'seen' check for evaluating COMPILE_OPTIONS. · 477e4136
      Stephen Kelly authored
      Commit 089fe1c1 (Optimize genex evaluation for includes and
      defines., 2013-02-01) introduced an optimization on DAG processing
      to not reprocess properties on targets which have already been seen.
      
      This was refactored slightly in commit 8dfdf1c7 (Fix the tests for
      evaluating includes and defines., 2013-02-18), but was not extended
      to cover COMPILE_OPTIONS in commit 80ca9c4b (Add COMPILE_OPTIONS target
      property., 2013-05-16).
      
      This omission causes the same performance regression in running
      cmake on LLVM which 089fe1c1 fixed before, but this time for the
      transitive evaluation of the COMPILE_OPTIONS property.
      477e4136
  3. 02 Jun, 2013 1 commit
  4. 23 Feb, 2013 3 commits
    • Stephen Kelly's avatar
      Fix the tests for evaluating includes and defines. · 8dfdf1c7
      Stephen Kelly authored
      We should also check whether the INTERFACE_ variant of a property
      is being read, and in the case of the compile definitions, we should
      test the _<CONFIG> suffixed variants. That is already available
      through the use of the methods.
      
      This way, we use the ALREADY_SEEN optimization when evaluating
      the includes of a target in 'external' generator expressions, ie, those
      used in a add_custom_command invokation, as opposed to evaluating the
      INCLUDE_DIRECTORIES of a target itself via GetIncludeDirectories.
      8dfdf1c7
    • Stephen Kelly's avatar
      Fix constness of accessors. · 98a67252
      Stephen Kelly authored
      98a67252
    • Stephen Kelly's avatar
      Fix DAG checker finding cycling dependencies. · d1a2729b
      Stephen Kelly authored
      Before this patch, the following is reported falsely as a self-reference:
      
       target_link_libraries(empty2 LINK_PUBLIC empty3)
       target_link_libraries(empty3 LINK_PUBLIC empty2)
      
       add_custom_target(...
          -DINCLUDES=$<TARGET_PROPERTY:empty2,INTERFACE_INCLUDE_DIRECTORIES>
       )
      
      The reason is that the existing code assumed that all reading of
      include directories would be done through cmTarget::GetIncludeDirectories()
      and would therefore be initialized with a DagChecker. That is not the case
      if reading the property with an 'external' generator expression.
      d1a2729b
  5. 12 Feb, 2013 1 commit
  6. 07 Feb, 2013 1 commit
  7. 02 Feb, 2013 1 commit
    • Stephen Kelly's avatar
      Optimize genex evaluation for includes and defines. · 089fe1c1
      Stephen Kelly authored
      While porting boost to use these features, the generation step took
      too long (several minutes before I stopped it). The reason was that
      the boost libraries form a large interdependent mesh. The libraries
      list their dependencies in their INTERFACE such as:
      
       $<LINKED:boost::core>;$<LINKED:boost::config>;$<LINKED:boost::mpl>
      
      As boost::core already depends on the boost::config libraries, that
      expression has no impact on the end-content, as it is removed after
      the generation step. There is no DAG issue though, so the generator
      expression evaluation would fully evaluate them. In the case of the
      config library, it also depends on the core library, so all depends
      are followed through that again, despite the fact that they've just
      been evaluated. After this patch, the evaluation skips libraries if
      they have already been seen via depends or directly in the content.
      
      This patch keeps track of targets whose INTERFACE has been consumed
      already. The INCLUDE_DIRECTORIES and COMPILE_DEFINITIONS properties
      are whitelisted because repeated content will be stripped out later
      during generation. For other properties now and in the future, that
      may not be the case.
      089fe1c1
  8. 31 Jan, 2013 1 commit
  9. 24 Jan, 2013 1 commit
  10. 20 Jan, 2013 1 commit
  11. 04 Jan, 2013 2 commits
    • Stephen Kelly's avatar
      Make cycles in target properties ignored, not an error. · c67b8124
      Stephen Kelly authored
      Constructs such as these are an error as they are direct self-references:
      
       set_property(TARGET foo APPEND PROPERTY
         INCLUDE_DIRECTORIES $<TARGET_PROPERTY:foo,INCLUDE_DIRECTORIES>)
       set_property(TARGET foo APPEND PROPERTY
         INCLUDE_DIRECTORIES $<TARGET_PROPERTY:INCLUDE_DIRECTORIES>)
      
      However, this is an indirect self-reference in a cycle, and not an error:
      
       set_property(TARGET foo APPEND PROPERTY
         INCLUDE_DIRECTORIES $<TARGET_PROPERTY:bar,INCLUDE_DIRECTORIES>)
       set_property(TARGET bar APPEND PROPERTY
         INCLUDE_DIRECTORIES $<TARGET_PROPERTY:foo,INCLUDE_DIRECTORIES>)
      c67b8124
    • Stephen Kelly's avatar
      Make all relevant targets available in the genex context. · 26def177
      Stephen Kelly authored
      The current node being evaluated transitively in the generator
      expression must be available to resolve mapped configs.
      26def177
  12. 28 Sep, 2012 1 commit