Merge release-4-5-patches into release-4-6
[alexxy/gromacs.git] / cmake / gmxTestIsfinite.cmake
1 # - Define macro to check if isfinite or _isfinite exists
2 #
3 #  gmx_test_isfinite(VARIABLE)
4 #
5 #  VARIABLE will be set to true if isfinite exists
6 #
7 #  gmx_test__isfinite(VARIABLE)
8 #
9 #  VARIABLE will be set to true if _isfinite exists
10 #
11 #  gmx_test__finite(VARIABLE) - disabled since it doesn't seem to work the way the MSVC docs suggest
12 #
13 #  VARIABLE will be set to true if _finite exists
14 #
15
16 MACRO(gmx_test_isfinite VARIABLE)
17   if(NOT DEFINED isfinite_compile_ok)
18     MESSAGE(STATUS "Checking for isfinite")
19
20     set(CMAKE_REQUIRED_INCLUDES "math.h")
21     if (HAVE_LIBM)
22         set(CMAKE_REQUIRED_LIBRARIES "m")
23     endif()
24     check_c_source_compiles(
25       "#include <math.h>
26 int main(void) {
27   float f;
28   isfinite(f);
29 }" isfinite_compile_ok)
30
31     if(isfinite_compile_ok)
32         MESSAGE(STATUS "Checking for isfinite - yes")
33     else(isfinite_compile_ok)
34         MESSAGE(STATUS "Checking for isfinite - no")
35     endif(isfinite_compile_ok)
36     set(isfinite_compile_ok "${isfinite_compile_ok}" CACHE INTERNAL "Result of isfinite check")
37     set(CMAKE_REQUIRED_INCLUDES)
38     set(CMAKE_REQUIRED_LIBRARIES)
39   endif(NOT DEFINED isfinite_compile_ok)
40   if(isfinite_compile_ok)
41     set(${VARIABLE} ${isfinite_compile_ok}
42                 "Result of test for isfinite")
43   endif()
44 ENDMACRO(gmx_test_isfinite VARIABLE)
45
46 MACRO(gmx_test__isfinite VARIABLE)
47   if(NOT DEFINED _isfinite_compile_ok)
48     MESSAGE(STATUS "Checking for _isfinite")
49
50     set(CMAKE_REQUIRED_INCLUDES "math.h")
51     if (HAVE_LIBM)
52         set(CMAKE_REQUIRED_LIBRARIES "m")
53     endif()
54     check_c_source_compiles(
55       "#include <math.h>
56 int main(void) {
57   float f;
58   _isfinite(f);
59 }" _isfinite_compile_ok)
60
61     if(_isfinite_compile_ok)
62         MESSAGE(STATUS "Checking for _isfinite - yes")
63     else(_isfinite_compile_ok)
64         MESSAGE(STATUS "Checking for _isfinite - no")
65     endif(_isfinite_compile_ok)
66     set(_isfinite_compile_ok "${_isfinite_compile_ok}" CACHE INTERNAL "Result of _isfinite check")
67     set(CMAKE_REQUIRED_INCLUDES)
68     set(CMAKE_REQUIRED_LIBRARIES)
69   endif(NOT DEFINED _isfinite_compile_ok)
70   if(_isfinite_compile_ok)
71     set(${VARIABLE} ${_isfinite_compile_ok}
72                 "Result of test for _isfinite")
73   endif()
74 ENDMACRO(gmx_test__isfinite VARIABLE)
75
76 # Necessary for MSVC
77 MACRO(gmx_test__finite VARIABLE)
78   if(NOT DEFINED _finite_compile_ok)
79     MESSAGE(STATUS "Checking for _finite")
80
81     set(CMAKE_REQUIRED_INCLUDES "float.h")
82     check_c_source_compiles(
83       "#include <float.h>
84 int main(void) {
85   float f;
86   _finite(f);
87 }" _finite_compile_ok)
88
89     if(_finite_compile_ok)
90         MESSAGE(STATUS "Checking for _finite - yes")
91     else(_finite_compile_ok)
92         MESSAGE(STATUS "Checking for _finite - no")
93     endif(_finite_compile_ok)
94     set(_finite_compile_ok "${_finite_compile_ok}" CACHE INTERNAL "Result of _finite check")
95     set(CMAKE_REQUIRED_INCLUDES)
96   endif(NOT DEFINED _finite_compile_ok)
97   if(_finite_compile_ok)
98     set(${VARIABLE} ${_finite_compile_ok}
99                 "Result of test for _finite")
100   endif()
101 ENDMACRO(gmx_test__finite VARIABLE)