summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2024-01-09 14:52:32 (GMT)
committerKitware Robot <kwrobot@kitware.com>2024-01-09 14:52:55 (GMT)
commit7e81c6fce9663e2552f6ed659a487550229ea9ea (patch)
tree57e00e26028d682ab3d95555c4383481738b6226
parent44af8fb801268a38b57c820bcd262d67a183fae3 (diff)
parentfe1903326c1903fc67fad8b504dcf8574200694d (diff)
downloadCMake-7e81c6fce9663e2552f6ed659a487550229ea9ea.zip
CMake-7e81c6fce9663e2552f6ed659a487550229ea9ea.tar.gz
CMake-7e81c6fce9663e2552f6ed659a487550229ea9ea.tar.bz2
Merge topic 'lcc-updates'
fe1903326c Tests: Avoid procedure stack overflow in broken libc on Elbrus b7f9d24b40 Tests: Improve RunCMake.export expected output matching robustness 3377141c8f Tests: With lfortran < 1.24 skip cases broken by incorrect filename handling 020e80d825 LCC: Add missing C/CXX compiler version checks for -std options 76a0a67026 GetPrerequisites: Tolerate multiple leading '/' in system library paths Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !9099
-rw-r--r--Modules/Compiler/LCC-C.cmake27
-rw-r--r--Modules/Compiler/LCC-CXX.cmake32
-rw-r--r--Modules/GetPrerequisites.cmake2
-rw-r--r--Tests/RunCMake/CMakeLists.txt55
-rw-r--r--Tests/RunCMake/CheckSourceCompiles/CheckSourceCompilesFortran.cmake8
-rw-r--r--Tests/RunCMake/CheckSourceRuns/CheckSourceRunsFortran.cmake8
-rw-r--r--Tests/RunCMake/export/DependOnDoubleExport-stderr.txt4
7 files changed, 104 insertions, 32 deletions
diff --git a/Modules/Compiler/LCC-C.cmake b/Modules/Compiler/LCC-C.cmake
index 3dd6e68..99f791f 100644
--- a/Modules/Compiler/LCC-C.cmake
+++ b/Modules/Compiler/LCC-C.cmake
@@ -12,18 +12,25 @@ endif()
set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c)
-set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
-set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
-set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 1.23)
+ set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
+ set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
+ set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
-set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
-set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
-set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
-set(CMAKE_C17_STANDARD_COMPILE_OPTION "-std=c17")
-set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std=gnu17")
-set(CMAKE_C23_STANDARD_COMPILE_OPTION "-std=c2x")
-set(CMAKE_C23_EXTENSION_COMPILE_OPTION "-std=gnu2x")
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 1.20)
+ set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
+ set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
+ set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 1.26)
+ set(CMAKE_C17_STANDARD_COMPILE_OPTION "-std=c17")
+ set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std=gnu17")
+endif()
__compiler_check_default_language_standard(C 1.23 90 1.20 11 1.26 17)
diff --git a/Modules/Compiler/LCC-CXX.cmake b/Modules/Compiler/LCC-CXX.cmake
index b3bdd3c..385947a 100644
--- a/Modules/Compiler/LCC-CXX.cmake
+++ b/Modules/Compiler/LCC-CXX.cmake
@@ -17,15 +17,27 @@ set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hi
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
-set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
-set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
-set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
-set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
-set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
-set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
-set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
-set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
-set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
-set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
+
+if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 1.20)
+ set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
+ set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
+ set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 1.21)
+ set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
+ set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
+ set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 1.24)
+ set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
+ set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
+endif()
+
+if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 1.26)
+ set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
+ set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
+endif()
__compiler_check_default_language_standard(CXX 1.19 98 1.20 11 1.21 14 1.24 17 1.26 20)
diff --git a/Modules/GetPrerequisites.cmake b/Modules/GetPrerequisites.cmake
index 0ba35b6..d55c4ca 100644
--- a/Modules/GetPrerequisites.cmake
+++ b/Modules/GetPrerequisites.cmake
@@ -514,7 +514,7 @@ function(gp_resolved_file_type original_file file exepath dirs type_var)
string(TOLOWER "${resolved_file}" lower)
if(UNIX)
- if(resolved_file MATCHES "^(/lib/|/lib32/|/libx32/|/lib64/|/usr/lib/|/usr/lib32/|/usr/libx32/|/usr/lib64/|/usr/X11R6/|/usr/bin/)")
+ if(resolved_file MATCHES "^/*(/lib/|/lib32/|/libx32/|/lib64/|/usr/lib/|/usr/lib32/|/usr/libx32/|/usr/lib64/|/usr/X11R6/|/usr/bin/)")
set(is_system 1)
endif()
endif()
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index a4e4800..cbd9cbc 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -345,7 +345,17 @@ if(DEFINED CMake_TEST_OBJC)
list(APPEND CompilerTest_ARGS -DCMake_TEST_OBJC=${CMake_TEST_OBJC})
endif()
if(CMAKE_Fortran_COMPILER)
- list(APPEND CompilerTest_ARGS -DCMake_TEST_Fortran=1)
+ # lfortran < 1.24 cannot handle long file names. Fortran is not
+ # enabled here, so check the C compiler version instead.
+ if(CMAKE_C_COMPILER_ID STREQUAL "LCC" AND CMAKE_C_COMPILER_VERSION VERSION_LESS "1.24")
+ string(LENGTH "${CMAKE_CURRENT_BINARY_DIR}" _CCBD_LEN)
+ if(_CCBD_LEN LESS 35)
+ list(APPEND CompilerTest_ARGS -DCMake_TEST_Fortran=1)
+ endif()
+ unset(_CCBD_LEN)
+ else()
+ list(APPEND CompilerTest_ARGS -DCMake_TEST_Fortran=1)
+ endif()
endif()
foreach(lang IN ITEMS CUDA HIP ISPC)
if(CMake_TEST_${lang})
@@ -1040,6 +1050,31 @@ set(cpack_tests
if(APPLE)
list(APPEND cpack_tests DragNDrop)
endif()
+
+if(CMAKE_SYSTEM_PROCESSOR STREQUAL "e2k" AND NOT DEFINED CMake_TEST_E2K_BROKEN_LIBC)
+ # Exclude tests that fail due to a broken libc version on Elbrus.
+ find_program(DPKG_QUERY "dpkg-query" )
+ execute_process(COMMAND "${DPKG_QUERY}" "-f" "\${Version}" "-W" "glibc" OUTPUT_VARIABLE LIBC_VERSION)
+ if(LIBC_VERSION MATCHES "2.29-25.*")
+ list(REMOVE_ITEM cpack_tests
+ DEB.AUTO_SUFFIXES
+ DEB.CUSTOM_NAMES
+ DEB.DEB_PACKAGE_VERSION_BACK_COMPATIBILITY
+ DEB.PROJECT_META DEB.DEPENDENCIES
+ RPM.PARTIALLY_RELOCATABLE_WARNING
+ RPM.PER_COMPONENT_FIELDS
+ RPM.USER_FILELIST
+ RPM.DIST
+ RPM.AUTO_SUFFIXES
+ TGZ
+ ZIP
+ STGZ
+ External
+ )
+ set(CMake_TEST_E2K_BROKEN_LIBC 1)
+ endif()
+endif()
+
add_RunCMake_test_group(CPack "${cpack_tests}")
# add a test to make sure symbols are exported from a shared library
# for MSVC compilers CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS property is used
@@ -1094,14 +1129,16 @@ add_RunCMake_test(CMakePresetsBuild
-DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA}
-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
)
-add_RunCMake_test(CMakePresetsTest
- -DPython_EXECUTABLE=${Python_EXECUTABLE}
- -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA}
- )
-add_RunCMake_test(CMakePresetsPackage
- -DPython_EXECUTABLE=${Python_EXECUTABLE}
- -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA}
- )
+if(NOT CMake_TEST_E2K_BROKEN_LIBC)
+ add_RunCMake_test(CMakePresetsTest
+ -DPython_EXECUTABLE=${Python_EXECUTABLE}
+ -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA}
+ )
+ add_RunCMake_test(CMakePresetsPackage
+ -DPython_EXECUTABLE=${Python_EXECUTABLE}
+ -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA}
+ )
+endif()
add_RunCMake_test(CMakePresetsWorkflow
-DPython_EXECUTABLE=${Python_EXECUTABLE}
-DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA}
diff --git a/Tests/RunCMake/CheckSourceCompiles/CheckSourceCompilesFortran.cmake b/Tests/RunCMake/CheckSourceCompiles/CheckSourceCompilesFortran.cmake
index 48dc525..68c5735 100644
--- a/Tests/RunCMake/CheckSourceCompiles/CheckSourceCompilesFortran.cmake
+++ b/Tests/RunCMake/CheckSourceCompiles/CheckSourceCompilesFortran.cmake
@@ -5,6 +5,14 @@ include(CheckSourceCompiles)
set(Fortran 1) # test that this is tolerated
+# lfortran < 1.24 cannot handle long file names.
+if(CMAKE_Fortran_COMPILER_ID STREQUAL "LCC" AND CMAKE_Fortran_COMPILER_VERSION VERSION_LESS "1.24")
+ string(LENGTH "${CMAKE_CURRENT_BINARY_DIR}" _CCBD_LEN)
+ if(_CCBD_LEN GREATER_EQUAL 35)
+ return()
+ endif()
+endif()
+
check_source_compiles(Fortran [=[
PROGRAM TEST_HAVE_PRINT
PRINT *, 'Hello'
diff --git a/Tests/RunCMake/CheckSourceRuns/CheckSourceRunsFortran.cmake b/Tests/RunCMake/CheckSourceRuns/CheckSourceRunsFortran.cmake
index 50e8ec8..fc5506a 100644
--- a/Tests/RunCMake/CheckSourceRuns/CheckSourceRunsFortran.cmake
+++ b/Tests/RunCMake/CheckSourceRuns/CheckSourceRunsFortran.cmake
@@ -5,6 +5,14 @@ include(CheckSourceRuns)
set(Fortran 1) # test that this is tolerated
+# lfortran < 1.24 cannot handle long file names.
+if(CMAKE_Fortran_COMPILER_ID STREQUAL "LCC" AND CMAKE_Fortran_COMPILER_VERSION VERSION_LESS "1.24")
+ string(LENGTH "${CMAKE_CURRENT_BINARY_DIR}" _CCBD_LEN)
+ if(_CCBD_LEN GREATER_EQUAL 35)
+ return()
+ endif()
+endif()
+
check_source_runs(Fortran [=[
PROGRAM TEST_HAVE_PRINT
PRINT *, 'Hello'
diff --git a/Tests/RunCMake/export/DependOnDoubleExport-stderr.txt b/Tests/RunCMake/export/DependOnDoubleExport-stderr.txt
index e8f8a09..a884939 100644
--- a/Tests/RunCMake/export/DependOnDoubleExport-stderr.txt
+++ b/Tests/RunCMake/export/DependOnDoubleExport-stderr.txt
@@ -1,7 +1,7 @@
CMake Error in CMakeLists.txt:
export called with target "exported" which requires target "doubleexported"
- that is not in this export set, but in multiple other export sets:
- .*/Tests/RunCMake/export/DependOnDoubleExport-build/exportset.cmake,
+ that is not in this export set, but in multiple other export sets:.*
+ .*/Tests/RunCMake/export/DependOnDoubleExport-build/exportset.cmake,.*
.*/Tests/RunCMake/export/DependOnDoubleExport-build/manual.cmake.
+
An exported target cannot depend upon another target which is exported