Commit Graph
47352 Commits
Author SHA1 Message Date
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
KWSys Upstream 780d9e070b KWSys 2019-07-25 (a24a6acb)
Code extracted from:

    https://gitlab.kitware.com/utils/kwsys.git

at commit a24a6acbbb4a51cf6fefbeb10d1f63ed1b670c69 (master).

Upstream Shortlog
-----------------

Brad King (3):
      15896025 SystemTools: Use C++11 in SystemToolsAppendComponents
      c6f8e24a SystemTools: Fix CollapseFullPath with relative base path
      5ca03af6 SystemTools: Revert "Reduce scope of 'buf' variable in CollapseFullPath"

David Bodnar (5):
      116a4919 RegularExpression: Reduce scope of 'len' variable
      31f5cdeb RegularExpression: Initialize private members on construction
      6e36d909 SystemTools: Reduce scope of 'buf' variable in CollapseFullPath
      a93bc28c SystemTools: Drop unnecessary .c_str()
      6c3dfd25 CommandLineArguments: initialize internal class members directly
2019-07-25 07:54:33 -04:00
Robert Maynard 98164b707f Tutorial: MultiPackage now correctly compiles 2019-07-25 07:34:41 -04:00
Robert Maynard fa203ee323 Tutorial: Improve Step 10 generator expression example.
Use compiler flags and standard levels as the compelling argument
for using generator expressions and interface libraries
2019-07-25 07:30:13 -04:00
Brad King a1c6d7e9af Merge branch 'release-3.15' 2019-07-25 07:27:14 -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
Brad King 6e0d92cc53 Merge topic 'clang-gnulike-support'
a4657ef670 Merge branch 'backport-clang-gnulike-support' into clang-gnulike-support
161b33f12b Help/guide/tutorial: Revert "require C++14 for the Tutorial"
4f15a6a5c2 Tests: Revert "require C++14 for the Tutorial"
5cfc39127e Merge branch 'backport-clang-gnulike-support' into clang-gnulike-support
d50b31be35 Clang: For MSVC ABI do not use modes older than C++14

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3592
2019-07-25 07:17:22 -04:00
Brad King 070a5e3835 Merge branch 'makefile-depend-relative-include' into release-3.15
Merge-request: !3599
2019-07-25 07:15:42 -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
Robert Maynard d6be117ca0 ExternalProject: Support not initializing any submodules
Fixes #15592
2019-07-24 09:36:30 -04:00
Brad King a96363f899 Merge branch 'release-3.15' 2019-07-24 08:16:44 -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
Brad King 420073e536 Merge branch 'backport-clang-gnulike-support' into release-3.15
Merge-request: !3592
2019-07-24 08:12:51 -04:00
Brad King a4657ef670 Merge branch 'backport-clang-gnulike-support' into clang-gnulike-support 2019-07-24 08:04:52 -04:00
Brad King 161b33f12b Help/guide/tutorial: Revert "require C++14 for the Tutorial"
Revert the changes from commit a2a90f41e3 (Tests: require C++14 for the
Tutorial, 2019-03-21, v3.15.0-rc1~41^2~2) for the content in its new
home.  In commit d50b31be35 (Clang: For MSVC ABI do not use modes older
than C++14, 2019-07-23) we fixed the C++ standard selection for GNU-like
Clang with the MSVC ABI so the test code itself no longer needs to do
it.  In particular, changing the tests in this way broke the tutorial's
narrative.
2019-07-24 08:04:20 -04:00
Brad King 4f15a6a5c2 Tests: Revert "require C++14 for the Tutorial"
Revert commit a2a90f41e3 (Tests: require C++14 for the Tutorial,
2019-03-21, v3.15.0-rc1~41^2~2).  In commit d50b31be35 (Clang: For MSVC
ABI do not use modes older than C++14, 2019-07-23) we fixed the C++
standard selection for GNU-like Clang with the MSVC ABI so the test code
itself no longer needs to do it.  In particular, changing the tests in
this way broke the tutorial's narrative.
2019-07-24 08:02:37 -04:00
Brad King 5cfc39127e Merge branch 'backport-clang-gnulike-support' into clang-gnulike-support 2019-07-24 08:00:53 -04:00
Brad King d50b31be35 Clang: For MSVC ABI do not use modes older than C++14
Since commit d44c0db0b2 (clang: setup correct configuration in gnu mode,
2019-02-20, v3.15.0-rc1~41^2~5) we support the GNU-like Clang that
targets the MSVC ABI.  However, Clang cannot compile with the MSVC
standard library unless it runs in a mode aware of C++14 (since MSVC
itself does not even have a lower mode).  When `CMAKE_CXX_STANDARD` is
set to 98 or 11, use C++14 anyway.

Since Clang's default mode is aware of C++14, another option is to not
add any flags for 98 or 11.  However, if a future Clang version ever
defaults to a higher C++ standard, setting the standard to 98 or 11
should at least not use a mode higher than 14.

Also revert test updates from commit 4819ff9647 (Tests: fix failures
with gnu mode clang on windows, 2019-03-21, v3.15.0-rc1~41^2~3) that
were meant to work around the standard selection problem.

Fixes: #19496
2019-07-24 07:40:30 -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
Norbert Lange 993fe2b4af CMakeFindBinUtils: add some more binutils 2019-07-24 00:16:12 +02:00
Norbert Lange 5412d63714 CMakeFindBinUtils: add missing llvm alternatives
LLVM 8.0 already ships with alternatives for all
current Binutils. Enable them.
2019-07-24 00:06:14 +02:00
Norbert Lange 3a82ef78eb CMakeFindBinUtils: Rename and unset variables for additional names
use the name pattern `_CMAKE_ADDITIONAL_<PROGRAM_NAME>_NAMES`,
and unset those variables at the end of the function
2019-07-23 23:57:45 +02: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
Brad King 07b93cb185 Merge branch 'fix-emulator-arguments' into release-3.15
Merge-request: !3591
2019-07-23 08:38:57 -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
Brad King a1debb8b08 Merge branch 'release-3.15' 2019-07-23 07:38:54 -04:00
Brad King 452419efb9 Merge topic 'InstallRequiredSystemLibraries-redist'
13c3ec545b IRSL: Fix discovery of VS 2019 v141 toolset redistributables
0484165da0 IRSL: Fix typo in v143 toolset version check

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3585
2019-07-23 07:38:12 -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 75c99bfb21 Merge topic 'ssl-warning'
dd3e476786 OpenSSL: Issue an error if OpenSSL is not found

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Brad King <brad.king@kitware.com>
Merge-request: !3565
2019-07-23 07:26:33 -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