# CheckFortranSourceCompiles

Added in version 3.1.

This module provides a command to check whether a Fortran source can be built.

Load this module in a CMake project with:

    include(CheckFortranSourceCompiles)

## Commands

This module provides the following command:

check_fortran_source_compiles

  Checks once whether the given Fortran source code can be built:

      check_fortran_source_compiles(
        <code>
        <variable>
        [FAIL_REGEX <regexes>...]
        [SRC_EXT <extension>]
      )

  This command checks once that the source supplied in `<code>` can be compiled (and linked into an executable). The result of the check is stored in the internal cache variable specified by `<variable>`.

  The arguments are:

  `<code>`

    Fortran source code to check. This must be an entire program, as written in a file containing the body block. All symbols used in the source code are expected to be declared as usual in their corresponding headers.

  `<variable>`

    Variable name of an internal cache variable to store the result of the check, with boolean true for success and boolean false for failure.

  `FAIL_REGEX <regexes>...`

    If this option is provided with one or more regular expressions, then failure is determined by checking if anything in the compiler output matches any of the specified regular expressions.

  `SRC_EXT <extension>`

    Added in version 3.7.

    By default, the test source file used for the check will be given a `.F` file extension. This option can be used to override this with `.<extension>` instead - `.F90` is a typical choice.

  Variables Affecting the Check

  The following variables may be set before calling this command to modify the way the check is run:

  `CMAKE_REQUIRED_FLAGS`

    A space-separated string of additional flags to pass to the compiler. A semicolon-separated list will not work. The contents of `CMAKE_<LANG>_FLAGS` and its associated configuration-specific `CMAKE_<LANG>_FLAGS_<CONFIG>` variables are automatically prepended to the compiler command before the contents of this variable.

  `CMAKE_REQUIRED_DEFINITIONS`

    A semicolon-separated list of compiler definitions, each of the form `-DFOO` or `-DFOO=bar`. A definition for the name specified by the result variable argument of the check command is also added automatically.

  `CMAKE_REQUIRED_INCLUDES`

    A semicolon-separated list of header search paths to pass to the compiler. These will be the only header search paths used; the contents of the `INCLUDE_DIRECTORIES` directory property will be ignored.

  `CMAKE_REQUIRED_LINK_OPTIONS`

    Added in version 3.14.

    A semicolon-separated list of options to add to the link command (see `try_compile()` for further details).

  `CMAKE_REQUIRED_LIBRARIES`

    A semicolon-separated list of libraries to add to the link command. These can be the names of system libraries, or they can be Imported Targets (see `try_compile()` for further details).

  `CMAKE_REQUIRED_LINK_DIRECTORIES`

    Added in version 3.31.

    A semicolon-separated list of library search paths to pass to the linker (see `try_compile()` for further details).

  `CMAKE_REQUIRED_QUIET`

    Added in version 3.1.

    If this variable evaluates to a boolean true value, all status messages associated with the check will be suppressed.

  `CMAKE_TRY_COMPILE_TARGET_TYPE`

    Internally, the `try_compile()` command is used to perform the check, and this variable controls the type of target it creates. If this variable is set to `EXECUTABLE` (the default), the check compiles and links the test source code as an executable program. If set to `STATIC_LIBRARY`, the test source code is compiled but not linked.

## Examples

Checking whether the Fortran compiler supports the `pure` procedure attribute:

    include(CheckFortranSourceCompiles)

    check_fortran_source_compiles("
      pure subroutine foo()
      end subroutine
      program test
        call foo()
      end
    " HAVE_PURE SRC_EXT "F90")

## See Also

- The `CheckSourceCompiles` module for a more general command to check whether source can be built.

- The `CheckSourceRuns` module to check whether source can be built and run.