summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormakise-homura <akemi_homura@kurisa.ch>2023-12-21 19:58:09 (GMT)
committerBrad King <brad.king@kitware.com>2024-01-08 20:25:57 (GMT)
commit3377141c8f18ecfed46f52a8be8228d982e32464 (patch)
tree9878840e35210e53608288645ddf1966737b713d
parent020e80d825a0c501fc7ae4273766eca102d505de (diff)
downloadCMake-3377141c8f18ecfed46f52a8be8228d982e32464.zip
CMake-3377141c8f18ecfed46f52a8be8228d982e32464.tar.gz
CMake-3377141c8f18ecfed46f52a8be8228d982e32464.tar.bz2
Tests: With lfortran < 1.24 skip cases broken by incorrect filename handling
`lfortran` < 1.24 uses `fccn`, a Fortran-to-C converter that incorrectly handles long filenames that are more than 128 characters long; so to check if Fortran can compile something, CMake must be run in binary directory that has a name of less that 35 characters long. It is ok for typical runs line `cmake -S . -B build` or `cmake ..`, but does not work with usual CDash dashboard testing paths. All this is not a problem for modern LCC >= 1.24.
-rw-r--r--Tests/RunCMake/CMakeLists.txt12
-rw-r--r--Tests/RunCMake/CheckSourceCompiles/CheckSourceCompilesFortran.cmake8
-rw-r--r--Tests/RunCMake/CheckSourceRuns/CheckSourceRunsFortran.cmake8
3 files changed, 27 insertions, 1 deletions
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index a4e4800..e218169 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})
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'