diff options
author | Brad King <brad.king@kitware.com> | 2024-01-09 14:52:32 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2024-01-09 14:52:55 (GMT) |
commit | 7e81c6fce9663e2552f6ed659a487550229ea9ea (patch) | |
tree | 57e00e26028d682ab3d95555c4383481738b6226 | |
parent | 44af8fb801268a38b57c820bcd262d67a183fae3 (diff) | |
parent | fe1903326c1903fc67fad8b504dcf8574200694d (diff) | |
download | CMake-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.cmake | 27 | ||||
-rw-r--r-- | Modules/Compiler/LCC-CXX.cmake | 32 | ||||
-rw-r--r-- | Modules/GetPrerequisites.cmake | 2 | ||||
-rw-r--r-- | Tests/RunCMake/CMakeLists.txt | 55 | ||||
-rw-r--r-- | Tests/RunCMake/CheckSourceCompiles/CheckSourceCompilesFortran.cmake | 8 | ||||
-rw-r--r-- | Tests/RunCMake/CheckSourceRuns/CheckSourceRunsFortran.cmake | 8 | ||||
-rw-r--r-- | Tests/RunCMake/export/DependOnDoubleExport-stderr.txt | 4 |
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 |