The new cmFileTime class stores the file modification time as an OS independent
nanosecond count. Its main use is to load and compare file modification times
in nanosecond and second resolution.
In order to keep infinitely-recursive scripts from causing a stack
overflow in the CMake executable, CMake now imposes a maximum
recursion limit before issuing an error message. The limit can be
adjusted at runtime with CMAKE_MAXIMUM_RECURSION_DEPTH.
Fixes: #18694
Define a `cm::string_view` type implemented via C++17 `std::string_view`
when available. Provide a fallback implementation for C++11 and C++14
compilers.
The fallback implementation was written by reading documentation of the
standard spec. We have no dedicated tests for it, but it will be
covered by tests of its clients later.
Before this change, install rules created by add_subdirectory()
would be executed after all of the top-level install rules, even
if they were declared before the top-level rules. This change
adds a new policy, CMP0082, which interleaves the add_subdirectory()
install rules with the other install rules so they are run in the
correct order.
Avoid exposing the item name implicitly as std::string. When the item
is a target, avoid storing a second copy of its name.
Most link item construction is paired with calls to `FindTargetToLink`
to get the possible target pointer. Rename these methods to
`ResolveLinkItem` and refactor them to construct the entire item.
Add `clang` and `clang++` after the corresponding `gcc` and `g++`
candidates. Otherwise it is not tried on platforms where we do not
enumerate the toolchain pair candidates.
3bcaa870 cmUVHandlePtr: Add uv_process_ptr
dd700e9b cmUVHandlePtr: Add uv_timer_ptr
32cfa7b3 cmUVHandlePtr: Move to CMakeLib to make it available everywhere
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1541
Some versions of clang 5 (with libc++) have a problem with
`unordered_map` under `-std=gnu++1z`:
/usr/include/c++/__hash_table:1134:43: error: conflicting types for '__hash_table<_Tp, _Hash, _Equal, _Alloc>'
Include `unordered_map` in our test source so that we reject this
combination and fall back to an older C++ standard flag.
Fixes: #17526
714ce728 bootstrap: Make libuv available during bootstrap
6a2d967d bootstrap: Require compiler mode aware of C99 on Solaris
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1131
On UNIX, build only the parts of libuv we need for the filesystem,
process, and poll abstractions using the POSIX poll() backend. This
avoids many platform-specific conditions. On Windows, build all of
libuv; there are no conditional alternatives anyway.
Since commit v3.9.0-rc1~281^2 (Use quotes for non-system includes,
2017-04-11) we include `cmConfigure.h` via `""` instead of `<>`.
This breaks the `bootstrap` script when run more than once in an
in-source build. In that case `cmConfigure.h` is generated next
to the source files that include it, so `""`-style includes prevent the
`Bootstrap.cmk/cmConfigure.h` file from being included during bootstrap.
Fix this by teaching the bootstrap script to remove any `cmConfigure.h`
that may have been generated by an earlier run in an in-source build.
Fixes: #17082
Some compilers have enough features enabled in their default modes to
pass our simple C++11 unique_ptr check but do not enable enough to build
CMake. Poison this case so that we choose one of the explicit `-std=`
options for such compilers.
ef978c1d CursesDialog: use target_include_directories for cmForm
7814d750 bootstrap: make target_* commands available
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1158
d12837af bootstrap: Require a standard C compiler
dc0befb6 bootstrap: Remove check that identifies GNU compiler
6fdcf02a bootstrap: remove dead branches
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1142
CMake can now compile as C++11 on all supported platforms. Check that
std::unique_ptr is available and fail early if missing. This will allow
us to use C++11 more broadly in CMake's implementation (previously it
was restricted to the serve mode implementation).
Co-Author: Daniel Pfeifer <daniel@pfeifer-mail.de>