1. 02 Feb, 2014 1 commit
  2. 12 Jan, 2014 1 commit
  3. 09 Jan, 2014 1 commit
  4. 06 Jan, 2014 1 commit
    • Stephen Kelly's avatar
      cmTarget: Fix system include annotation propagation. · faedd2be
      Stephen Kelly authored
      Direct users of IMPORTED targets treat INTERFACE_INCLUDE_DIRECTORIES
      as SYSTEM, after commit a63fcbcb (Always consider includes from IMPORTED
      targets to be SYSTEM., 2013-08-29).  It was intended that transitive
      use of an IMPORTED target would have the same behavior, but that
      did not work.  The implementation processed only direct dependencies
      in cmTarget::FinalizeSystemIncludeDirectories.
      
      Implement transitive evaluation of dependencies by traversing the
      link interface of each target in the link implementation.
      faedd2be
  5. 02 Jan, 2014 1 commit
  6. 11 Dec, 2013 1 commit
  7. 08 Dec, 2013 2 commits
  8. 27 Nov, 2013 1 commit
    • Stephen Kelly's avatar
      QtAutoUic: Add INTERFACE_AUTOUIC_OPTIONS target property. · 98093c45
      Stephen Kelly authored
      Transitively consume the property from linked dependents.
      
      Implement configuration-specific support by following the pattern
      set out for compile definitions and includes in cmQtAutoGenerators.
      
      Implement support for origin-tracking with CMAKE_DEBUG_TARGET_PROPERTIES.
      
      This is motivated by the needs of KDE, which provides a separate
      translation system based on gettext instead of the Qt linguist
      translation system. The Qt uic tool provides command line options
      for configuring the method used to translate text, and to add an
      include directive to the generated file to provide the method.
      
       http://thread.gmane.org/gmane.comp.kde.devel.frameworks/7930/focus=7992
      
      Implement the interface to provide the uic options as a usage-requirement
      on the KI18n target, as designed for KDE.
      98093c45
  9. 26 Nov, 2013 1 commit
    • Stephen Kelly's avatar
      Export: Report error on relative include with genex. · 5838aba1
      Stephen Kelly authored
      Diagnostics which check the sanity of exported include paths
      previously skipped over any path containing a generator expression.
      
      Introduce a policy to issue an error message in such cases.
      
      The export files created in the OLD behavior are not usable, because
      they contain relative paths or paths to the source or build location
      which are not suitable for use on installation. CMake will report an
      error on import.
      5838aba1
  10. 19 Nov, 2013 6 commits
  11. 09 Nov, 2013 1 commit
  12. 03 Nov, 2013 1 commit
  13. 31 Oct, 2013 1 commit
    • Stephen Kelly's avatar
      cmTarget: Make GetProperty() const. · c4373b33
      Stephen Kelly authored
      This has follow-on effects for other methods and classes. Further
      work on making the use of const cmTarget pointers common can be
      done, particularly with a view to generate-time methods.
      c4373b33
  14. 30 Oct, 2013 1 commit
  15. 29 Oct, 2013 1 commit
    • Stephen Kelly's avatar
      Remove the Location member from cmTarget. · 638843af
      Stephen Kelly authored
      It is never used. Presumably it only exists so that a const char * can
      be returned from GetLocation. However, that is getting in the way
      now, so use a static std::string instead, which is already a common
      pattern in cmake.
      638843af
  16. 27 Oct, 2013 1 commit
  17. 24 Oct, 2013 1 commit
    • Stephen Kelly's avatar
      cmTarget: Add interface for compatible numeric properties · ff6c4013
      Stephen Kelly authored
      When using the boost MPL library, one can set a define to increase
      the limit of how many variadic elements should be supported. The
      default for BOOST_MPL_LIMIT_VECTOR_SIZE is 20:
      
       http://www.boost.org/doc/libs/1_36_0/libs/mpl/doc/refmanual/limit-vector-size.html
      
      If the foo library requires that to be set to 30, and the independent
      bar library requires it to be set to 40, consumers of both need to set
      it to 40.
      
       add_library(foo INTERFACE)
       set_property(TARGET foo PROPERTY INTERFACE_boost_mpl_vector_size 30)
       set_property(TARGET foo PROPERTY COMPATIBLE_INTERFACE_NUMBER_MAX boost_mpl_vector_size)
       target_compile_definitions(foo INTERFACE BOOST_MPL_LIMIT_VECTOR_SIZE=$<TARGET_PROPERTY:boost_mpl_vector_size>)
      
       add_library(bar INTERFACE)
       set_property(TARGET bar PROPERTY INTERFACE_boost_mpl_vector_size 40)
       # Technically the next two lines are redundant, but as foo and bar are
       # independent, they both set these interfaces.
       set_property(TARGET bar PROPERTY COMPATIBLE_INTERFACE_NUMBER_MAX boost_mpl_vector_size)
       target_compile_definitions(bar INTERFACE BOOST_MPL_LIMIT_VECTOR_SIZE=$<TARGET_PROPERTY:boost_mpl_vector_size>)
      
       add_executable(user)
       target_link_libraries(user foo bar)
      
      Because the TARGET_PROPERTY reads the boost_mpl_vector_size property
      from the HEAD of the dependency graph (the user target), and because
      that property appears in the COMPATIBLE_INTERFACE_NUMBER_MAX of
      the dependencies of the user target, the maximum value for it is
      chosen for the compile definition, ie, 40.
      
      There are also use-cases for choosing the minimum value of a number.
      In Qt, deprecated API can be disabled by version. Setting the
      definition QT_DISABLE_DEPRECATED_BEFORE=0 disables no deprecated
      API. Setting it to 0x501000 disables API which was deprecated before
      Qt 5.1 etc.
      
      If two dependencies require the use of API which was deprecated in
      different Qt versions, then COMPATIBLE_INTERFACE_NUMBER_MIN can be
      used to ensure that both can compile.
      ff6c4013
  18. 21 Oct, 2013 1 commit
    • Stephen Kelly's avatar
      Create make rules for INTERFACE_LIBRARY targets. · b04f3b9a
      Stephen Kelly authored and Brad King's avatar Brad King committed
      The result is that the depends of the target are created.
      
      So,
      
       add_library(somelib foo.cpp)
       add_library(anotherlib EXCLUDE_FROM_ALL foo.cpp)
       add_library(extra EXCLUDE_FROM_ALL foo.cpp)
       target_link_libraries(anotherlib extra)
      
       add_library(iface INTERFACE)
       target_link_libraries(iface INTERFACE anotherlib)
      
      Executing 'make iface' will result in the anotherlib and extra targets
      being made.
      
      Adding a regular executable to the INTERFACE of an INTERFACE_LIBRARY
      will not result in the executable being built with 'make iface' because
      of the logic in cmComputeTargetDepends::AddTargetDepend.
      
      So far, this is implemented only for the Makefile generator. Other
      generators will follow if this feature is possible for them.
      
      Make INTERFACE_LIBRARY targets part of the all target by default.
      Test this by building the all target and making the expected library
      EXCLUDE_FROM_ALL.
      b04f3b9a
  19. 11 Oct, 2013 1 commit
    • Stephen Kelly's avatar
      cmTarget: Deprecate the LOCATION target property with a policy. · e4e5b28c
      Stephen Kelly authored
      The final location and name of a build-target is not determined
      until generate-time. However, reading the LOCATION property from
      a target is currently allowed at configure time. Apart from creating
      possibly-erroneous results, this has an impact on the implementation
      of cmake itself, and prevents some major cleanups from being made.
      
      Disallow reading LOCATION from build-targets with a policy. Port some
      existing uses of it in CMake itself to use the TARGET_FILE generator
      expression.
      e4e5b28c
  20. 08 Oct, 2013 1 commit
  21. 07 Oct, 2013 1 commit
    • Stephen Kelly's avatar
      Add the INTERFACE_LIBRARY target type. · fe732264
      Stephen Kelly authored and Brad King's avatar Brad King committed
      This target type only contains INTERFACE_* properties, so it can be
      used as a structural node. The target-specific commands enforce
      that they may only be used with the INTERFACE keyword when used
      with INTERFACE_LIBRARY targets. The old-style target properties
      matching LINK_INTERFACE_LIBRARIES_<CONFIG> are always ignored for
      this target type.
      
      The name of the INTERFACE_LIBRARY must match a validity generator
      expression. The validity is similar to that of an ALIAS target,
      but with the additional restriction that it may not contain
      double colons. Double colons will carry the meaning of IMPORTED
      or ALIAS targets in CMake 2.8.13.
      
      An ALIAS target may be created for an INTERFACE library.
      
      At this point it can not be exported and does not appear in the
      buildsystem and project files are not created for them. That may
      be added as a feature in a later commit.
      
      The generators need some changes to handle the INTERFACE_LIBRARY
      targets returned by cmComputeLinkInterface::GetItems....
      fe732264
  22. 26 Jul, 2013 1 commit
  23. 24 Jul, 2013 1 commit
  24. 16 Jul, 2013 1 commit
  25. 15 Jul, 2013 1 commit
    • Brad King's avatar
      VS,Xcode: Drop incorrect legacy dependency trace (#14291) · 4bb6e248
      Brad King authored
      Drop the "vsProjectFile" argument from cmTarget::TraceDependencies.  It
      appears to be the modern equivalent to a hunk added in commit ba68f771
      (...added new custom command support, 2003-06-03):
      
       +  name = libName;
       +  name += ".dsp.cmake";
       +  srcFilesToProcess.push(name);
      
      but was broken by refactoring at some point.  The current behavior tries
      to trace dependencies on a source file named the same as a target, which
      makes no sense.  Furthermore, in code of the form
      
       add_executable(foo foo.c)
       add_custom_command(OUTPUT "${somewhere}/foo" ... DEPENDS foo)
      
      the "vsProjectFile" value "foo" matches source "${somewhere}/foo.rule"
      generated to hold the custom command and causes the command to be added
      to the "foo" target incorrectly.
      
      Simply drop the incorrect source file trace and supporting logic.
      4bb6e248
  26. 12 Jul, 2013 1 commit
    • Stephen Kelly's avatar
      Add target property debugging for COMPILE_DEFINITIONS · d7dd0108
      Stephen Kelly authored
      Use constructs similar to those for COMPILE_OPTIONS. This is a little
      different because there is a command to remove_definitions(), so
      we can't populate the equivalent target property until generate-time
      in cmGlobalGenerator.
      d7dd0108
  27. 11 Jul, 2013 2 commits
  28. 08 Jul, 2013 1 commit
    • Stephen Kelly's avatar
      Introduce the INTERFACE_LINK_LIBRARIES property. · d0a76ea0
      Stephen Kelly authored
      This property replaces the properties which
      match (IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?, and is enabled
      for IMPORTED targets, and for non-IMPORTED targets only with a policy.
      
      For static libraries, the INTERFACE_LINK_LIBRARIES property is
      also used as the source of transitive usage requirements content.
      Static libraries still require users to link to all entries in
      their LINK_LIBRARIES, but usage requirements such as INCLUDE_DIRECTORIES
      COMPILE_DEFINITIONS and COMPILE_OPTIONS can be restricted to only
      certain interface libraries.
      
      Because the INTERFACE_LINK_LIBRARIES property is populated unconditionally,
      we need to compare the evaluated result of it with the link implementation
      to determine whether to issue the policy warning for static libraries. For
      shared libraries, the policy warning is issued if the contents of
      the INTERFACE_LINK_LIBRARIES property differs from the contents of the
      relevant config-specific old LINK_INTERFACE_LIBRARIES proper...
      d0a76ea0
  29. 07 Jul, 2013 1 commit
  30. 02 Jul, 2013 1 commit
    • Stephen Kelly's avatar
      Store system include directories in the cmTarget. · 83498d41
      Stephen Kelly authored
      Entries from the cmMakefile are processed and maintained similarly
      to other include directories. The include_directories(SYSTEM)
      signature affects all following targets, and all prior targets
      in the same makefile.
      83498d41
  31. 03 Jun, 2013 1 commit
    • Clinton Stimpson's avatar
      OS X: Add RPATH support for Mac. · 94e7fef2
      Clinton Stimpson authored and Brad King's avatar Brad King committed
      RPATH support is activated on targets that have the MACOSX_RPATH
      property turned on.
      For install time, it is also useful to set INSTALL_RPATH to help
      find dependent libraries with an @rpath in their install name.
      
      Also adding detection of rpath conflicts when using frameworks.
      94e7fef2
  32. 02 Jun, 2013 2 commits