Protobuf headers have dependencies on threads. On UNIX platforms this
requires linking to a threads library. We've long done this in the
`Protobuf_LIBRARIES` result variable. However, the imported targets
added by commit v3.9.0-rc1~81^2~2 (FindProtobuf: add targets,
2017-05-17) and commit v3.9.0-rc1~68^2 (FindProtobuf: Rename imported
targets to match upstream names, 2017-05-22) were missing a dependency
on threads.
Add the dependency to the imported targets, and to the variables
`Protobuf_LITE_LIBRARIES` and `Protobuf_PROTOC_LIBRARIES`. While this
did not seem to matter in practice for a long time, protobuf 3.6 throws
exceptions in some cases when threads are missing.
Fixes: #18533
A target created by `add_custom_target` should always be a `.vcxproj`
file even if it has `.cs` sources involved in custom commands and such.
The latter case was broken by refactoring in commit v3.12.0-rc1~160^2~7
(remove TargetIsCSharpOnly() and use methods from cmGeneratorTarget,
2018-03-19). The reason is that the `HasLanguage` method added by
commit v3.12.0-rc1~239^2~6 (cmGeneratorTarget: add HasLanguage() as
wrapper for GetLanguages(), 2018-03-19) does not check the target type
and so is not a suitable check for deciding the project file extension.
The `HasLanguage` method was an attempt at an abstraction that turns
out not to work very well. Replace it with a dedicated `IsCSharpOnly`
method that considers the target type, sources, and non-transitive
`LINKER_LANGUAGE`.
Fixes: #18515
Running flang with `-E` now ignores any `-o` option and always prints
preprocessed output to stdout. Use shell redirection to place it in a
file instead.
Fixes: #18497
Since commit v3.12.0-rc1~278^2 (CUDA: Pass more link libraries to device
linking, 2018-03-27) we consider every link library during device
linking and use `-Xnvlink` to pass those that do not end in `.a`.
However, nvlink breaks on versioned shared library names such as
`.so.1`. Work around this problem by not passing library paths that do
not end in `.a` or `.lib`. nvlink would not find device symbols in them
anyway.
Fixes: #18504
Since commit v3.10.0-rc1~391^2~3 (Add directory property 'LABELS' and
CMAKE_DIRECTORY_LABELS variable, 2017-06-23) this command was
accidentally not allowed in script mode. It was dropped because
`ctest -S` mode needs to start with CMake's normal script mode and
then replace the `set_directory_properties` implementation. Restore
the normal `set_directory_properties` in script mode and then add
special logic to replace it in ctest. Also add a test case.
Fixes: #18523
The logic added by commit v3.12.0-rc1~62^2 (cmake: Teach '-E tar' to
report errors copying data, 2018-05-16) incorrectly reports failure
in the case of ARCHIVE_WARN. Convert this case to a warning.
Fixes: #18496
Convert the `CudaOnly.LinkSystemDeviceLibraries` test to a new
`Cuda.ProperDeviceLibraries` test. The former covered only the
`cublas_device` library which is removed by CUDA 10. Extend the new
test to also cover various cases of using threads.
Issue: #18008
Since commit v3.12.0-rc1~278^2 (CUDA: Pass more link libraries to device
linking, 2018-03-27) we consider every link item during device linking.
However, items that start in `-` may be host-specific link flags that
nvcc will not understand during device linking. Filter such items using
a white list.
In particular, this allows `-pthread` to be used for host linking while
not polluting the device link line.
Issue: #18008
When generating `curl_config.h`, add size information for `long long`
and `__int64` types. These are needed as candidates for defining the
`ssize_t` type because on MSVC, `long` is not the same size as `size_t`.
This problem did not affect upstream curl because it computes the
`ssize_t` type in CMake code where all sizes are available. CMake's
port computes it in preprocessor logic because universal binaries on
macOS do not know type sizes until compile time.
Fixes: #18477