[cmake-developers] New module: CheckFortranCompilerFlag.cmake

Nicolas Bock nicolasbock at gmail.com
Tue Feb 3 07:46:50 EST 2015


Hi Eike,

please find attached a patch based on 460f7bcb7d11e905ee025c9d9cc9629d597fa91b.

Thanks

nick


>From a843ca01581ab85a07c36700b2474c722e9917fb Mon Sep 17 00:00:00 2001
From: Nicolas Bock <nicolasbock at gmail.com>
Date: Mon, 2 Feb 2015 17:07:04 -0700
Subject: [PATCH] New Module: CheckFortranCompilerFlags.cmake

This module is based on the existing CheckCCompilerFlags.cmake.
---
 Modules/CheckFortranCompilerFlag.cmake | 65 ++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)
 create mode 100644 Modules/CheckFortranCompilerFlag.cmake

diff --git a/Modules/CheckFortranCompilerFlag.cmake
b/Modules/CheckFortranCompilerFlag.cmake
new file mode 100644
index 0000000..08aed07
--- /dev/null
+++ b/Modules/CheckFortranCompilerFlag.cmake
@@ -0,0 +1,65 @@
+#.rst:
+# CheckCCompilerFlag
+# ------------------
+#
+# Check whether the Fortran compiler supports a given flag.
+#
+# CHECK_Fortran_COMPILER_FLAG(<flag> <var>)
+#
+# ::
+#
+#   <flag> - the compiler flag
+#   <var>  - variable to store the result
+#            Will be created as an internal cache variable.
+#
+# This internally calls the check_fortran_source_compiles macro and
+# sets CMAKE_REQUIRED_DEFINITIONS to <flag>.  See help for
+# CheckFortranSourceCompiles for a listing of variables that can
+# otherwise modify the build.  The result only tells that the compiler
+# does not give an error message when it encounters the flag.  If the
+# flag has any effect or even a specific one is beyond the scope of
+# this module.
+
+#=============================================================================
+# Copyright 2006-2011 Kitware, Inc.
+# Copyright 2006 Alexander Neundorf <neundorf at kde.org>
+# Copyright 2011 Matthias Kretz <kretz at kde.org>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+include(CheckFortranSourceCompiles)
+include(CMakeCheckCompilerFlagCommonPatterns)
+
+macro (CHECK_Fortran_COMPILER_FLAG _FLAG _RESULT)
+   set(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
+   set(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
+
+   # Normalize locale during test compilation.
+   set(_CheckFortranCompilerFlag_LOCALE_VARS LC_ALL LC_MESSAGES LANG)
+   foreach(v ${_CheckFortranCompilerFlag_LOCALE_VARS})
+     set(_CheckFortranCompilerFlag_SAVED_${v} "$ENV{${v}}")
+     set(ENV{${v}} C)
+   endforeach()
+   CHECK_COMPILER_FLAG_COMMON_PATTERNS(_CheckFortranCompilerFlag_COMMON_PATTERNS)
+   CHECK_Fortran_SOURCE_COMPILES("       program test\n       stop\n
     end program" ${_RESULT}
+     # Some compilers do not fail with a bad flag
+     FAIL_REGEX "command line option .* is valid for .* but not for C" # GNU
+     ${_CheckFortranCompilerFlag_COMMON_PATTERNS}
+     )
+   foreach(v ${_CheckFortranCompilerFlag_LOCALE_VARS})
+     set(ENV{${v}} ${_CheckFortranCompilerFlag_SAVED_${v}})
+     unset(_CheckFortranCompilerFlag_SAVED_${v})
+   endforeach()
+   unset(_CheckFortranCompilerFlag_LOCALE_VARS)
+   unset(_CheckFortranCompilerFlag_COMMON_PATTERNS)
+
+   set (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
+endmacro ()
-- 
2.0.5

On Sun, Feb 1, 2015 at 2:18 AM, Rolf Eike Beer <eike at sf-mail.de> wrote:
> Nicolas Bock wrote:
>> Hi,
>>
>> please find attached for potential inclusion into CMake a new Module
>> that tests Fortran compiler flags. It is a modified copy of the
>> existing CheckCCompilerFlag.cmake module.
>
> Hi Nicolas,
>
> which version did you base this on? It looks like this is a version older than
> any 3.0.0-rc. Please take a look at the git version instead.
>
> Also I don't know if it makes sense to check for certain flags that look
> specific to C++. Which compilers did you use to test?
>
> Greetings,
>
> Eike
> --
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake-developers


More information about the cmake-developers mailing list