Variables such as CMAKE_COMPILER_IS_GNUCC are documented as
obsolete/deprecated and ideally shouldn't be used in the code anymore
to have clearer compiler identifications.
In the past QCC compiler was identified as GNU and also had this
variable set to 1 (see policy CMP0047). Same still applies for LCC
compiler (see policy CMP0129).
CMake 3.27 deprecates compatibility with CMake < 3.5. Update tests that
do not cover older interfaces to avoid the deprecation warning.
Follow the pattern from:
* commit 7b07ccdd2b (Tests/*Only: Update cmake_minimum_required versions,
2020-06-15, v3.19.0-rc1~629^2~1)
* commit 72e7c45e98 (Tests: Bump CMake minimum required in tests to 2.8.12,
2020-12-22, v3.20.0-rc1~224^2)
* commit f6b4db365a (Tests: bump cmake_minimum_required version to 2.8.12,
2021-04-04, v3.21.0-rc1~372^2)
Also remove explicit `cmake_policy` settings made redundant by the
version.
GCC mistakenly issues the pedantic warning "ISO C forbids conversion of
function pointer to object pointer type". With -pedantic-errors in the
compile flags, that diagnostic prevents check_symbol_exists() from
detecting function symbols.
The solution is to filter out -pedantic-errors (and -Werror, just to be
future proof) before invoking try_compile().
Fixes: #13208
Ancient versions of CMake required else(), endif(), and similar block
termination commands to have arguments matching the command starting the
block. This is no longer the preferred style.
Run the following shell code:
for c in else endif endforeach endfunction endmacro endwhile; do
echo 's/\b'"$c"'\(\s*\)(.\+)/'"$c"'\1()/'
done >convert.sed &&
git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' '*CMakeLists.txt' |
egrep -z -v '^(Utilities/cm|Source/kwsys/)' |
egrep -z -v 'Tests/CMakeTests/While-Endwhile-' |
xargs -0 sed -i -f convert.sed &&
rm convert.sed