Merge topic 'ConcurrentFortran-compiler-id'

54676a0e Help: Add notes for topic 'ConcurrentFortran-compiler-id'
7cd539b1 Add support for Concurrent Fortran 77 Compiler
0d204c1c CMakeDetermineCompilerId: Try matching compiler output to detect id
5f0dad75 CMakeDetermineCompilerId: Refactor id build/check loop logic
c65a060e CMakeDetermineCompilerId: Optionally try some flags before no flags
This commit is contained in:
Brad King 2015-06-19 08:51:43 -04:00 committed by CMake Topic Stage
commit a53f1af79f
8 changed files with 46 additions and 6 deletions

View File

@ -0,0 +1,5 @@
ConcurrentFortran-compiler-id
-----------------------------
* The `Concurrent Fortran 77 <https://ccur.com>`__ compiler is now supported.
Its :variable:`compiler id <CMAKE_<LANG>_COMPILER_ID>` is ``CCur``.

View File

@ -11,6 +11,7 @@ include:
Absoft = Absoft Fortran (absoft.com) Absoft = Absoft Fortran (absoft.com)
ADSP = Analog VisualDSP++ (analog.com) ADSP = Analog VisualDSP++ (analog.com)
AppleClang = Apple Clang (apple.com) AppleClang = Apple Clang (apple.com)
CCur = Concurrent Fortran (ccur.com)
Clang = LLVM Clang (clang.llvm.org) Clang = LLVM Clang (clang.llvm.org)
Cray = Cray Compiler (cray.com) Cray = Cray Compiler (cray.com)
Embarcadero, Borland = Embarcadero (embarcadero.com) Embarcadero, Borland = Embarcadero (embarcadero.com)

View File

@ -80,6 +80,7 @@ else()
# Each entry in this list is a set of extra flags to try # Each entry in this list is a set of extra flags to try
# adding to the compile line to see if it helps produce # adding to the compile line to see if it helps produce
# a valid identification file. # a valid identification file.
set(CMAKE_C_COMPILER_ID_TEST_FLAGS_FIRST)
set(CMAKE_C_COMPILER_ID_TEST_FLAGS set(CMAKE_C_COMPILER_ID_TEST_FLAGS
# Try compiling to an object file only. # Try compiling to an object file only.
"-c" "-c"

View File

@ -78,6 +78,7 @@ else()
# Each entry in this list is a set of extra flags to try # Each entry in this list is a set of extra flags to try
# adding to the compile line to see if it helps produce # adding to the compile line to see if it helps produce
# a valid identification file. # a valid identification file.
set(CMAKE_CXX_COMPILER_ID_TEST_FLAGS_FIRST)
set(CMAKE_CXX_COMPILER_ID_TEST_FLAGS set(CMAKE_CXX_COMPILER_ID_TEST_FLAGS
# Try compiling to an object file only. # Try compiling to an object file only.
"-c" "-c"

View File

@ -34,12 +34,19 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
# Try building with no extra flags and then try each set # Try building with no extra flags and then try each set
# of helper flags. Stop when the compiler is identified. # of helper flags. Stop when the compiler is identified.
foreach(flags "" ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS}) foreach(flags ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS_FIRST}
if(NOT CMAKE_${lang}_COMPILER_ID) ""
CMAKE_DETERMINE_COMPILER_ID_BUILD("${lang}" "${flags}" "${src}") ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS})
foreach(file ${COMPILER_${lang}_PRODUCED_FILES}) CMAKE_DETERMINE_COMPILER_ID_BUILD("${lang}" "${flags}" "${src}")
CMAKE_DETERMINE_COMPILER_ID_CHECK("${lang}" "${CMAKE_${lang}_COMPILER_ID_DIR}/${file}" "${src}") CMAKE_DETERMINE_COMPILER_ID_MATCH_VENDOR("${lang}" "${COMPILER_${lang}_PRODUCED_OUTPUT}")
endforeach() if(CMAKE_${lang}_COMPILER_ID)
break()
endif()
foreach(file ${COMPILER_${lang}_PRODUCED_FILES})
CMAKE_DETERMINE_COMPILER_ID_CHECK("${lang}" "${CMAKE_${lang}_COMPILER_ID_DIR}/${file}" "${src}")
endforeach()
if(CMAKE_${lang}_COMPILER_ID)
break()
endif() endif()
endforeach() endforeach()
@ -355,6 +362,7 @@ ${CMAKE_${lang}_COMPILER_ID_OUTPUT}
# No output files should be inspected. # No output files should be inspected.
set(COMPILER_${lang}_PRODUCED_FILES) set(COMPILER_${lang}_PRODUCED_FILES)
set(COMPILER_${lang}_PRODUCED_OUTPUT)
else() else()
# Compilation succeeded. # Compilation succeeded.
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
@ -395,10 +403,24 @@ ${CMAKE_${lang}_COMPILER_ID_OUTPUT}
"${src}\" did not produce an executable in \"" "${src}\" did not produce an executable in \""
"${CMAKE_${lang}_COMPILER_ID_DIR}\".\n\n") "${CMAKE_${lang}_COMPILER_ID_DIR}\".\n\n")
endif() endif()
set(COMPILER_${lang}_PRODUCED_OUTPUT "${CMAKE_${lang}_COMPILER_ID_OUTPUT}")
endif() endif()
# Return the files produced by the compilation. # Return the files produced by the compilation.
set(COMPILER_${lang}_PRODUCED_FILES "${COMPILER_${lang}_PRODUCED_FILES}" PARENT_SCOPE) set(COMPILER_${lang}_PRODUCED_FILES "${COMPILER_${lang}_PRODUCED_FILES}" PARENT_SCOPE)
set(COMPILER_${lang}_PRODUCED_OUTPUT "${COMPILER_${lang}_PRODUCED_OUTPUT}" PARENT_SCOPE)
endfunction()
#-----------------------------------------------------------------------------
# Function to extract the compiler id from compiler output.
function(CMAKE_DETERMINE_COMPILER_ID_MATCH_VENDOR lang output)
foreach(vendor ${CMAKE_${lang}_COMPILER_ID_MATCH_VENDORS})
if(output MATCHES "${CMAKE_${lang}_COMPILER_ID_MATCH_VENDOR_REGEX_${vendor}}")
set(CMAKE_${lang}_COMPILER_ID "${vendor}")
endif()
endforeach()
set(CMAKE_${lang}_COMPILER_ID "${CMAKE_${lang}_COMPILER_ID}" PARENT_SCOPE)
endfunction() endfunction()
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------

View File

@ -98,6 +98,10 @@ else()
# Each entry in this list is a set of extra flags to try # Each entry in this list is a set of extra flags to try
# adding to the compile line to see if it helps produce # adding to the compile line to see if it helps produce
# a valid identification executable. # a valid identification executable.
set(CMAKE_Fortran_COMPILER_ID_TEST_FLAGS_FIRST
# Get verbose output to help distinguish compilers.
"-v"
)
set(CMAKE_Fortran_COMPILER_ID_TEST_FLAGS set(CMAKE_Fortran_COMPILER_ID_TEST_FLAGS
# Try compiling to an object file only. # Try compiling to an object file only.
"-c" "-c"
@ -111,6 +115,10 @@ endif()
if(NOT CMAKE_Fortran_COMPILER_ID_RUN) if(NOT CMAKE_Fortran_COMPILER_ID_RUN)
set(CMAKE_Fortran_COMPILER_ID_RUN 1) set(CMAKE_Fortran_COMPILER_ID_RUN 1)
# Table of per-vendor compiler output regular expressions.
list(APPEND CMAKE_Fortran_COMPILER_ID_MATCH_VENDORS CCur)
set(CMAKE_Fortran_COMPILER_ID_MATCH_VENDOR_REGEX_CCur "Concurrent Fortran [0-9]+ Compiler")
# Table of per-vendor compiler id flags with expected output. # Table of per-vendor compiler id flags with expected output.
list(APPEND CMAKE_Fortran_COMPILER_ID_VENDORS Compaq) list(APPEND CMAKE_Fortran_COMPILER_ID_VENDORS Compaq)
set(CMAKE_Fortran_COMPILER_ID_VENDOR_FLAGS_Compaq "-what") set(CMAKE_Fortran_COMPILER_ID_VENDOR_FLAGS_Compaq "-what")

View File

@ -0,0 +1 @@
include(Compiler/GNU-Fortran)

View File

@ -0,0 +1 @@
include(Platform/Linux-GNU-Fortran)