Re: [cmake-developers] New module: CheckFortranCompilerFlag.cmake

2015-02-05 Thread Nicolas Bock
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

2015-02-04 Thread Nicolas Bock
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

2015-02-03 Thread Nicolas Bock
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

2015-02-03 Thread Nicolas Bock
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

2015-01-30 Thread Nicolas Bock
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