mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-23 07:28:51 -06:00
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.
This commit is contained in:
@@ -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})
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user