When checking whether a directory is "implicit" (e.g. implicit link
directory or implicit rpath directory), resolve the real path of both
sides of the comparison. Otherwise we will not recognize paths like
`/usr/lib32` as implicit when `/usr/lib` is implicit and `lib32` is
actually a symlink to `lib`. This can lead to addition of unnecessary
entries to the RPATH of a binary, for example.
Fixes: #16682
The `FIND_LIBRARY_USE_LIB<arch>_PATHS` global properties ask
`find_library` to look in `lib<arch>` directories automatically before
corresponding `lib` directories. However, if `lib<arch>` is just a
symlink to `lib` (or vice-versa) then we should skip adding the
`lib<arch>` path. Such symlinks typically only exist to satisfy
software that expects the `lib<arch>` path to be available.
Fixes: #16687
When compiling KWIML tests with `-Werror=format-security` we get
error: -Wformat-security ignored without -Wformat
Therefore we should disable both `format` and `format-security`
together.
When `COMPILE_PDB_NAME` is used without `COMPILE_PDB_OUTPUT_DIRECTORY`
we cannot fall back on the link `PDB_OUTPUT_DIRECTORY` for an object
library because it has no link step.
Fixes: #16674
This reverts commit v3.7.0-rc1~275^2 (Ninja: Use full path for all
source files, 2016-08-05). Unfortunately using absolute paths can
cause incorrect rebuilds due to ninja limitations. The ninja
manual [1] explains:
> ... using absolute paths, your depfile may result in a mixture of
> relative and absolute paths. Paths used by other build rules need
> to match exactly.
Passing an absolute path to a source file to the compiler while using a
relative path in the ninja build manifest can cause such mixture and
lead to incorrect rebuilds. Simply revert the change for now.
Note that there was a follow-up to the original change in commit
v3.7.0-rc2~10^2 (Ninja: Fix RC language depfile generation with
cmcldeps, 2016-10-13). We don't need to revert that because that
change made the relevant code cleverly adapt to whatever variable
we use to reference the source file.
[1] https://ninja-build.org/manual.html#_depsFixes: #16675
Issue: #13894
In commit v3.8.0-rc1~87^2~1 (VS: added support for C#, 2017-01-09) we
removed what looked like a no-op streaming operation but in fact it
is responsible for applying indentation. Restore the line.
We try to choose the Windows SDK version based on the version of Windows
targeted by the build. However, if using VS 2017 without the Windows
8.1 SDK installed then we must fall back to the Windows 10 SDK even when
targeting an older version of Windows.
Inspired-by: gnaggnoyil <gnaggnoyil@gmail.com>
It does not actually configure the project to install to the given
location. That must be done by passing the `<INSTALL_DIR>` placeholder
to the external project configuration step.
Old versions of `libsigc++` do not have the version macros inside of its
`sigc++config.h` header. Assume nothing about such headers and report
version "zero".
Fixes: #16654
In commit v3.4.0-rc1~333^2 (Merge branch 'upstream-kwsys' into
update-kwsys, 2015-07-15) we brought in upstream KWSys commit 86a24794
(SystemTools: Fix GetActualCaseForPath drive letter case handling,
2015-07-09). This caused our path processing to convert drive letters
to upper-case and exposed an existing bug in our implementation of
CMP0017.
Policy CMP0017 is responsible for ensuring that modules included from a
builtin module only load other builtin modules and cannot be overridden
by a file in `CMAKE_MODULE_PATH`. If there is a case difference in the
drive letter (or other path components) then the path to the including
module may not match our builtin module directory in a simple string
comparison. This means builtin modules may not be recognized as such,
and they may not reliably include their builtin dependencies. For
example, if a project provides a `Platform/Windows` module in
`CMAKE_MODULE_PATH` it can break inclusion of our builtin
`Platform/Windows` module, leading to strange behavior.
Fix this by comparing the path to the including module to our builtin
module directory using a function that is aware of case-insensitivity of
paths on Windows.
Fixes: #16648, #16622
Refactoring in commit v3.6.0-rc1~85^2 (HDF5: Refactor the use of
compiler wrappers, 2016-04-04) converted code of the form
if(${LANGUAGE} MATCHES ...)
to
if(LANGUAGE MATCHES ...)
However, `LANGUAGE` is a foreach() loop variable and not a normal
variable so auto-dereference does not occur. Restore the explicit `${}`
syntax and use the new name of the loop variable that has changed since
then too.
Fixes: #16651
Refactoring in commit v3.6.0-rc1~72^2 (HDF5: Rework component searching
to correctly find HL for all bindings, 2016-05-12) renamed the language
loop variable used to construct the name of `HDF5_<LANG>_INCLUDE_DIR`
but forgot to update it in the `mark_as_advanced` call. Fix it now.
Issue: #16651