CMake Nightly Date Stamp
GenEx: Add expressions to specify build- or install-only values

This is for specifying INCLUDE_DIRECTORIES relevant to the build-location
or the install location for example:

 set_property(TARGET foo PROPERTY
   INTERFACE_INCLUDE_DIRECTORIES
   "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
   "$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include>"
 )

A 'bar' target can then use:

 set_property(TARGET bar PROPERTY
   INCLUDE_DIRECTORIES
   "$<TARGET_PROPERTY:foo,INTERFACE_INCLUDE_DIRECTORIES>"
 )

and it will work whether foo is in the same project, or an imported target
from an installation location, or an imported target from a build location
generated by the export() command.

Because the generator expressions are only evaluated at build-time, these
new expressions are equivalent to the ZeroNode and OneNode.

The GeneratorExpression test is split into parts. Some shells can't run
the custom command as it is getting too long.
Allow generator expressions to require literals.
Add the TARGET_NAME generator expression.

It will be used as a preprocessing marker.
Add API to extract target names from a genex string.

The TARGET_NAME expression, which requires a literal, provides
target names. $<TARGET_PROPERTY:tgt,prop> also provides target
names in the cases where tgt is a literal, so that TARGET_NAME is
not needed then in addition.
Add API to populate INTERFACE properties in exported targets.

The INTERFACE properties need to be preprocessed for context (build
location or install location) and to extract target names etc.
Make all relevant targets available in the genex context.

The current node being evaluated transitively in the generator
expression must be available to resolve mapped configs.
Use mapped config properties to evaluate $<CONFIG>
Make cycles in target properties ignored, not an error.

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>)
Populate the ExportedTargets member early in GenerateMainFile

The member variable is checked to determine whether to call
HandleMissingTarget(). As that could be called during the loop in
the comming commits, ensure that it contains all targets being
exported.
Handle INTERFACE properties transitively for includes and defines.

Contextually, the behavior is as if the properties content from another
target is included in the string and then the result is evaluated.
Merge topic 'interface-includes-defines' into next

62cbc36 Handle INTERFACE properties transitively for includes and defines.
1a934fa Populate the ExportedTargets member early in GenerateMainFile
289a4d7 Make cycles in target properties ignored, not an error.
7056886 Use mapped config properties to evaluate $<CONFIG>
0af93f1 Make all relevant targets available in the genex context.
6eaeb9d Add API to populate INTERFACE properties in exported targets.
698af4a Add API to extract target names from a genex string.
851a05c Add the TARGET_NAME generator expression.
5b58a8d Allow generator expressions to require literals.
48d1a37 GenEx: Add expressions to specify build- or install-only values
95b74ca CMake Nightly Date Stamp