Re: [cmake-developers] New module: CheckFortranCompilerFlag.cmake
Thanks! Let me know how I can help with testing. Nick On Feb 5, 2015 9:23 AM, Brad King brad.k...@kitware.com wrote: On 02/04/2015 08:21 AM, Nicolas Bock wrote: I have modified the patch and added error messages for NAG and PGI compilers. I have also fixed the FAIL_REGEX in the module itself to read not for Fortran instead of ... for C. Thanks. I've drafted commits to add the module and a test case: CheckFortranCompilerFlag: Add module to check Fortran flag existence http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=393a45e2 CheckFortranCompilerFlag: Add test case http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=54e900ab It was too late in the 3.2 preparation process to add this, so the commits are based on post-3.2 development. This will give us more time to get the module tested everywhere and to get feedback from early adopters that build from source or use nightly binaries. -Brad -- 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
Re: [cmake-developers] New module: CheckFortranCompilerFlag.cmake
I have modified the patch and added error messages for NAG and PGI compilers. I have also fixed the FAIL_REGEX in the module itself to read not for Fortran instead of ... for C. From 452602f4b125eb89c114d9e1b3db6ee78b04d0b1 Mon Sep 17 00:00:00 2001 From: Nicolas Bock nicolasb...@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/CMakeCheckCompilerFlagCommonPatterns.cmake | 5 +- Modules/CheckFortranCompilerFlag.cmake | 65 ++ 2 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 Modules/CheckFortranCompilerFlag.cmake diff --git a/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake b/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake index 19b2bbc..3141d60 100644 --- a/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake +++ b/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake @@ -21,9 +21,9 @@ macro (CHECK_COMPILER_FLAG_COMMON_PATTERNS _VAR) set(${_VAR} - FAIL_REGEX unrecognized .*option # GNU + FAIL_REGEX [Uu]nrecogni[sz]ed .*option # GNU, NAG FAIL_REGEX unknown .*option # Clang - FAIL_REGEX ignoring unknown option # MSVC + FAIL_REGEX ignoring unknown option # MSVC, Intel FAIL_REGEX warning D9002 # MSVC, any lang FAIL_REGEX option.*not supported # Intel FAIL_REGEX invalid argument .*option # Intel @@ -35,6 +35,7 @@ macro (CHECK_COMPILER_FLAG_COMMON_PATTERNS _VAR) FAIL_REGEX command option .* contains an incorrect subargument # XL FAIL_REGEX not supported in this configuration. ignored # AIX FAIL_REGEX File with unknown suffix passed to linker # PGI + FAIL_REGEX [Uu]nknown switch # PGI FAIL_REGEX WARNING: unknown flag:# Open64 FAIL_REGEX Incorrect command line option:# Borland FAIL_REGEX Warning: illegal option # SunStudio 12 diff --git a/Modules/CheckFortranCompilerFlag.cmake b/Modules/CheckFortranCompilerFlag.cmake new file mode 100644 index 000..479ff9f --- /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 neund...@kde.org +# Copyright 2011 Matthias Kretz kr...@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 Fortran # 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
Re: [cmake-developers] New module: CheckFortranCompilerFlag.cmake
Hi Eike, please find attached a patch based on 460f7bcb7d11e905ee025c9d9cc9629d597fa91b. Thanks nick From a843ca01581ab85a07c36700b2474c722e9917fb Mon Sep 17 00:00:00 2001 From: Nicolas Bock nicolasb...@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 000..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 neund...@kde.org +# Copyright 2011 Matthias Kretz kr...@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 e...@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 -- 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
Re: [cmake-developers] New module: CheckFortranCompilerFlag.cmake
On Tue, Feb 3, 2015 at 1:18 PM, Brad King brad.k...@kitware.com wrote: On 02/03/2015 07:46 AM, Nicolas Bock wrote: please find attached a patch based on 460f7bcb7d11e905ee025c9d9cc9629d597fa91b. Thanks. Was this based on CheckCCompilerFlag from that version too? Yes. On 02/01/2015 04:18 AM, Rolf Eike Beer wrote: 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? Agreed. Do you have example failure messages from any compilers? I will collect some. Local testing of GNU Fortran 4.9 shows that bad flags are rejected with an error. Do we need the pattern matches for any Fortran compilers? I have tested with gcc and Intel (ifort). Ifort gives out warnings for illegal flags, stating that it will ignore them. In my (very basic) testing the warning lead to test failure of the module, i.e.. it lead to the correct behavior. I have access to PGI and possibly NAG's compilers as well and will test whether error messages are caught. + # 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} Certainly the but not for C message will not show up from a Fortran compiler. Oops, yes good point. Thanks, -Brad -- 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
[cmake-developers] New module: CheckFortranCompilerFlag.cmake
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. Thanks, nick # - 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 # 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 neund...@kde.org # Copyright 2011 Matthias Kretz kr...@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(${CMAKE_SOURCE_DIR}/cmake-scripts//CheckFortranSourceCompiles.cmake) 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_Fortran_SOURCE_COMPILES(program test\nstop\nend program test ${_RESULT} # Some compilers do not fail with a bad flag FAIL_REGEX command line option .* is valid for .* but not for C # GNU FAIL_REGEX unrecognized .*option # GNU FAIL_REGEX unknown .*option # Clang FAIL_REGEX ignoring unknown option # MSVC FAIL_REGEX warning D9002 # MSVC, any lang FAIL_REGEX option.*not supported # Intel FAIL_REGEX invalid argument .*option # Intel FAIL_REGEX ignoring option .*argument required # Intel FAIL_REGEX [Uu]nknown option # HP FAIL_REGEX [Ww]arning: [Oo]ption # SunPro FAIL_REGEX command option .* is not recognized # XL FAIL_REGEX WARNING: unknown flag:# Open64 ) foreach(v ${_CheckFortranCompilerFlag_LOCALE_VARS}) set(ENV{${v}} ${_CheckFortranCompilerFlag_SAVED_${v}}) unset(_CheckFortranCompilerFlag_SAVED_${v}) endforeach() unset(_CheckFortranCompilerFlag_LOCALE_VARS) set (CMAKE_REQUIRED_DEFINITIONS ${SAFE_CMAKE_REQUIRED_DEFINITIONS}) endmacro () -- 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