13841 Commits

Author SHA1 Message Date
Stephen Kelly
089fe1c13d Optimize genex evaluation for includes and defines.
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.
2013-02-02 15:06:53 +01:00
Brad King
179f495602 find_package: Reword <package>_NO_INTERFACES documentation 2013-02-01 10:30:57 -05:00
Stephen Kelly
77cecb778f Add includes and compile definitions with target_link_libraries.
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.
2013-01-31 17:34:20 +01:00
Stephen Kelly
0b92602b81 Add the $<LINKED:...> generator expression.
This is both a short form of using a TARGET_DEFINED expression
together with a TARGET_PROPERTY definition, and a way to strip
non-target content from interface properties when exporting.
2013-01-31 17:34:20 +01:00
Stephen Kelly
0fa7f69c0e Add API to check if we're reading a includes or defines property.
This will allow the implementation of the LINKED generator expression.
2013-01-31 17:30:49 +01:00
Stephen Kelly
2c3654c3de Add a way to exclude INTERFACE properties from exported targets.
Projects set interface requirements upstream, and existing
downstreams use of target_link_libraries will consume those interfaces.

This can create a backward compatibility concern as the result may
be changing the order of include directories of downstreams, or another
side-effect of using the INTERFACE properties.

Provide a way for them to emulate the behavior of a version-based
policy in the config file.
2013-01-31 17:29:04 +01:00
Stephen Kelly
df4d2b28b2 Make it an error for INSTALL_PREFIX to be evaluated.
An empty string is not likely going to produce expected results
in any evaluation context. It is replaced by preprocessing
currently.
2013-01-31 17:27:06 +01:00
Stephen Kelly
7ceeba992b Advance more when preprocessing exported strings.
When evaluating TARGET_PROPERTY here, we can skip to the comma
location. We need to calculate it though as the string may have
just been changed.
2013-01-31 11:18:52 +01:00
Stephen Kelly
30268b46f8 Handle reading empty properties defined by the link interface.
This was segfaulting before.
2013-01-31 11:18:49 +01:00
Brad King
da2b0245a3 Merge topic 'fix-target-property-commands'
7bf490e Make subclasses responsible for joining content.
f6b16d4 Don't allow targets args in the new target commands.
b3a7e19 Make the Property name protected so that subclasses can use it.
2013-01-30 09:38:52 -05:00
Kitware Robot
7462a8a8c3 CMake Nightly Date Stamp 2013-01-30 00:01:21 -05:00
Brad King
2eb7cee117 Merge topic 'fix-TARGET_PROPERTY-extraction'
5daaa5c Fix TARGET_PROPERTY target extractions.
2013-01-29 14:52:34 -05:00
Brad King
32b9e67057 Merge topic 'DocumentRelativePathHandling'
a7d6ebb documentation: handling of relative paths by include- and link_directories()
2013-01-29 14:52:22 -05:00
Brad King
5f78d2057f Merge topic 'fix-relocatable-include-dirs'
34d1ade Add the INSTALL_PREFIX genex.
3a17197 Generate the _IMPORT_PREFIX in the non-config export file.
2013-01-29 14:52:19 -05:00
Brad King
3e7bba3fb2 Merge topic 'fix-automoc-compile-defs'
429e369 Process COMPILE_DEFINITIONS as generator expressions in QtAutomoc.
0e10782 Move GetCompileDefinitions to cmTarget.
2013-01-29 14:52:13 -05:00
Stephen Kelly
429e369974 Process COMPILE_DEFINITIONS as generator expressions in QtAutomoc.
Fixes #13493.
2013-01-29 14:11:49 -05:00
Stephen Kelly
0e10782ba7 Move GetCompileDefinitions to cmTarget. 2013-01-29 14:11:49 -05:00
Stephen Kelly
7bf490e9bb Make subclasses responsible for joining content.
This way we can add handling of relative/absolute paths and of
-D in compile definitions.
2013-01-29 19:34:04 +01:00
Stephen Kelly
f6b16d4b06 Don't allow targets args in the new target commands. 2013-01-29 18:44:54 +01:00
Stephen Kelly
b3a7e19ee4 Make the Property name protected so that subclasses can use it.
Makes subclasses more dry in upcoming patches.
2013-01-29 17:20:45 +01:00
Stephen Kelly
5daaa5c48d Fix TARGET_PROPERTY target extractions.
We need to make sure we can export targets which have content such
as $<0:$<TARGET_PROPERTY:not_a_target,INTERFACE_INCLUDE_DIRECTORIES>

That means making not finding a target non-fatal here.
2013-01-29 10:56:09 -05:00
Kitware Robot
61d641dccb CMake Nightly Date Stamp 2013-01-29 00:01:18 -05:00
Kitware Robot
e2afc40d06 CMake Nightly Date Stamp 2013-01-28 00:01:18 -05:00
Alex Neundorf
a7d6ebb01b documentation: handling of relative paths by include- and link_directories()
Alex
2013-01-27 18:00:14 +01:00
Stephen Kelly
34d1ade048 Add the INSTALL_PREFIX genex. 2013-01-27 09:59:26 +01:00
Stephen Kelly
3a1719793f Generate the _IMPORT_PREFIX in the non-config export file. 2013-01-27 09:42:54 +01:00
Kitware Robot
00ba2545fa CMake Nightly Date Stamp 2013-01-27 00:01:25 -05:00
Kitware Robot
f7db6d115d CMake Nightly Date Stamp 2013-01-26 00:01:18 -05:00
Brad King
aa6ad9c903 Merge topic 'generator-expression-lf'
6c57c31 doc: fix linebreaks in generator expression documentation
2013-01-25 13:38:13 -05:00
Brad King
c29dd4fa76 Merge topic 'doc-link-interface'
f032fb9 target_link_libraries: Document that new sigs privatize old (#13876)
2013-01-25 13:38:10 -05:00
Brad King
2046de2a39 Merge topic 'compatible-interface-strings'
2fb2c32 Add the COMPATIBLE_INTERFACE_STRING property.
cd66b91 Make calculation of link-interface-dependent properties type-sensitive.
2013-01-25 13:38:06 -05:00
Kitware Robot
a4eb27fbab CMake Nightly Date Stamp 2013-01-25 00:01:19 -05:00
Rolf Eike Beer
6c57c31414 doc: fix linebreaks in generator expression documentation 2013-01-24 23:12:36 +01:00
Brad King
f032fb904b target_link_libraries: Document that new sigs privatize old (#13876)
Explain in the documentation for the legacy signature

 target_link_libraries(foo bar)

that the other signatures like

 target_link_libraries(foo LINK_INTERFACE_LIBRARIES ...)
 target_link_libraries(foo LINK_PRIVATE ...)

will set the LINK_INTERFACE_LIBRARIES target property and therefore make
libraries specified only by the legacy signature private.
2013-01-24 16:06:14 -05:00
Stephen Kelly
2fb2c32f9b Add the COMPATIBLE_INTERFACE_STRING property. 2013-01-24 20:36:04 +01:00
Stephen Kelly
cd66b9131d Make calculation of link-interface-dependent properties type-sensitive. 2013-01-24 20:36:04 +01:00
Brad King
21fc6c46df Merge topic 'fix-COMPATIBLE_INTERFACE-link-libraries'
6fbe3ce Exclude the LINK_LIBRARIES related properties from INTERFACE evaluation.
2013-01-24 08:26:01 -05:00
Brad King
907f1e2227 Merge topic 'cmMakefile-comment-typos'
3853a6c spell: fix a few typos in comments
2013-01-24 08:25:53 -05:00
Stephen Kelly
6fbe3ce4ef Exclude the LINK_LIBRARIES related properties from INTERFACE evaluation.
These interface-related link-libraries properties are used to determine
the value of the other INTERFACE properties, so we were getting infinite
recursion and segfaults otherwise.
2013-01-24 08:17:46 -05:00
Kitware Robot
2cf9642e9c CMake Nightly Date Stamp 2013-01-24 00:01:18 -05:00
Brad King
76ace2b95a Merge topic 'disallow-IMPORTED-interface-porcelain'
b98d14d Disallow porcelain to populate includes and defines of IMPORTED targets.
48a4cf2 Revert "Allow target_link_libraries with IMPORTED targets."
2013-01-23 15:11:40 -05:00
Brad King
7db963a017 Merge topic 'clean-include-dirs-debugging'
6063fef Output include directories as LOG messages, not warnings.
aa66748 Specify the target whose includes are being listed.
d70204a Only output includes once after the start of 'generate-time' when debugging.
0d46e9a Store includes from the same include_directories call together.
2013-01-23 15:11:36 -05:00
Brad King
33695c616a Merge topic 'export-new-style-files'
02d4e53 Generate new-style cmake code during export.
2013-01-23 15:11:32 -05:00
Brad King
7a336d2e31 Merge topic 'fix-LINK_LIBRARIES-population'
d7f1520 Don't wrap all targets in LINK_LIBRARIES in a TARGET_NAME genex.
2013-01-23 15:11:28 -05:00
Brad King
a37b0e3ebf Merge topic 'qt4-autolink-qtmain'
e3b5eb6 Automatically link to the qtmain library when linking to QtCore.
6c8d8af Add the $<TARGET_POLICY> expression
2013-01-23 15:11:24 -05:00
Brad King
bf2e4e8cb1 Merge topic 'fix-COMPATIBLE_INTERFACE-properties'
830246e Export the COMPATIBLE_INTERFACE_BOOL content properties
bd82bb4 Clear the link information in ClearLinkMaps.
e987991 Make INTERFACE determined properties readable in generator expressions.
d9afacc Exit early if we find an inconsistent property.
1800f70 Populate the link information cache before checking dependent properties.
2013-01-23 15:11:15 -05:00
Brad King
e7be8be8c0 Merge topic 'xcode-duplicate-flags-13354'
f447db7 XCode generator won't infinitely parse compiler flags (bug #13354).
2013-01-23 15:11:09 -05:00
Brad King
95f88fd2a1 Merge topic 'fix-target_include_directories-genex'
24dcf0c Make sure generator expressions can be used with target_include_directories.
2013-01-23 15:11:04 -05:00
Brad King
c4c52b3273 Merge topic 'automoc-object'
0e35cac Automoc: add OBJECT library to QtAutomoc test
cf3faac Automoc: Fix automoc for OBJECT libraries.
2013-01-23 15:10:39 -05:00
Stephen Kelly
e3b5eb6b23 Automatically link to the qtmain library when linking to QtCore.
When using QAxServer, ensure that the qtmain library is excluded
by reporting an error at CMake time if it is not.
2013-01-23 14:15:41 -05:00