Hi folks,
it would be great to reduce the in-flight patch stack a bit :)
> On 25 Mar 2025, at 16:40, Iain Sandoe <iains....@gmail.com> wrote:
>
> This is on top of the C++-ify configure and random_r patches.
> Tested on x86_64,aarch64-Linux and x86_64-darwin, OK for trunk?
> thanks
> Iain
>
> --- 8< ---
>
> strfrom{f,d,l,fN) are all C23 and might not be available in general.
> This uses snprintf() to provide fall-backs where the libc does not
> yet have support.
>
> PR cobol/119296
>
> libgcobol/ChangeLog:
>
> * config.h.in: Regenerate.
> * configure: Regenerate.
> * configure.ac: Check for availability of strfromf32 and
> strfromf64.
> * libgcobol.cc (strfromf32, strfromf64): New.
>
> Signed-off-by: Iain Sandoe <i...@sandoe.co.uk>
> ---
> libgcobol/config.h.in | 6 ++++++
> libgcobol/configure | 13 +++++++++++--
> libgcobol/configure.ac | 3 +++
> libgcobol/libgcobol.cc | 24 ++++++++++++++++++++++++
> 4 files changed, 44 insertions(+), 2 deletions(-)
>
> diff --git a/libgcobol/config.h.in b/libgcobol/config.h.in
> index e7e1492b579..d61ff7ad497 100644
> --- a/libgcobol/config.h.in
> +++ b/libgcobol/config.h.in
> @@ -36,6 +36,12 @@
> /* Define to 1 if you have the <stdlib.h> header file. */
> #undef HAVE_STDLIB_H
>
> +/* Define to 1 if you have the `strfromf32' function. */
> +#undef HAVE_STRFROMF32
> +
> +/* Define to 1 if you have the `strfromf64' function. */
> +#undef HAVE_STRFROMF64
> +
> /* Define to 1 if you have the <strings.h> header file. */
> #undef HAVE_STRINGS_H
>
> diff --git a/libgcobol/configure b/libgcobol/configure
> index acf78646d5b..23474881f35 100755
> --- a/libgcobol/configure
> +++ b/libgcobol/configure
> @@ -2696,6 +2696,8 @@ as_fn_append ac_func_list " random_r"
> as_fn_append ac_func_list " srandom_r"
> as_fn_append ac_func_list " initstate_r"
> as_fn_append ac_func_list " setstate_r"
> +as_fn_append ac_func_list " strfromf32"
> +as_fn_append ac_func_list " strfromf64"
> # Check that the precious variables saved in the cache have kept the same
> # value.
> ac_cache_corrupted=false
> @@ -11621,7 +11623,7 @@ else
> lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
> lt_status=$lt_dlunknown
> cat > conftest.$ac_ext <<_LT_EOF
> -#line 11624 "configure"
> +#line 11626 "configure"
> #include "confdefs.h"
>
> #if HAVE_DLFCN_H
> @@ -11727,7 +11729,7 @@ else
> lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
> lt_status=$lt_dlunknown
> cat > conftest.$ac_ext <<_LT_EOF
> -#line 11730 "configure"
> +#line 11732 "configure"
> #include "confdefs.h"
>
> #if HAVE_DLFCN_H
> @@ -17699,6 +17701,13 @@ done
>
>
>
> +# These are C23, and might not be available in libc.
> +
> +
> +
> +
> +
> +
> if test "${multilib}" = "yes"; then
> multilib_arg="--enable-multilib"
> else
> diff --git a/libgcobol/configure.ac b/libgcobol/configure.ac
> index 0356f9e9c67..6e1ea3700d0 100644
> --- a/libgcobol/configure.ac
> +++ b/libgcobol/configure.ac
> @@ -198,6 +198,9 @@ AC_SUBST(extra_ldflags_libgcobol)
> # These are GLIBC
> AC_CHECK_FUNCS_ONCE(random_r srandom_r initstate_r setstate_r)
>
> +# These are C23, and might not be available in libc.
> +AC_CHECK_FUNCS_ONCE(strfromf32 strfromf64)
> +
> if test "${multilib}" = "yes"; then
> multilib_arg="--enable-multilib"
> else
> diff --git a/libgcobol/libgcobol.cc b/libgcobol/libgcobol.cc
> index 6aeaaa2c142..85f016e9735 100644
> --- a/libgcobol/libgcobol.cc
> +++ b/libgcobol/libgcobol.cc
> @@ -68,6 +68,30 @@
>
> #include "exceptl.h"
>
> +#if !defined (HAVE_STRFROMF32)
> +# if __FLT_MANT_DIG__ == 24 && __FLT_MAX_EXP__ == 128
> +static int
> +strfromf32 (char *s, size_t n, const char *f, float v)
> +{
> + return snprintf (s, n, f, (double) v);
> +}
> +# else
> +# error "It looks like float on this platform is not IEEE754"
> +# endif
> +#endif
> +
> +#if !defined (HAVE_STRFROMF64)
> +# if __DBL_MANT_DIG__ == 53 && __DBL_MAX_EXP__ == 1024
> +static int
> +strfromf64 (char *s, size_t n, const char *f, double v)
> +{
> + return snprintf (s, n, f, v);
> +}
> +# else
> +# error "It looks like double on this platform is not IEEE754"
> +# endif
> +#endif
> +
> // This couldn't be defined in symbols.h because it conflicts with a LEVEL66
> // in parse.h
> #define LEVEL66 (66)
> --
> 2.39.2 (Apple Git-143)
>