45408b5ea1 cmake_minimum_required: Optionally set policies with version range
6a41aa2abd cmPolicies: Split parsing and impl of ApplyPolicyVersion
1d00ed7cf7 cmPolicies: Drop unnecessary check from ApplyPolicyVersion
0df559832b cmPolicies: Pass policy version as std::string
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1864
Compute a default for `BUILD_CursesDialog` by building a small test
project that uses curses. Disable `ccmake` by default if it fails,
and do not search for Curses as part of the main build. This avoids
creating FindCurses cache entries when we are not considering ccmake.
If `BUILD_CursesDialog` is enabled (e.g. by the user) then warn if
curses cannot be found.
Teach `cmake_minimum_required` and `cmake_policy(VERSION)` to support a
version range of the form `<min>[...<max>]`. Define this to mean that
version `<min>` is required, but known policies up to those introduced
by `<max>` will be set to `NEW`. This will allow projects to easily
specify a range of versions for which they have been updated.
Policy `CMP0074` was added by commit eb35d8884b (find_package: Use
PackageName_ROOT variables as search prefixes, 2018-03-15). Revise the
logic to avoid warning when a `PackageName_ROOT` variable is set to
empty since that won't change the search behavior. Also, when we do
warn include the variable value(s) for reference.
GCC supports the __null builtin basically forever (since at least 2.95), which
behaves very much like nullptr later does. Use this instead of plain "0" as
fallback value, otherwise passing the define to functions annotated with
__attribute__((sentinel)) will result in a compiler warning.
On Solaris the ncurses header may define an `__attribute__` macro.
This breaks C++ headers that use `__attribute__(...)` syntax.
Somehow it causes references to unresolved symbols:
__gthrw_pthread_once
__gthrw_pthread_mutex_lock
__gthrw_pthread_mutex_unlock
instead of references to the correct symbols:
pthread_once
pthread_mutex_lock
pthread_mutex_unlock
Detect this case and undefine the `__attribute__` macro after
including the curses headers.
Since commit v2.8.0~27 (Major optimization of C/C++ dependency scanning,
2009-09-23) our `VaildDeps` cache of `depend.internal` content is
supposed to avoid re-scanning dependencies of object files whose
dependencies have not changed. However, this was broken by changes to
`cmDependsC::WriteDependencies` by commit v3.1.0-rc1~272^2~1 (cmDepends:
Refactor object file path conversion, 2014-07-22). The object file path
written to `depend.internal` was changed to a relative path, but the
lookup in the `ValidDeps` cache of that information was not updated too.
Therefore the cache is not used.
Fix the object file path used for the `ValidDeps` lookup to restore the
original optimization.