]> gcc.gnu.org Git - gcc.git/commitdiff
libstdc++: Add separate autoconf macro for std::float_t and std::double_t [PR109818]
authorJonathan Wakely <jwakely@redhat.com>
Wed, 31 May 2023 11:22:06 +0000 (12:22 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Wed, 31 May 2023 20:10:49 +0000 (21:10 +0100)
This should make it possible to use openlibm with djgpp (and other
targets with missing C99 <math.h> functions). The <math.h> from openlibm
provides all the functions, but not the float_t and double_t typedefs.
By separating the autoconf checks for the functionsand the typedefs, we
don't disable support for all the functions just because those typedefs
are not present.

libstdc++-v3/ChangeLog:

PR libstdc++/109818
* acinclude.m4 (GLIBCXX_ENABLE_C99): Add separate check for
float_t and double_t and define HAVE_C99_FLT_EVAL_TYPES.
* config.h.in: Regenerate.
* configure: Regenerate.
* include/c_global/cmath (float_t, double_t): Guard using new
_GLIBCXX_HAVE_C99_FLT_EVAL_TYPES macro.

libstdc++-v3/acinclude.m4
libstdc++-v3/config.h.in
libstdc++-v3/configure
libstdc++-v3/include/c_global/cmath

index 66194071b20d7de49bf3e324f2b8b7d202351b06..6ae141b8c2070a86dffc05205430e997cbc942d4 100644 (file)
@@ -1273,13 +1273,28 @@ AC_DEFUN([GLIBCXX_ENABLE_C99], [
         in <cmath> in namespace std for C++11.])
     fi
 
-    # Check for the existence of <math.h> functions.
-    AC_CACHE_CHECK([for ISO C99 function support for C++11 in <math.h>],
-    glibcxx_cv_c99_math_funcs, [
+    # Check for the existence of <math.h> typedefs.
+    AC_CACHE_CHECK([for ISO C99 float types for C++11 in <math.h>],
+    glibcxx_cv_c99_flt_eval_types, [
     AC_TRY_COMPILE([#include <math.h>],
                   [// Types
                    typedef double_t  my_double_t;
                    typedef float_t   my_float_t;
+                  ],
+                  [glibcxx_cv_c99_flt_eval_types=yes],
+                  [glibcxx_cv_c99_flt_eval_types=no])
+    ])
+    if test x"$glibcxx_cv_c99_flt_eval_types" = x"yes"; then
+      AC_DEFINE(HAVE_C99_FLT_EVAL_TYPES, 1,
+               [Define if C99 float_t and double_t in <math.h> should be
+               imported in <cmath> in namespace std for C++11.])
+    fi
+
+    # Check for the existence of <math.h> functions.
+    AC_CACHE_CHECK([for ISO C99 function support for C++11 in <math.h>],
+    glibcxx_cv_c99_math_funcs, [
+    AC_TRY_COMPILE([#include <math.h>],
+                  [
                    // Hyperbolic
                    acosh(0.0);
                    acoshf(0.0f);
index 4fbf5ef86b90d35cc4f8cf414caea27ca89af764..5a95853cbbe43228e88fa32a007ab65a08ac3fa3 100644 (file)
 /* Define to 1 if you have the `at_quick_exit' function. */
 #undef HAVE_AT_QUICK_EXIT
 
+/* Define if C99 float_t and double_t in <math.h> should be imported in
+   <cmath> in namespace std for C++11. */
+#undef HAVE_C99_FLT_EVAL_TYPES
+
 /* Define to 1 if the target assembler supports thread-local storage. */
 #undef HAVE_CC_TLS
 
index ba328a64be20b66d73ab9157df46005eeb4bda2e..70d169cf64bcda2e9b261b3f36a053650a2d5f0f 100755 (executable)
@@ -18275,6 +18275,43 @@ $as_echo "#define _GLIBCXX11_USE_C99_MATH 1" >>confdefs.h
 
     fi
 
+    # Check for the existence of <math.h> typedefs.
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ISO C99 float types for C++11 in <math.h>" >&5
+$as_echo_n "checking for ISO C99 float types for C++11 in <math.h>... " >&6; }
+if ${glibcxx_cv_c99_flt_eval_types+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+int
+main ()
+{
+// Types
+                   typedef double_t  my_double_t;
+                   typedef float_t   my_float_t;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_c99_flt_eval_types=yes
+else
+  glibcxx_cv_c99_flt_eval_types=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_c99_flt_eval_types" >&5
+$as_echo "$glibcxx_cv_c99_flt_eval_types" >&6; }
+    if test x"$glibcxx_cv_c99_flt_eval_types" = x"yes"; then
+
+$as_echo "#define HAVE_C99_FLT_EVAL_TYPES 1" >>confdefs.h
+
+    fi
+
     # Check for the existence of <math.h> functions.
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ISO C99 function support for C++11 in <math.h>" >&5
 $as_echo_n "checking for ISO C99 function support for C++11 in <math.h>... " >&6; }
@@ -18288,9 +18325,7 @@ else
 int
 main ()
 {
-// Types
-                   typedef double_t  my_double_t;
-                   typedef float_t   my_float_t;
+
                    // Hyperbolic
                    acosh(0.0);
                    acoshf(0.0f);
index c80ee7c8d721c8e7c43bee2e15f8886ab6b95935..b0ba395eb5cdcd21d773fd952468043d66437b27 100644 (file)
@@ -1877,9 +1877,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #undef truncf
 #undef truncl
 
+#ifdef _GLIBCXX_HAVE_C99_FLT_EVAL_TYPES
   // types
   using ::double_t;
   using ::float_t;
+#endif
 
   // functions
   using ::acosh;
This page took 0.104415 seconds and 5 git commands to generate.