Commit Graph

27007 Commits

Author SHA1 Message Date
Brad King
eb5ea5a505 CMakeVersion: Use '-rc0' version suffix on release branches prior to rc1
Revert the change from commit 7b354baad5 (CMakeVersion: Set
CMake_VERSION_RC to 0 even in non-rc versions, 2019-07-25) and instead
define a `0` value in `CMake_VERSION_RC` to mean `-rc0`.  This
distinguishes release branch versions prior to the first release
candidate from the first release candidate itself.  It also makes room
for a dedicated "CMake $major.$minor.0-rc1" release commit for `-rc1` as
we have for later release candidates and final releases.
2019-07-26 08:08:30 -04:00
Brad King
52ea0c4676 Merge topic 'optimize-usage-requirements'
1d3841b600 Genex: Memoize usage requirement TARGET_PROPERTY existence
b5460f9931 cmLinkItem: Expose HadHeadSensitiveCondition in cmLinkInterfaceLibraries
ad2b3a32d1 Genex: Optimize build setting TARGET_PROPERTY evaluation
11fa818ecd Genex: Optimize usage requirement TARGET_PROPERTY recursion
0239bf8ac8 Genex: In TARGET_PROPERTY check for usage reqs in link libs earlier
7caebeb0e4 Genex: Re-order TARGET_PROPERTY logic to de-duplicate checks
b2785a0fbd Genex: Move TARGET_PROPERTY linked targets evaluation to end

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Cristian Adam <cristian.adam@gmail.com>
Merge-request: !3589
2019-07-26 07:33:27 -04:00
Brad King
467e6ac728 Merge topic 'definitions_string_view'
e91bfe440c cmMakefile: Let AddDefinition accept a value as cm::string_view
f2ba968ef2 cmMakefile: Simplify and rename AddDefinitionBool
9b5cc42531 cmDefinitions: Remove const char* based Set method
e268840c0a cmDefinitions: Add Unset and cm::string_view based Set methods
451fd329a8 cmDefinitions: Cleanups

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3577
2019-07-26 07:32:18 -04:00
Brad King
c23c4ed9cf Merge topic 'IsON_IsOFF_string_view'
4ff0bb054b cmSystemTools: Make IsInternallyOn, IsON and IsOff cm::string_view based
65d3ea2c7f cmAlgorithms: Make cmHasLiteral{Prefix,Suffix} cm::string_view based

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3598
2019-07-26 07:30:45 -04:00
Brad King
9f23c91919 Merge topic 'update-kwsys'
aff019f7a4 Merge branch 'upstream-KWSys' into update-kwsys
780d9e070b KWSys 2019-07-25 (a24a6acb)

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3602
2019-07-26 07:29:21 -04:00
Brad King
c9af23d2a1 Merge topic 'variable-typo'
94f536b935 cmCTestHandlerCommand: fix typo of local variable

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3600
2019-07-26 07:28:09 -04:00
Kitware Robot
7feece688d CMake Nightly Date Stamp 2019-07-26 00:01:24 -04:00
Brad King
7b354baad5 CMakeVersion: Set CMake_VERSION_RC to 0 even in non-rc versions
The logic that uses this value already ignores any "false" value, so `0`
is just as good as not being set at all.  Using `0` for this role makes
the version components look more symmetric and reduces the number of
edits needed when creating releases.
2019-07-25 09:23:48 -04:00
Brad King
aff019f7a4 Merge branch 'upstream-KWSys' into update-kwsys
* upstream-KWSys:
  KWSys 2019-07-25 (a24a6acb)
2019-07-25 07:54:34 -04:00
Brad King
9111590aca Merge topic 'ninja-swift-map-file-path'
3391a3eca8 Ninja: do not normalise swift support file paths

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3597
2019-07-25 07:21:18 -04:00
Brad King
c173ed1184 Merge topic 'makefile-depend-relative-include'
d46bac5d38 Makefile: Fix regression in dependencies on relative includes

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3599
2019-07-25 07:20:09 -04:00
Kitware Robot
00be1957da CMake Nightly Date Stamp 2019-07-25 00:01:08 -04:00
Ben Boeckel
94f536b935 cmCTestHandlerCommand: fix typo of local variable 2019-07-24 15:29:32 -04:00
Sebastian Holtermann
4ff0bb054b cmSystemTools: Make IsInternallyOn, IsON and IsOff cm::string_view based 2019-07-24 19:31:14 +02:00
Sebastian Holtermann
65d3ea2c7f cmAlgorithms: Make cmHasLiteral{Prefix,Suffix} cm::string_view based 2019-07-24 19:31:14 +02:00
Brad King
156f4c2f80 Merge topic 'find_pkg_use_new_global_controls'
609fe39043 FindPackage:  Support `NO_[]_PATH` global call options
ff29c92df6 Tests: find_file restore PATH env variable after test runs

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3590
2019-07-24 11:55:03 -04:00
Brad King
47777942a5 Merge topic 'math_exp_not'
d427f12b73 math(EXPR): Implement ~(exp_NOT) expression as documented

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3582
2019-07-24 11:53:54 -04:00
Brad King
d46bac5d38 Makefile: Fix regression in dependencies on relative includes
Since commit a13a5c948e (Replace use of CollapseCombinedPath with
CollapseFullPath, 2019-03-19, v3.15.0-rc1~361^2~1), one code path now
calls `CollapseFullPath` with a base path that may be relative.
Backport KWSys commit c6f8e24a3 (SystemTools: Fix CollapseFullPath with
relative base path, 2019-07-24) to handle such base paths.

This case occurs when a build tree is placed in a directory inside a
source tree such that CMake is willing to generate a relative path from
the build tree to the source tree.  Add a test covering this case.

Fixes: #19507
2019-07-24 11:37:31 -04:00
Brad King
3a3e59617a Merge topic 'fix-emulator-arguments'
bf6f5467a0 Fix allocation in CROSSCOMPILING_EMULATOR evaluation

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3591
2019-07-24 08:16:10 -04:00
Sebastian Holtermann
e91bfe440c cmMakefile: Let AddDefinition accept a value as cm::string_view
This changes `cmMakefile::AddDefinition` to take a `cm::string_view` as value
argument instead of a `const char *`.

Benefits are:
- `std::string` can be passed to `cmMakefile::AddDefinition` directly without
  the `c_str()` plus string length recomputation fallback.
- Lengths of literals passed to `cmMakefile::AddDefinition` can be computed at
  compile time.

In various sources uses of `cmMakefile::AddDefinition` are adapted to avoid
`std::string::c_str` calls and the `std::string` is passed directly.
Uses of `cmMakefile::AddDefinition`, where a `nullptr` `const char*` might
be passed to `cmMakefile::AddDefinition` are extended with `nullptr` checks.
2019-07-24 11:11:25 +02:00
Sebastian Holtermann
f2ba968ef2 cmMakefile: Simplify and rename AddDefinitionBool
This simplifies the `cmMakefile::AddDefinition` method with bool value
overload to call the string based `cmMakefile::AddDefinition` method
with either an "ON" or "OFF" string.
Also the method is renamed to `cmMakefile::AddDefinitionBool`
2019-07-24 11:11:25 +02:00
Sebastian Holtermann
9b5cc42531 cmDefinitions: Remove const char* based Set method
- Removes `cmDefinitions::Set` method overload that takes a `const char*`
  value argument.
- Updates calls to `cmDefinitions::Set` to use the `cm::string_view` based
  version instead.
2019-07-24 11:11:25 +02:00
Sebastian Holtermann
e268840c0a cmDefinitions: Add Unset and cm::string_view based Set methods
- The `cmDefinitions::Def` struct is simplified by removing an unused
  constructor and the `std_string` type definition.  The std::string value
  becomes a member variable instead of being derived from.

- The `cmDefinitions::Unset` method is added that unsets a definition.
  It has the same functionality as calling `cmDefinitions::Set` with a
  `nullptr` value argument,

- The `cmDefinitions::Set` method gets an overloaded version that takes a
  `cm::string_view` as value argument.

- The originl `cmDefinitions::Set` method with `const char*` argument is
  refactored to either call the `cm::string_view` based `cmDefinitions::Set`
  overload or `cmDefinitions::Unset`, depending on whether the value
  `const char*` is a nullptr (`Unset`) or not (`Set`).
2019-07-24 11:11:25 +02:00
Sebastian Holtermann
451fd329a8 cmDefinitions: Cleanups 2019-07-24 11:11:25 +02:00
Kitware Robot
1f618fae4d CMake Nightly Date Stamp 2019-07-24 00:01:09 -04:00
Saleem Abdulrasool
3391a3eca8 Ninja: do not normalise swift support file paths
When building the output-map-file.json, do not convert the path to a
Ninja path, which will make it relative.  If `cmake` is invoked with the
`-B` option the files will be written relative to the directory where
CMake was invoked rather than relative to the build tree.  This path
need not be a relative path since it is used internally by CMake to
determine where to write the output map file.  This allows the use of
`-B` option in CMake in projects with Swift targets.
2019-07-23 17:56:19 -07:00
Brad King
1d3841b600 Genex: Memoize usage requirement TARGET_PROPERTY existence
For each usage requirement (such as `INTERFACE_COMPILE_DEFINITIONS` or
`INTERFACE_INCLUDE_DIRECTORIES`), the value of the generator expression
`$<TARGET_PROPERTY:target,prop>` includes the values of the same
property from the transitive closure of link libraries of the target.

In cases that a target's transitive closure of dependencies does not
depend on the target being linked (the "head" target), we can memoize
whether or not a usage requirement property exists at all for that
target.  When a usage requirement does not exist for a target, we
can skip evaluating it for every consuming target.

Fixes: #18964, #18965
2019-07-23 10:44:19 -04:00
Brad King
b5460f9931 cmLinkItem: Expose HadHeadSensitiveCondition in cmLinkInterfaceLibraries
Clients may be able to avoid repeating work if they know the transitive
link interface libraries do not depend on what is linking them.
2019-07-23 10:06:35 -04:00
Marek Antoniak
bf6f5467a0 Fix allocation in CROSSCOMPILING_EMULATOR evaluation
In commit fec441ec17 (Teach CROSSCOMPILING_EMULATOR to support
arguments, 2019-05-30, v3.15.0-rc1~6^2) the new member
`cmCustomCommandGenerator::EmulatorsWithArguments` was not initialized
to the proper size.  Fix this and add a test case covering the crash
that could occur with multiple commands where an emulator appears only
in a later command.

Fixes: #19500
Co-Author: Brad King <brad.king@kitware.com>
2019-07-23 08:33:31 -04:00
Gabor Bencze
d427f12b73 math(EXPR): Implement ~(exp_NOT) expression as documented
Fixes: #19252
2019-07-23 07:33:50 -04:00
Brad King
59b3000c08 Merge topic 'parsers-bison-3.3'
8f0b3f92d5 LexerParser: Regenerate parsers with bison 3.3

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3588
2019-07-23 07:33:23 -04:00
Brad King
dcd4d3e9bf Merge topic 'cmHasLiteralPrefix_cm_string_view'
301f5356fd cmAlgorithms: Make cmHasPrefix and cmHasSuffix cm::string_view based

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Daniel Pfeifer <daniel@pfeifer-mail.de>
Merge-request: !3583
2019-07-23 07:32:30 -04:00
Brad King
5396c5fce4 Merge topic 'make-imported-targets-more-equal'
680a3c63bb target_*: Allow setting INTERFACE properties of UNKNOWN IMPORTED targets
62b5d1e4ad cmTargetPropCommandBase: Order target type condition by order in enum

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3581
2019-07-23 07:30:53 -04:00
Brad King
6f476a4169 Merge topic 'command-refactoring3'
dfaa87f1b3 cmState: Support BuiltinCommands as free functions
28f2d12a05 cmCommand: De-virtualize function InvokeInitialPass
de77d355ac cmState: Add scripted commands by value
0101ace131 cmUnexpectedCommand: Replace with lambda expression
015001aaf1 cmState: Hold commands by value
1eebc29563 cmCommand: deprecate functions GetMakefile and SetError

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3574
2019-07-23 07:29:11 -04:00
Brad King
ad2b3a32d1 Genex: Optimize build setting TARGET_PROPERTY evaluation
For each build setting property (such as `COMPILE_DEFINITIONS` or
`INCLUDE_DIRECTORIES`), the value of `$<TARGET_PROPERTY:target,prop>`
includes the values of the corresponding `INTERFACE_*` usage requirement
property from the transitive closure of link libraries of the target.

Previously we computed this by constructing a generator expression
string like `$<TARGET_PROPERTY:lib,INTERFACE_COMPILE_DEFINITIONS>` and
recursively evaluating it with the generator expression engine.  Avoid
the string construction and parsing by using the dedicated evaluation
method `cmGeneratorTarget::EvaluateInterfaceProperty`.

Issue: #18964, #18965
2019-07-23 06:50:31 -04:00
Brad King
11fa818ecd Genex: Optimize usage requirement TARGET_PROPERTY recursion
In large projects the generation process spends a lot of time evaluating
usage requirements through transitive interface properties on targets.
This can be seen in a contrived example with deep dependencies:

    set(prev "")
    foreach(i RANGE 1 500)
      add_library(a${i} a.c)
      target_compile_definitions(a${i} PUBLIC A${i})
      target_link_libraries(a${i} PUBLIC ${prev})
      set(prev a${i})
    endforeach()

For each usage requirement (such as `INTERFACE_COMPILE_DEFINITIONS` or
`INTERFACE_INCLUDE_DIRECTORIES`), the value of the generator expression
`$<TARGET_PROPERTY:target,prop>` includes the values of the same
property from the transitive closure of link libraries of the target.

Previously we computed this by constructing a generator expression
string like `$<TARGET_PROPERTY:lib,INTERFACE_COMPILE_DEFINITIONS>` and
recursively evaluating it with the generator expression engine.  Avoid
the string construction and parsing by creating and using a dedicated
evaluation method `cmGeneratorTarget::EvaluateInterfaceProperty` that
looks up the properties directly.

Issue: #18964, #18965
2019-07-23 06:46:34 -04:00
Kitware Robot
63dfa74f5f CMake Nightly Date Stamp 2019-07-23 00:01:08 -04:00
Robert Maynard
609fe39043 FindPackage: Support NO_[]_PATH global call options 2019-07-22 17:17:02 -04:00
Avraham Shukron
680a3c63bb target_*: Allow setting INTERFACE properties of UNKNOWN IMPORTED targets
Extend the change made by commit fe4b25ec2f (Teach target_* commands to
set INTERFACE properties of IMPORTED targets, 2017-09-18,
v3.11.0-rc1~433^2~2) to work with imported targets of type `UNKNOWN`.

Fixes: #19434
2019-07-22 10:23:39 -04:00
Sebastian Holtermann
301f5356fd cmAlgorithms: Make cmHasPrefix and cmHasSuffix cm::string_view based
Make `cmHasPrefix`, `cmHasSuffix` and `cmStripSuffixIfExists` accept
arguments as `cm::string_view` instead of `const std::string&`.
This lets them accept literal strings without having to allocate a temporary
`std::string`.
Add variants of `cmHasPrefix`, `cmHasSuffix` and `cmStripSuffixIfExists` that
accept a single character as second argument.
2019-07-22 16:04:22 +02:00
Regina Pfeifer
dfaa87f1b3 cmState: Support BuiltinCommands as free functions 2019-07-22 15:27:56 +02:00
Avraham Shukron
62b5d1e4ad cmTargetPropCommandBase: Order target type condition by order in enum
This improves readability.
2019-07-22 08:53:52 -04:00
Brad King
8f0b3f92d5 LexerParser: Regenerate parsers with bison 3.3
Run `Utilities/Scripts/regenerate-parsers.bash`.
2019-07-22 08:45:40 -04:00
Brad King
dbffd2f4d5 Merge topic 'refactor-processhandler'
ae2cfc4bd8 Refactor: Break cmCTestTestHandler::ProcessHandler() into smaller functions

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3580
2019-07-22 08:21:26 -04:00
Brad King
827b498a02 Merge topic 'static-library-flags'
59f2aa63e4 Swift: fix static library handling

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3576
2019-07-22 08:18:43 -04:00
Brad King
aaf3859e0a Merge topic 'refactor-usage-requirements'
2682714a3f cmGeneratorTarget: Refactor usage requirement genex evaluation
3cbc15773f cmGeneratorTarget: Move static functions to anonymous namespace
33494a507d cmGeneratorTarget: Order usage requirement processing logic consistently
c131e62f7b cmGeneratorTarget: Remove unnecessary copy to local variable
fab72918c9 cmGeneratorTarget: Remove unused member of internal class
95d3598e04 cmGeneratorExpressionDAGChecker: Avoid const_cast

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Marc Chevrier <marc.chevrier@gmail.com>
Merge-request: !3578
2019-07-22 08:17:41 -04:00
Craig Scott
9e42075498 Merge topic 'cpack-install-scripts'
5f96601675 CPack: Introduce CPACK_INSTALL_SCRIPTS variable

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3531
2019-07-22 07:04:00 -04:00
Craig Scott
f4131e4e1b Merge topic 'feature/message-indent'
5f6fd917a3 message(): Control indentation via CMAKE_MESSAGE_INDENT

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3464
2019-07-22 07:02:50 -04:00
Kitware Robot
f3bbbb42f1 CMake Nightly Date Stamp 2019-07-22 00:01:06 -04:00
Alex Turbov
5f96601675 CPack: Introduce CPACK_INSTALL_SCRIPTS variable
The singular name `CPACK_INSTALL_SCRIPT` has existed but was not linked
from the CPack documentation.  Also, it supported multiple values and
should have had a plural name.  Add a plural-named alternative now.
If both `CPACK_INSTALL_SCRIPTS` and `CPACK_INSTALL_SCRIPT` are set then
ignore the latter with a warning.

Signed-off-by: Alex Turbov <i.zaufi@gmail.com>
2019-07-22 02:01:44 +03:00