File: 0013-Skip-defining-math-functions-for-__float128-if-they-.patch

package info (click to toggle)
opm-common 2025.04%2Bds-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 98,816 kB
  • sloc: cpp: 277,946; python: 3,553; sh: 198; xml: 174; pascal: 136; makefile: 12
file content (96 lines) | stat: -rw-r--r-- 2,755 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
From: Markus Blatt <markus@dr-blatt.de>
Date: Thu, 18 Sep 2025 07:50:35 +0200
Subject: Skip defining math functions for __float128 if they already exist

---
 cmake/Modules/FindQuadMath.cmake | 15 +++++++++++++--
 opm/material/common/quad.hpp     | 12 ++++++------
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/cmake/Modules/FindQuadMath.cmake b/cmake/Modules/FindQuadMath.cmake
index 96873f6..01a102d 100644
--- a/cmake/Modules/FindQuadMath.cmake
+++ b/cmake/Modules/FindQuadMath.cmake
@@ -68,9 +68,20 @@ if(QuadMath_FOUND AND NOT TARGET QuadMath::QuadMath)
      std::cout<<b;
      return 0;
   }" QuadMath_HAS_IO_OPERATOR)
-  cmake_pop_check_state()  # Reset CMAKE_REQUIRED_XXX variables
+
   if(QuadMath_HAS_IO_OPERATOR)
     target_compile_definitions(QuadMath::QuadMath INTERFACE QUADMATH_HAS_IO_OPERATOR=1)
   endif()
-
+  check_cxx_source_compiles("
+  #include <cmath>
+  int main()
+  {
+     __float128 b=10;
+     __float128 c=atan(b);
+  }" QuadMath_HAS_MATH_OPS)
+  cmake_pop_check_state()  # Reset CMAKE_REQUIRED_XXX variables
+  if(QuadMath_HAS_MATH_OPS)
+    target_compile_definitions(QuadMath::QuadMath INTERFACE QUADMATH_HAS_MATH_OPERATORS=1)
+  endif()
+  cmake_pop_check_state()  # Reset CMAKE_REQUIRED_XXX variables
 endif()
diff --git a/opm/material/common/quad.hpp b/opm/material/common/quad.hpp
index 9f4c10a..084289b 100644
--- a/opm/material/common/quad.hpp
+++ b/opm/material/common/quad.hpp
@@ -266,6 +266,7 @@ inline typename std::istream& operator>>(std::istream& is, quad& val)
 }
 #endif
 
+#if !QUADMATH_HAS_MATH_OPERATORS
 inline quad real(quad val)
 { return val; }
 
@@ -278,7 +279,6 @@ inline quad imag(quad)
 inline quad imag(const std::complex<quad>& val)
 { return val.imag(); }
 
-#if !LIMITS_HAS_QUAD
 inline quad abs(quad val)
 { return (val < 0) ? -val : val; }
 
@@ -287,7 +287,7 @@ inline quad floor(quad val)
 
 inline quad ceil(quad val)
 { return ceilq(val); }
-#endif
+
 
 inline quad max(quad a, quad b)
 { return (a > b) ? a : b; }
@@ -295,10 +295,10 @@ inline quad max(quad a, quad b)
 inline quad min(quad a, quad b)
 { return (a < b) ? a : b; }
 
-#if !LIMITS_HAS_QUAD
+
 inline quad sqrt(quad val)
 { return sqrtq(val); }
-#endif
+#endif // !QUADMATH_HAS_MATH_OPERATORS
 
 template <class ExpType>
 inline quad pow(quad base, ExpType exp)
@@ -308,7 +308,7 @@ template <class BaseType>
 inline quad pow(BaseType base, quad exp)
 { return powq(static_cast<quad>(base), exp); }
 
-#if !LIMITS_HAS_QUAD
+#if !QUADMATH_HAS_MATH_OPERATORS
 inline quad pow(quad base, quad exp)
 { return powq(base, exp); }
 
@@ -344,7 +344,7 @@ inline bool isnan(quad val)
 
 inline bool isinf(quad val)
 { return isinfq(val); }
-#endif
+#endif // QUADMATH_HAS_MATH_OPERATORS
 
 } // namespace std