summaryrefslogtreecommitdiffstats
path: root/Source/cmTargetLinkLibrariesCommand.cxx
Commit message (Collapse)AuthorAgeFilesLines
* Revise C++ coding style using clang-formatKitware Robot2016-05-161-255/+178
| | | | | | | | | | | | | Run the `Utilities/Scripts/clang-format.bash` script to update all our C++ code to a new style defined by `.clang-format`. Use `clang-format` version 3.8. * If you reached this commit for a line in `git blame`, re-run the blame operation starting at the parent of this commit to see older history for the content. * See the parent commit for instructions to rebase a change across this style transition commit.
* Remove `//------...` horizontal separator commentsBrad King2016-05-091-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | Modern editors provide plenty of ways to visually separate functions. Drop the explicit comments that previously served this purpose. Use the following command to automate the change: $ git ls-files -z -- \ "*.c" "*.cc" "*.cpp" "*.cxx" "*.h" "*.hh" "*.hpp" "*.hxx" | egrep -z -v "^Source/cmCommandArgumentLexer\." | egrep -z -v "^Source/cmCommandArgumentParser(\.y|\.cxx|Tokens\.h)" | egrep -z -v "^Source/cmDependsJavaLexer\." | egrep -z -v "^Source/cmDependsJavaParser(\.y|\.cxx|Tokens\.h)" | egrep -z -v "^Source/cmExprLexer\." | egrep -z -v "^Source/cmExprParser(\.y|\.cxx|Tokens\.h)" | egrep -z -v "^Source/cmFortranLexer\." | egrep -z -v "^Source/cmFortranParser(\.y|\.cxx|Tokens\.h)" | egrep -z -v "^Source/cmListFileLexer\." | egrep -z -v "^Source/cm_sha2" | egrep -z -v "^Source/(kwsys|CursesDialog/form)/" | egrep -z -v "^Utilities/(KW|cm).*/" | xargs -0 sed -i '/^\(\/\/---*\|\/\*---*\*\/\)$/ {d;}' This avoids modifying third-party sources and generated sources.
* Fix export of STATIC library PRIVATE non-target dependenciesBrad King2016-02-171-5/+2
| | | | | | | | | | | | | | | | | | | In commit v3.5.0-rc1~43^2 (Fix export of STATIC library PRIVATE dependencies with CMP0022 NEW, 2016-01-15) we taught target_link_libraries to generate `$<LINK_ONLY:$<TARGET_NAME:dep>>` in INTERFACE_LINK_LIBRARIES instead of `$<LINK_ONLY:dep>` so that `dep` can be recognized as a target name and updated during export. However, this approach does not work when `dep` is just a plain library name and not a target because `$<TARGET_NAME:...>` requires the name of a reachable target. Since we do not know during target_link_libraries whether the name will correspond to a reachable target or not, we cannot inject the `$<TARGET_NAME:...>` expression. Revert this change and solve the original problem instead by teaching the export logic to recognize and update target names directly in `$<LINK_ONLY:...>` expressions. Reported-by: Ben Boeckel <ben.boeckel@kitware.com>
* Fix export of STATIC library PRIVATE dependencies with CMP0022 NEWBrad King2016-01-151-2/+5
| | | | | | | | | | | | | | The target_link_libraries command records the PRIVATE dependencies of a STATIC library in INTERFACE_LINK_LIBRARIES as "$<LINK_ONLY:dep>". This hides the target name from export namespacing logic inside a generator expression. When user-written generator expressions reference a target name they must put it inside a "$<TARGET_NAME:dep>" expression to allow the export logic to rename the target. In the case that the private dependency is not already a generator expression, target_link_libraries must use "$<LINK_ONLY:$<TARGET_NAME:dep>>" to allow the export logic to rename the target. Reported-by: Tamás Kenéz <tamas.kenez@gmail.com>
* cmState: Move TargetType enum from cmTarget.Stephen Kelly2015-10-141-5/+5
| | | | | | | Mostly automated: values=( "EXECUTABLE" "STATIC_LIBRARY" "SHARED_LIBRARY" "MODULE_LIBRARY" "OBJECT_LIBRARY" "UTILITY" "GLOBAL_TARGET" "INTERFACE_LIBRARY" "UNKNOWN_LIBRARY" "TargetType") for i in "${values[@]}"; do git grep -l cmTarget::$i | xargs sed -i "s|cmTarget::$i|cmState::$i|g"; done
* cmTarget: Move link type enum out.Stephen Kelly2015-10-141-13/+13
| | | | Remove a reason for generate time code to depend on the cmTarget header/type.
* cmTarget: Fix diagnostic of target_link_libraries in wrong directory (#15626)Brad King2015-06-251-1/+2
| | | | | | | | | | Since commit v3.3.0-rc1~62^2~5 (cmTarget: Store only cmListFileContext for CMP0023 handling, 2015-05-18) a call to target_link_libraries on a target that was defined in another (non-ancestor) directory crashes because no execution context is left active. Fix this by getting the execution context from the actual cmMakefile where the current target_link_libraries call takes place. Test this by verifying that such calls correctly produce an error diagnostic instead of crashing.
* Port to static cmPolicies API.Stephen Kelly2015-05-041-8/+4
|
* cmake: Remove DebugConfigs member.Stephen Kelly2015-04-121-1/+1
| | | | It adds needless complexity to global property handling.
* Port all cmOStringStream to std::ostringstream.Stephen Kelly2015-01-111-6/+6
| | | | All compilers hosting CMake support the std class.
* Remove default labels from fully covered switch statements.Stephen Kelly2014-04-031-1/+0
| | | | | Allow compilers to warn when new enum values are added, making switches no-longer fully-covered.
* Merge topic 'fix_policy_diagnostics'Brad King2014-04-011-6/+8
|\ | | | | | | | | 77b581c2 Policies: omit warnings about unset policies when they are actually set to NEW
| * Policies: omit warnings about unset policies when they are actually set to NEWNils Gladitz2014-03-311-6/+8
| |
* | Remove some c_str() calls.Stephen Kelly2014-03-111-7/+7
| | | | | | | | | | | | Use the clang RemoveCStrCalls tool to automatically migrate the code. This was only run on linux, so does not have any positive or negative effect on other platforms.
* | cmTargetLinkLibrariesCommand: Use a string argumentBen Boeckel2014-03-081-5/+5
| |
* | cmTarget: Remove the project argument to FindTargetBen Boeckel2014-03-081-1/+1
|/ | | | All callers passed 0 in, so just remove the branch.
* cmMakefile: make some methods take const std::string& instead of const char*Rolf Eike Beer2014-01-161-1/+1
| | | | | | | | Most callers already have a std::string, on which they called c_str() to pass it into these methods, which internally converted it back to std::string. Pass a std::string directly to these methods now, avoiding all these conversions. Those methods that only pass in a const char* will get the conversion to std::string now only once.
* Disallow linking to utility targets (#13902).Stephen Kelly2013-11-071-0/+31
|
* Merge branch 'policy-CMP0022-fixes' into policy-CMP0022-fixes-for-masterBrad King2013-11-031-2/+8
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Resolve conflict in Source/cmTarget.cxx by integrating the changes to the internal copy constructor from both sides. Also resolve a logical conflict by dropping the special case for INTERFACE_LIBRARY targets. Since cmTarget::SetMakefile already forces CMP0022 to NEW for such targets we need no special handling. Resolve conflict in Source/cmTargetLinkLibrariesCommand.h by dropping the documentation change. We will make the same change in the new location of the same documentation in a separate commit. Resolve conflicts in Tests/RunCMake/CMP0022/CMP0022-WARN-empty-old-stderr.txt Tests/RunCMake/CMP0022/RunCMakeTest.cmake by taking the side from the 'policy-CMP0022-fixes' branch.
| * CMP0022: Plain target_link_libraries must populate link interfaceBrad King2013-11-021-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The CMP0022 NEW behavior is that the INTERFACE_LINK_LIBRARIES property exactly defines the link interface. The plain target_link_libraries signature says linking is transitive by default, so it should populate the property. Teach the target_link_libraries plain signature to populate the INTERFACE_LINK_LIBRARIES regardless of the CMP0022 setting. Refactor the cmTarget::ComputeLinkInterface checks that warn when the policy is not set to compare the new property to either the explicitly set old link interface properties or the link implementation fallback for all linkable target types, not just static libraries. This fixes a regression in 2.8.12.0 that caused target_link_libraries to not implement transitive linking in the plain signature once the policy CMP0022 is set to NEW.
* | target_link_libraries: Revert accidental changeBrad King2013-11-021-7/+2
| | | | | | | | | | | | | | | | In commit c4373b33 (cmTarget: Make GetProperty() const, 2013-10-29) we accidentally changed the cmTargetLinkLibrariesCommand.cxx logic in a way that looks like a local experiment leftover that went unnoticed due to the size of the other changes in the commit. Revert it.
* | cmTarget: Make GetProperty() const.Stephen Kelly2013-10-311-2/+7
| | | | | | | | | | | | 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.
* | Merge topic 'fix-tll-static-private'Brad King2013-10-261-3/+8
|\ \ | |/ | | | | | | 239b0c6 Don't add invalid content to static lib INTERFACE_LINK_LIBRARIES.
| * Don't add invalid content to static lib INTERFACE_LINK_LIBRARIES.Stephen Kelly2013-10-261-3/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | Only valid target names or generator expressions may appear in the target field of a LINK_ONLY expression. Other content like link flags should still be added to that property (wrapped in config-specific generator expressions), but not wrapped in LINK_ONLY. Otherwise undue warnings would be issued for the policy CMP0022. The LINK_ONLY expression only has an effect for actual target names anyway, so there is no logical deficit.
* | target_link_libraries: Allow repeated use of LINK_{PRIVATE,PUBLIC} keywords.Stephen Kelly2013-10-171-2/+4
| | | | | | | | | | | | | | This has not been allowed since they were introduced in commit 91438222 (target_link_libraries: Add LINK_(PUBLIC|PRIVATE) options, 2011-10-07), but allowing this form makes it more compatible with the newer PUBLIC and PRIVATE keywords.
* | Add the INTERFACE_LIBRARY target type.Stephen Kelly2013-10-071-0/+14
|/ | | | | | | | | | | | | | | | | | | | | | | | | | 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. The Ninja generator does not use that API, so it doesn't require changes related to that.
* Add the ALIAS target concept for libraries and executables.Stephen Kelly2013-08-021-0/+5
| | | | | | | | | | | | | | | | | * The ALIAS name must match a validity regex. * Executables and libraries may be aliased. * An ALIAS acts immutable. It can not be used as the lhs of target_link_libraries or other commands. * An ALIAS can be used with add_custom_command, add_custom_target, and add_test in the same way regular targets can. * The target of an ALIAS can be retrieved with the ALIASED_TARGET target property. * An ALIAS does not appear in the generated buildsystem. It is kept separate from cmMakefile::Targets for that reason. * A target may have multiple aliases. * An ALIAS target may not itself have an alias. * An IMPORTED target may not have an alias. * An ALIAS may not be exported or imported.
* target_link_libraries: Add PUBLIC/PRIVATE/INTERFACE keyword signatureStephen Kelly2013-07-241-13/+124
| | | | | | | Add a new signature to help populate INTERFACE_LINK_LIBRARIES and LINK_LIBRARIES cleanly in a single call. Add policy CMP0023 to control whether the keyword signatures can be mixed with uses of the plain signatures on the same target.
* TLL: Don't populate old link interface if CMP0022 is NEW.Stephen Kelly2013-07-081-1/+25
| | | | | | | | | | | | | Always populate the INTERFACE_LINK_LIBRARIES for interface entries. Don't populate the old interface properties matching (IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)? if CMP0022 is NEW. Because the INTERFACE_LINK_LIBRARIES property is now populated by the target_link_libraries when operating on a static library, make an equivalent change which populates the property with the same value when the old link_libraries() command is used. This silences the policy warning in that case.
* Centralize maintenance of usage requirement include directoriesStephen Kelly2013-05-061-8/+0
| | | | | | Maintain a target's internal list of usage requirement include directories whenever the LINK_LIBRARIES property is set by either target_link_libraries or set_property.
* Don't populate INTERFACE includes and defines properties in tll.Stephen Kelly2013-02-131-44/+0
| | | | | | | | | This is a partial revert of commit 77cecb77 (Add includes and compile definitions with target_link_libraries., 2012-11-05). As the interface includes and defines are now determined by the link closure, there is no need to populate the corresponding properties explicitly.
* Use the link information as a source of compile definitions and includes.Stephen Kelly2013-02-131-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | After evaluating the INTERFACE_INCLUDE_DIRECTORIES, of a target in a generator expression, also read the INTERFACE_INCLUDE_DIRECTORIES of its link interface dependencies. That means that code such as this will result in the 'user' target using /bar/include and /foo/include: add_library(foo ...) target_include_directories(foo INTERFACE /foo/include) add_library(bar ...) target_include_directories(bar INTERFACE /bar/include) target_link_libraries(bar LINK_PUBLIC foo) add_executable(user ...) target_include_directories(user PRIVATE $<TARGET_PROPERTY:bar,INTERFACE_INCLUDE_DIRECTORIES>) Also process the interface include directories from direct link dependencies for in-build targets. The situation is similar for the INTERFACE_COMPILE_DEFINITIONS. The include directories related code is currently more complex because we also need to store a backtrace at configure-time for the purpose of debugging includes. The compile definitions related code will use the same pattern in the future. This is not a change in behavior, as existing code has the same effect, but that existing code will be removed in follow-up commits.
* De-duplicate validation of genex target names.Stephen Kelly2013-02-071-3/+4
|
* Deduplicate the isGeneratorExpression method.Stephen Kelly2013-02-071-9/+1
| | | | This API seems like the most appropriate.
* Add includes and compile definitions with target_link_libraries.Stephen Kelly2013-01-311-0/+53
| | | | | | | | This establishes that linking is used to propagate usage-requirements between targets in CMake code. The use of the target_link_libraries command as the API for this is chosen because introducing a new command would introduce confusion due to multiple commands which differ only in a subtle way.
* Revert "Allow target_link_libraries with IMPORTED targets."Stephen Kelly2013-01-211-14/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 9cfe4f1b769597bd9ba179eba46572a9df27f64c. It turns out that correctly adding the content to the IMPORTED_LINK_INTERFACE_LIBARIES_<CONFIG> of an upstream target from the buildsystem of a downstream project is not simple. If upstream had added the INTERFACE content, the config-specific properties would be determined by the DEBUG_CONFIGURATIONS of upstream. As downstream, we don't have any information about what the DEBUG_CONFIGURATIONS of upstream were, so we can't determine which configuration-specific properties to populate. The best we can do is add it to all of them or add it to the ones downstream considers to be DEBUG_CONFIGURATIONS, neither of which is a good solution. So, removing the porcelain API for that is the best approach. A human can still determine which properties to populate and use the set_property API to populate the desired properies. Another solution to this would be for upstream targets to publish what they consider DEBUG_CONFIGURATIONS, but that can be added in a future release.
* Allow target_link_libraries with IMPORTED targets.Stephen Kelly2013-01-081-0/+14
| | | | | | | | | This makes it possible to use: target_link_libraries(foo LINK_INTERFACE_LIBRARIES bar) where foo is an IMPORTED target. Other tll() signatures are not allowed.
* Fix minor typos.Stephen Kelly2012-09-291-2/+2
| | | | | | | | nothe -> note than -> that duplicat -> duplicate directory -> directly Wipe wipe -> Wipe
* Add OBJECT_LIBRARY target typeBrad King2012-03-131-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | This library type can compile sources to object files but does not link or archive them. It will be useful to reference from executable and normal library targets for direct inclusion of object files in them. Diagnose and reject the following as errors: * An OBJECT library may not be referenced in target_link_libraries. * An OBJECT library may contain only compiling sources and supporting headers and custom commands. Other source types that are not normally ignored are not allowed. * An OBJECT library may not have PRE_BUILD, PRE_LINK, or POST_BUILD commands. * An OBJECT library may not be installed, exported, or imported. Some of these cases may be supported in the future but are not for now. Teach the VS generator that OBJECT_LIBRARY targets are "linkable" just like STATIC_LIBRARY targets for the LinkLibraryDependencies behavior.
* target_link_libraries: Simplify argument processing state testsBrad King2011-11-221-4/+4
| | | | | | Remove extra parens in test for not handling LINK_INTERFACE_LIBRARIES. Remove redundant test for equality with ProcessingPrivateInterface subsumed by test for inequality with ProcessingPublicInterface.
* target_link_libraries: Add LINK_(PUBLIC|PRIVATE) optionsStephen Kelly2011-11-221-10/+42
| | | | | Makes it possible to specify the link dependencies and link interfaces in one command without repetition.
* New CMP0016 for deciding whether an unknown target in TLL() is an error.Alex Neundorf2010-08-281-7/+38
| | | | | | | | When set to OLD, target_link_libraries() silently accepts if it is called with only one argument and this one argument is not a target. When set to NEW, this is an error. By default it is a warning now. Alex
* Just warn in case of a bad target as only argument for t_l_l()Alex Neundorf2010-08-261-2/+12
| | | | | | | | | As discussed on cmake-devel, if target_link_libraries() is called with only one argument, and this one argument is not a valid target, just print a warning but don't fail, since otherwise probably some existing code somewhere might stop building. Alex
* Make target_link_libraries() complain if bad target name is usedAlex Neundorf2010-08-261-6/+6
| | | | | | | | | | | | | target_link_libraries() did not complain if there was only one argument, and this one (first) argument wasn't a valid target name, e.g. add_executable(hello main.cpp) target_link_libraries(-static-intel) Here the target "hello" was forgotten in the tll() call, but cmake didn't complain. With this commit it does. Alex
* Remove trailing whitespaceAlex Neundorf2010-08-261-3/+3
| | | | Alex
* Convert CMake to OSI-approved BSD LicenseBrad King2009-09-281-14/+9
| | | | | | | This converts the CMake license to a pure 3-clause OSI-approved BSD License. We drop the previous license clause requiring modified versions to be plainly marked. We also update the CMake copyright to cover the full development time range.
* ENH: Allow a custom list of debug configurationsBrad King2008-09-041-15/+26
| | | | | | Create a DEBUG_CONFIGURATIONS global property as a way for projects to specify which configuration names are considered to be 'debug' configurations.
* ENH: Make link interface mode more distinctBrad King2008-08-181-9/+16
| | | | | | | | | Rename the recently added INTERFACE mode of the target_link_libraries() command to LINK_INTERFACE_LIBRARIES. This makes it much more distinct from a normal call to the command, and clearly states its connection to the property of the same name. Also require the option to appear immediately after the target name to make it a mode rather than an option.
* ENH: Simple specification of link interfacesBrad King2008-08-111-4/+73
| | | | | | | | Create an INTERFACE option to the target_link_libraries command to help set the LINK_INTERFACE_LIBRARIES and LINK_INTERFACE_LIBRARIES_DEBUG properties. This will help users specify link interfaces using variables from Find*.cmake modules that include the 'debug' and 'optimized' keywords.
* ENH: Tolerate repeated link library typesBrad King2008-08-071-26/+60
| | | | | | | | The "debug", "optimized", and "general" link library type specifier arguments to the target_link_library commands are sometimes repeated in user code due to variable expansion and other complications. Instead of silently accepting the duplicates and trying to link to a bogus library like "optimized.lib", warn and ignore the earlier specifiers.