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.
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 @@
   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 @@
 
 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 @@
 
 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'