summaryrefslogtreecommitdiffstats
path: root/Tests/GeneratorExpression
Commit message (Collapse)AuthorAgeFilesLines
* VS,Xcode: Fix TARGET_PROPERTY genex in source COMPILE_FLAGS propertyBrad King2017-10-033-4/+15
| | | | | | This already worked in other generators. Also add a test case. Fixes: #17314
* Genex: Allow TARGET_OBJECTS to be used everywhereRobert Maynard2017-04-184-0/+50
| | | | | | | | | Previously the `TARGET_OBJECTS` generator expression was limited only to use in a buildsystem context so that Xcode's placeholders in object file paths can be evaluated. Lift this restriction so that the expression can at least be used in most settings. Co-Author: Brad King <brad.king@kitware.com>
* Merge topic 'genex-if'Brad King2017-01-272-0/+9
|\ | | | | | | | | 895f7f16 Genex: Add `IF` generator expression
| * Genex: Add `IF` generator expressionColby Pike2017-01-262-0/+9
| | | | | | | | | | | | | | | | This allows a single condition to be used to choose between two alternatives. Without this the condition must be duplicated with one surrounded by `NOT`. Closes: #15585
* | Tests: Extend GeneratorExpression to work with more configurationsBrad King2017-01-262-1/+5
| | | | | | | | Add missing pieces for RelWithDebInfo and MinSizeRel.
* | Tests: Teach GeneratorExpression to cover spaces in include dirsBrad King2017-01-262-3/+3
| | | | | | | | | | Add a space to the imported include directories used for the test. This works around funny quoted-`;` interpretation by Visual Studio.
* | Tests: Simplify GeneratorExpression imported include directory checkBrad King2017-01-262-15/+9
|/ | | | Do not duplicate the list of include directories 4 times.
* Add generator expression support to per-source COMPILE_FLAGSZsolt Parragi2016-10-282-0/+4
| | | | | | This allows users to specify different genex-based compile flags for each file in a target, e.g. compiling just a single file with `Od/Ox` in release builds on Visual Studio.
* Tests: Add test for MAP_IMPORTED_CONFIG_<CONFIG> empty fallbackBrad King2016-10-202-0/+10
|
* Revise C++ coding style using clang-formatKitware Robot2016-05-163-17/+18
| | | | | | | | | | | | | 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.
* Genex: Add a SHELL_PATH expressionStefan Kislinskiy2015-09-282-3/+38
| | | | | | | | | Some commands on Windows do not understand forward slash paths and require backslashes. In order to help projects generate shell invocations of such commands, provide a generator expression to convert paths to the shell-preferred path format for the current generator. This will allow custom commands to generate paths the same way CMake does for compiler command invocations.
* Tests: Simplify GeneratorExpression check implementationBrad King2015-09-232-3/+3
| | | | | | Use a function instead of a macro so we do not need an extra layer of backslashes. Use a bracket argument to avoid another layer of extra backslashes.
* Genex: Only evaluate TARGET_OBJECTS to determine target sources.Stephen Kelly2014-04-024-72/+0
| | | | | | | | | | The output of this expression may contain macros for IDEs to replace such as $(Configuration), $(CURRENT_ARCH) etc. To avoid generating content which is not usable in other contexts, report an error if there is an attempt to use it in other contexts. This commit may be reverted in the future if a solution to the above difference is implemented.
* cmTarget: Allow any generator expression in SOURCES property.Stephen Kelly2014-04-021-1/+1
| | | | | | | | | | | | | | | | Remove use of UseObjectLibraries from Makefile and Ninja generators. It is not needed now because those generators use GetExternalObjects which already contains the objects from object libraries. The VS10 generator calls both the UseObjectLibraries and the GetExternalObjects methods. Ensure that duplicates are not created by skipping objects from object libraries in handling of GetExternalObjects. Similarly, fix VS6, VS7 and Xcode object handling by skipping external objects from OBJECT_LIBRARY usage as appropriate. The error message in the BadSourceExpression1 test is now reported by the generator expression evaluator, so it has different text.
* Genex: Evaluate TARGET_OBJECTS as a normal expression.Stephen Kelly2014-03-314-0/+72
|
* Genex: Use case-sensitive comparison for COMPILER_ID.Stephen Kelly2014-01-083-0/+51
|
* Genex: Add a nullary form for CONFIGStephen Kelly2014-01-072-0/+2
| | | | | | | | | | | | | This is consistent with other similar expressions such as PLATFORM_ID, and makes the CONFIGURATION expression obsolete. Fix an off-by-one error in GeneratorExpressionContent::EvaluateParameters exposed by a unit test. Remove the test for 'bad' nullary use of $<CONFIG>. Add a unit test to verify that $<CONFIG> and $<CONFIGURATION> have the same value.
* Genex: Make EQUAL support upper case binary literalsStephen Kelly2014-01-062-9/+13
| | | | | | | | As C++11, python, D and java do. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472.pdf Add test for uppercase hex literals.
* Genex: Add EQUAL expression.Stephen Kelly2014-01-062-0/+42
| | | | Support decimal, hex, octal and binary literals.
* Genex: Accept arbitrary content in *_CASE and MAKE_C_IDENTIFIER.Stephen Kelly2013-12-192-6/+6
|
* Genex: Add {UPPER,LOWER}_CASE and MAKE_C_IDENTIFIER.Stephen Kelly2013-11-272-0/+6
|
* Merge topic 'test-property-genex'Brad King2013-10-073-1/+73
|\ | | | | | | | | | | | | 6a47c37 add_test: Mention generator expressions in old-style add_test docs d331292 cmTestGenerator: Evaluate generator expressions in test properties 6fe5c4a cmTestGenerator: Separate test properties for each configuration
| * cmTestGenerator: Evaluate generator expressions in test propertiesBen Boeckel2013-09-203-1/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is useful for cases like: add_test(NAME mytest COMMAND mydriver $<TARGET_FILE:myexe>) set_tests_properties(mytest PROPERTIES REQUIRED_FILES "$<TARGET_FILE:myexe>" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>" ) In this example we require the actual test executable to exist to run the test in addition to the test driver at argv[0]. Also the $<CONFIGURATION> expression improves over \${CTEST_CONFIGURATION_TYPE} because the latter is not normalized for case-sensitive filesystems.
* | Genex: Add the PLATFORM_ID expression.Stephen Kelly2013-08-282-0/+13
|/
* Genex: Fix segfault when parsing ends with parameter expectation.Stephen Kelly2013-08-132-0/+4
| | | | | | | The extendResult method expects a non-empty parameters vector, as assured by the normal case. Avoid calling the method when the parser finds an incomplete generator expression, but has already entered the state of expecting to find parameters.
* Add the ALIAS target concept for libraries and executables.Stephen Kelly2013-08-023-2/+16
| | | | | | | | | | | | | | | | | * 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.
* Genex: Fix $<CONFIG> with IMPORTED targets and multiple locations.Stephen Kelly2013-07-242-0/+43
| | | | | | | | The old code checked only that there was a LOCATION for the specified config, but did not check whether the config actually mapped. Task-number: 14292
* Split the GeneratorExpression test into a third part.Stephen Kelly2013-06-283-9/+22
| | | | | | | Avoid command lines beyond NMake limits. http://open.cdash.org/testDetails.php?test=196577461&build=2949683 expanded command line '...' too long
* Add generator expressions for version comparision.Stephen Kelly2013-06-122-0/+12
|
* Fix handling of commas in arbitrary content in genexes.Stephen Kelly2013-05-162-0/+20
| | | | | As the comma is the parameter separator, it needs to be re-added when evaluating to reconstruct arbitrary content.
* Add $<SEMICOLON> generator expression.Jean-Christophe Fillion-Robin2013-03-122-0/+4
| | | | | This expression is useful to put a ';' in a command line argument without dividing the argument during CMake list expansion.
* Fix the tests for evaluating includes and defines.Stephen Kelly2013-02-231-4/+4
| | | | | | | | | | | | 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.
* Expand includes and defines transitively in 'external' genexes.Stephen Kelly2013-02-233-1/+40
| | | | | | | | | | | | | | | This means that we can use expressions of the form $<TARGET_PROPERTY:foo,INTERFACE_INCLUDE_DIRECTORIES> to get a list of the interface include directories of foo, including those coming from dependencies. We can't have a test of a target which has a single include directory in its INCLUDE_DIRECTORIES because the shell on the MSYS platforms transforms a single include directory to include a prefix, which is not what the test expects. We test a target with two directories instead as a means to test a target with no link dependencies.
* Make it an error for INSTALL_PREFIX to be evaluated.Stephen Kelly2013-01-312-2/+0
| | | | | | An empty string is not likely going to produce expected results in any evaluation context. It is replaced by preprocessing currently.
* Add the INSTALL_PREFIX genex.Stephen Kelly2013-01-272-0/+2
|
* Add the TARGET_NAME generator expression.Stephen Kelly2013-01-052-0/+4
| | | | It will be used as a preprocessing marker.
* GenEx: Add expressions to specify build- or install-only valuesStephen Kelly2013-01-054-29/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Merge topic 'fix-genex-CONFIG'Brad King2012-11-062-0/+9
|\ | | | | | | | | 9be64f3 GenEx: Use case insensitive comparison for $<CONFIG:...>
| * GenEx: Use case insensitive comparison for $<CONFIG:...>Stephen Kelly2012-11-052-0/+9
| | | | | | | | | | This fixes a regression introduced by commit f1eacf0e (cmGeneratorExpression: Re-write for multi-stage evaluation).
* | GenEx: Test early determination of AND and ORStephen Kelly2012-10-202-0/+6
|/ | | | | | | | | | | | | | | | It should be possible for example to do this: "$<AND:${FOO},$<BOOL:${TGT}>,$<BOOL:$<TARGET_PROPERTY:${TGT},PROP>" such that it works simliarly to the C code: if (foo && tgt && tgt->prop()) { } The example of generator expression code is a little bit contrived as it could be written other ways with the same functionality. Nevertheless, as these cases already work and are intentional, test for them.
* GenEx: Replace some failing tests with Borland and NMake makefiles.Stephen Kelly2012-10-172-6/+4
| | | | | The '<<' is a special sequence on those platforms, so it can't appear in the test.
* GenEx: Fix termination bugs in generator expression parser.Stephen Kelly2012-10-172-0/+44
| | | | | | | Content which is incomplete as a generator expression could cause segfaults by advancing an iterator beyond end() and dereferencing it. Such incomplete generator expressions should be treated as plain text instead.
* GenEx: Parse colon after arguments separator colon specially.Stephen Kelly2012-10-172-0/+10
| | | | | | The rationale is similar to that in commit b3d8f5da (GenEx: Parse comma after colon tokens specially, 2012-10-04), in that colon tokens should not be parsed as identifier-argument delimiters after the first colon.
* GenEx: Add tests for "0" and "1" expressions with literal commas.Stephen Kelly2012-10-092-0/+4
|
* GenEx: Add test for $<BOOL:> with empty parameter.Stephen Kelly2012-10-092-0/+2
|
* GenEx: Parse comma after colon tokens speciallyStephen Kelly2012-10-092-0/+4
| | | | | | | | | | | | | | | Otherwise the comma is treated as plain text by ParseContent. $<STREQUAL:,> should be valid and true. $<STREQUAL:,something> should be valid and false. $<STREQUAL:,,> should be non-valid as it is 3 parameters. $<STREQUAL:something,,> should be non-valid as it is 3 parameters. Additionally, this allows reporting the correct error for other expressions. For example $<TARGET_PROPERTY:,> should be invalid because it has an empty target and empty property. It shouldn't attempt to read the property ',' on the 'implicit this' target.
* Extend the generator expression language with more logic.Stephen Kelly2012-09-282-0/+34
| | | | | | | Generator expressions for comparing strings, evaluating strings as booleans, and for creating literal right-angle-brackets and commas are added. Those may be needed in some cases where they appear in literals.
* Add $<CONFIG:...> boolean query generator expressionBrad King2012-08-152-0/+4
| | | | | | | This expression evaluates to '1' or '0' to indicate whether the build configuration for which the expression is evaluated matches tha named configuration. In combination with the "$<0:...>" and "$<1:...>" expressions this allows per-configuration content to be generated.
* Add boolean generator expressionsBrad King2012-08-152-0/+49
Add generator expressions that combine and use boolean test results: $<0:...> = empty string (ignores "...") $<1:...> = content of "..." $<AND:?[,?]...> = '1' if all '?' are '1', else '0' $<OR:?[,?]...> = '0' if all '?' are '0', else '1' $<NOT:?> = '0' if '?' is '1', else '1' These will be useful to evaluate (future) boolean query expressions and condition content on the results. Include tests and documentation.