+++ /dev/null
-# This module perdorms several try-compiles to determine the default integer
-# size being used by the fortran compiler
-#
-# After execution, the following variable is set:
-#
-# SIZEOF_INTEGER - Number of bytes used to store the default integer type
-# Will be set to 1, 2, 4, 8 or 16 if successful, otherwise it
-# will be unset
-#
-#=============================================================================
-# Author: Chuck Atkins
-# Copyright 2010
-#=============================================================================
-
-macro( CHECK_FORTRAN_INT_SIZE )
- if( NOT CMAKE_Fortran_COMPILER_SUPPORTS_F90 )
- message( FATAL_ERROR "Type size tests require Fortran 90 support" )
- endif()
- if( NOT SIZEOF_INTEGER )
- foreach( _TEST_SIZE 1 2 4 8 16 )
- message( STATUS "Testing default integer*${_TEST_SIZE} - " )
- set( _TEST_FILE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranInteger${_TEST_SIZE}.f90 )
- file( WRITE ${_TEST_FILE} "
- module check_int_size
- interface int_size
- function int_size_${_TEST_SIZE}(a) result(int_size)
- integer*${_TEST_SIZE} a
- integer int_size
- end function int_size_${_TEST_SIZE}
- end interface
- end module
-
- program check_int_size_${_TEST_SIZE}
- use check_int_size
- integer a, b
- a = 7
- b = int_size(a)
- end program
-
- function int_size_${_TEST_SIZE}(a) result(int_size)
- integer*4 a
- int_size = 7
- end function
- ")
- try_compile( SIZEOF_INTEGER ${CMAKE_BINARY_DIR} ${_TEST_FILE} )
- if( SIZEOF_INTEGER )
- message( STATUS "Testing default integer*${_TEST_SIZE} - found" )
- set( SIZEOF_INTEGER ${_TEST_SIZE} CACHE INTERNAL "Size of the default INTEGER type" FORCE )
- break()
- else()
- message( STATUS "Testing default integer*${_TEST_SIZE} - not found" )
- endif()
- endforeach()
- endif()
-
- if( NOT SIZEOF_INTEGER )
- unset( SIZEOF_INTEGER )
- endif()
-endmacro()
-
--- /dev/null
+# This module perdorms several try-compiles to determine the default integer
+# size being used by the fortran compiler
+#
+# After execution, the following variables are set. If they are un set then
+# size detection was not possible
+#
+# SIZEOF_CHARACTER - Number of bytes used to store the default CHARACTER type
+# SIZEOF_LOGICAL - Number of bytes used to store the default LOGICAL type
+# SIZEOF_INTEGER - Number of bytes used to store the default INTEGER type
+# SIZEOF_REAL - Number of bytes used to store the default REAL type
+# SIZEOF_COMPLEX - Number of bytes used to store the default COMPLEX type
+#
+#=============================================================================
+# Author: Chuck Atkins
+# Copyright 2010
+#=============================================================================
+
+macro( CHECK_FORTRAN_TYPE_SIZES )
+ if( NOT CMAKE_Fortran_COMPILER_SUPPORTS_F90 )
+ message( FATAL_ERROR "Type size tests require Fortran 90 support" )
+ endif()
+ foreach( _TEST_TYPE "CHARACTER" "LOGICAL" "INTEGER" "REAL" "COMPLEX" )
+ string( REPLACE " " "_" _TEST_TYPE_VAR "${_TEST_TYPE}" )
+ foreach( _TEST_SIZE 1 2 4 8 16 32 )
+ set( _TEST_FILE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortran${_TEST_TYPE_VAR}Size${_TEST_SIZE}.f90 )
+ file( WRITE ${_TEST_FILE}
+"
+ PROGRAM check_size
+ ${_TEST_TYPE}*${_TEST_SIZE}, TARGET :: a
+ ${_TEST_TYPE}, POINTER :: pa
+ pa => a
+ END PROGRAM
+")
+ try_compile( SIZEOF_${_TEST_TYPE_VAR} ${CMAKE_BINARY_DIR} ${_TEST_FILE} )
+ if( SIZEOF_${_TEST_TYPE_VAR} )
+ message( STATUS "Testing default ${_TEST_TYPE}*${_TEST_SIZE} - found" )
+ set( SIZEOF_${_TEST_TYPE_VAR} ${_TEST_SIZE} CACHE INTERNAL "Size of the default ${_TEST_TYPE} type" FORCE )
+ break()
+ endif()
+ endforeach()
+ if( NOT SIZEOF_${_TEST_TYPE_VAR} )
+ message( WARNING "Unable to determine default size of type ${_TEST_TYPE}" )
+ unset( SIZEOF_${_TEST_TYPE_VAR} CACHE )
+ endif()
+ endforeach()
+endmacro()
+
include( CheckFortranFunctionExists )
include( CheckLibraryExists )
-include( CheckFortranIntSize )
+include( CheckFortranTypeSizes )
# Check the language being used
get_property( _LANGUAGES_ GLOBAL PROPERTY ENABLED_LANGUAGES )
endif()
# Determine the default integer size
-CHECK_FORTRAN_INT_SIZE()
+CHECK_FORTRAN_TYPE_SIZES()
if( NOT SIZEOF_INTEGER )
message( WARNING "Unable to determine default integer size. Assuming integer*4" )
set( SIZEOF_INTEGER 4 )
message( STATUS "FindBLAS: Searching for ${__BLAS_VENDOR} ${__BLAS_LIBNAME} - ${BLAS_${__BLAS_VENDOR}_${__BLAS_LIBNAME}_LIBRARY}" )
if( NOT BLAS_${__BLAS_VENDOR}_${__BLAS_LIBNAME}_LIBRARY )
unset( BLAS_${__BLAS_VENDOR}_LIBRARIES )
+ foreach( __BLAS_LIBNAME ${__BLAS_LIBNAMES} )
+ unset( BLAS_${__BLAS_VENDOR}_${__BLAS_LIBNAME}_LIBRARY CACHE)
+ endforeach()
break()
endif()
set( BLAS_${__BLAS_VENDOR}_LIBRARIES