diff --git a/modules/fc-optional.cmake b/modules/fc-optional.cmake new file mode 100644 index 0000000..6d940c9 --- /dev/null +++ b/modules/fc-optional.cmake @@ -0,0 +1,69 @@ +#.rst: +# +# Adds optional Fortran support. +# Appends EXTRA_FCFLAGS to CMAKE_Fortran_FLAGS. +# If environment variable FCFLAGS is set, then the FCFLAGS are used +# and no other flags are used or appended. +# +# Variables used:: +# +# EXTRA_FCFLAGS +# ENABLE_FC_SUPPORT +# +# Variables defined:: +# +# CMAKE_Fortran_MODULE_DIRECTORY (${PROJECT_BINARY_DIR}/include/fortran) +# +# Variables modified:: +# +# CMAKE_Fortran_FLAGS +# +# Variables set:: +# +# ENABLE_FC_SUPPORT +# +# Environment variables used:: +# +# FCFLAGS +# +# Example autocmake.cfg entry:: +# +# [fc] +# source: https://github.com/scisoft/autocmake/raw/master/modules/fc.cmake +# docopt: --fc= Fortran compiler [default: gfortran]. +# --extra-fc-flags= Extra Fortran compiler flags [default: '']. +# --fc-support= Toggle Fortran language support (ON/OFF) [default: ON]. +# export: 'FC=%s' % arguments['--fc'] +# define: '-DEXTRA_FCFLAGS="%s"' % arguments['--extra-fc-flags'] +# '-DENABLE_FC_SUPPORT="%s"' % arguments['--fc-support'] + +option(ENABLE_FC_SUPPORT "Enable Fortran language support" ON) + +if(ENABLE_FC_SUPPORT) + enable_language(Fortran) + + set(CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_BINARY_DIR}/include/fortran) + + if(NOT DEFINED CMAKE_Fortran_COMPILER_ID) + message(FATAL_ERROR "CMAKE_Fortran_COMPILER_ID variable is not defined!") + endif() + + if(NOT CMAKE_Fortran_COMPILER_WORKS) + message(FATAL_ERROR "CMAKE_Fortran_COMPILER_WORKS is false!") + endif() + + if(DEFINED EXTRA_FCFLAGS) + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${EXTRA_FCFLAGS}") + endif() + + if(DEFINED ENV{FCFLAGS}) + message(STATUS "FCFLAGS is set to '$ENV{FCFLAGS}'.") + set(CMAKE_Fortran_FLAGS "$ENV{FCFLAGS}") + endif() +else() + # workaround to avoid unused warning + if(DEFINED EXTRA_FCFLAGS) + set(_unused ${EXTRA_FCFLAGS}) + unset(_unused) + endif() +endif() diff --git a/modules/fc.cmake b/modules/fc.cmake index f2b2339..c4b005f 100644 --- a/modules/fc.cmake +++ b/modules/fc.cmake @@ -8,7 +8,6 @@ # Variables used:: # # EXTRA_FCFLAGS -# ENABLE_FC_SUPPORT # # Variables defined:: # @@ -18,10 +17,6 @@ # # CMAKE_Fortran_FLAGS # -# Variables set:: -# -# ENABLE_FC_SUPPORT -# # Environment variables used:: # # FCFLAGS @@ -32,38 +27,26 @@ # source: https://github.com/scisoft/autocmake/raw/master/modules/fc.cmake # docopt: --fc= Fortran compiler [default: gfortran]. # --extra-fc-flags= Extra Fortran compiler flags [default: '']. -# --fc-support= Toggle Fortran language support (ON/OFF) [default: ON]. # export: 'FC=%s' % arguments['--fc'] # define: '-DEXTRA_FCFLAGS="%s"' % arguments['--extra-fc-flags'] -# '-DENABLE_FC_SUPPORT="%s"' % arguments['--fc-support'] -option(ENABLE_FC_SUPPORT "Enable Fortran language support" ON) +enable_language(Fortran) -if(ENABLE_FC_SUPPORT) - enable_language(Fortran) +set(CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_BINARY_DIR}/include/fortran) - set(CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_BINARY_DIR}/include/fortran) - - if(NOT DEFINED CMAKE_Fortran_COMPILER_ID) - message(FATAL_ERROR "CMAKE_Fortran_COMPILER_ID variable is not defined!") - endif() - - if(NOT CMAKE_Fortran_COMPILER_WORKS) - message(FATAL_ERROR "CMAKE_Fortran_COMPILER_WORKS is false!") - endif() - - if(DEFINED EXTRA_FCFLAGS) - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${EXTRA_FCFLAGS}") - endif() - - if(DEFINED ENV{FCFLAGS}) - message(STATUS "FCFLAGS is set to '$ENV{FCFLAGS}'.") - set(CMAKE_Fortran_FLAGS "$ENV{FCFLAGS}") - endif() -else() - # workaround to avoid unused warning - if(DEFINED EXTRA_FCFLAGS) - set(_unused ${EXTRA_FCFLAGS}) - unset(_unused) - endif() +if(NOT DEFINED CMAKE_Fortran_COMPILER_ID) + message(FATAL_ERROR "CMAKE_Fortran_COMPILER_ID variable is not defined!") +endif() + +if(NOT CMAKE_Fortran_COMPILER_WORKS) + message(FATAL_ERROR "CMAKE_Fortran_COMPILER_WORKS is false!") +endif() + +if(DEFINED EXTRA_FCFLAGS) + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${EXTRA_FCFLAGS}") +endif() + +if(DEFINED ENV{FCFLAGS}) + message(STATUS "FCFLAGS is set to '$ENV{FCFLAGS}'.") + set(CMAKE_Fortran_FLAGS "$ENV{FCFLAGS}") endif()