> -----Original Message----- > From: Iain Sandoe <iains....@gmail.com> > Sent: Wednesday, April 2, 2025 15:05 > To: Robert Dubner <rdub...@symas.com> > Cc: GCC Patches <gcc-patches@gcc.gnu.org>; James K. Lowden > <jklow...@cobolworx.com> > Subject: Re: [ping][PATCH] libgcobol: Provide fallbacks for C32 > strfromf32/64 [PR119296]. > > > > > On 2 Apr 2025, at 20:02, Robert Dubner <rdub...@symas.com> wrote: > > > > Since you say it tests okay, I say it's "Okay for trunk". > > thanks. > > > > I am new to this, as you know, and I am still trying to figure out how > to > > make all of this work. Nor have Jim and I figured out how to handle our > > joint responsibility. > > understood.. > > > > Hence delays. > > … will try not to hassle too much :)
Go ahead and hassle. As the old saying goes: If I couldn't take a joke, I never should have signed up. > > > > > > >> -----Original Message----- > >> From: Iain Sandoe <iains....@gmail.com> > >> Sent: Wednesday, April 2, 2025 14:24 > >> To: GCC Patches <gcc-patches@gcc.gnu.org> > >> Cc: James K. Lowden <jklow...@cobolworx.com>; Robert Dubner > >> <rdub...@symas.com> > >> Subject: [ping][PATCH] libgcobol: Provide fallbacks for C32 > > strfromf32/64 > >> [PR119296]. > >> > >> 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) > >>> > >