The `CMAKE_LINK_LIBRARY_FILE_FLAG` variable is meant for linkers that
want library file paths to be preceded by a flag. This is used only
for OpenWatcom to add the `library` argument before library file paths.
Refactor the approach to treat `CMAKE_LINK_LIBRARY_FILE_FLAG` as a
command-line string fragment to add just before the library file path.
This has two advantages:
* `CMAKE_LINK_LIBRARY_FILE_FLAG` now works like `CMAKE_LINK_LIBRARY_FLAG`.
* `CMAKE_LINK_LIBRARY_FILE_FLAG` can now be an attached flag whose value
is the library file path.
Technically this is a change in behavior, but this setting was created
for internal use and should be rarely used outside of CMake itself.
Fixes: #19541
Since commit e89ad0f94e (install: Allow installing targets created in
another directory, 2018-06-18, v3.13.0-rc1~407^2) we support calling
`install(TARGETS)` for targets created in another directory. However,
install generators are associated with the directory in which the call
to `install()` appears. This may not be the same directory in which the
target is defined. Record in each target the list of install generators
it has.
Fixes: #19546
The frontend variant detection logic added by commit 53fbe23f3f (clang:
introduce CMAKE_<lang>_COMPILER_FRONTEND_VARIANT, 2019-02-20,
v3.15.0-rc1~41^2~8) assumes that `clang-cl` only runs on a Windows host.
It is also available on non-Windows hosts. Fix the condition.
Fixes: #19544
Our dyndep support version 1 has been merged to upstream Ninja.
We never developed a second dyndep version, so simply drop our
checks for different versions.
Also drop the `CMakeOnly.MajorVersionSelection-PythonInterp_2` test
because some environments now have a plain `python` executable for
Python 3.
Fixes: #19536
The clone step checks out the cloned branch but is always followed by an
explicit checkout of the desired `GIT_TAG`. Tell `git clone` not to
check out.
Fix the check added in commit 8d93815d20 (source_group command ensures
that FILES arguments are actually files, 2019-04-25, v3.15.0-rc1~195^2)
to convert to an absolute path before checking for existence.
Also simplify the conversion to an absolute path.
Fixes: #19454
The mapping for this flag was added by commit 43aa632f57 (VS: Populate
`-Qspectre-` flag table entry for v142, 2019-01-24, v3.14.0-rc1~74^2~7).
However, it did not do anything because the special logic added by
commit bb60ed6e72 (VS: Add flag table entry for -Qspectre, 2018-10-08,
v3.13.0-rc1~4^2) to move the `SpectreMitigation` element from
`ClCompile` to the top level only handled the presence of the setting
and not its value. Extend the special logic to carry the value too.
Fixes: #19535
f71f7ce3f0 cmStringAlgorithms: Move string functions to the new cmStringAlgorithms.h
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3618
Previously we computed the entire description of each source file
including all target-wide settings, and then computed compile groups
using those complete descriptions. This is inefficient when target-wide
settings are large because they are included in comparisons even though
they are the same for every source. Instead compute source groups using
only the source-specific settings, and then merge the target-wide
settings into place only once per unique compile group.
This is a slight behavior change in the case that a source-specific
compile definition duplicates a target-wide definition. Previously that
source would still be grouped with other sources which do not have the
definition because they would all get it from the target. Now that
source will be in its own compile group even though it ultimately
compiles with the same settings as another group. This is acceptable
because the source is specified by the project with source-specific
settings already.
Fixes: #19520
Previously we converted the description of each source file into its
compile group Json object and then used the Json object itself as a
unique identifier for the group. When source files have large
descriptions their Json objects make inefficient map keys requiring deep
comparison operations. Instead use our internal `CompileData` structure
as a map key. This enables use of a hash map.
Issue: #19520
Convert from `cmListFileBacktrace` to Json `backtraceGraph` entries
before storing in `CompileData`. This will allow backtraces to be
uniquely identified, hashed, and compared as a single integer.