Message ID | 20240814150115.303572043B@pchp3.se.axis.com |
---|---|
State | New |
Headers | show |
Series | libstdc++-v3: Handle iconv as optional for newlib builds [PR116362] | expand |
On Wed, 14 Aug 2024, 16:01 Hans-Peter Nilsson, <hp@axis.com> wrote: > Regtested cris-elf, both an older newlib (FWIW: before the > getentropy issue that I hoped to investigate before > summer...maybe next summer) and a fresh checkout, both > with/without --enable-newlib-iconv. I'm pleasantly > surprised that it works (there are no regressions) with > newlib iconv enabled compared to without: I had to > double-check the different libstdc++-v3/config.log that it > actually *was* enabled. > > Ok to commit? > Nice! OK for trunk, thanks. > -- >8 -- > Support for iconv in newlib seems to have been always > assumed present by libstdc++-v3, but is default off. > > Though, it hasn't been used before recent libstdc++ changes > that actually call iconv functions. This now leads to > failures exposed by running the test-suite, unless the > newlib being used has been explicitly configured with > --enable-newlib-iconv. When failing, there are undefined > references to iconv, iconv_open or iconv_close for multiple > tests. > > Thankfully there's a macro in newlib.h that we can check to > detect presence of iconv support for the newlib build that's > used. > > libstdc++-v3: > PR libstdc++/116362 > * configure.ac: Check newlib configuration whether iconv is > enabled. > * configure: Regenerate. > --- > libstdc++-v3/configure | 26 +++++++++++++++++++++++++- > libstdc++-v3/configure.ac | 10 +++++++++- > 2 files changed, 34 insertions(+), 2 deletions(-) > > diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac > index ccb24a82be79..4049f54bd5a3 100644 > --- a/libstdc++-v3/configure.ac > +++ b/libstdc++-v3/configure.ac > @@ -376,7 +376,15 @@ dnl # rather than hardcoding that information. > frexpl hypotl ldexpl log10l logl modfl powl sinhl sinl sqrtl > tanhl tanl]) > > - AC_DEFINE(HAVE_ICONV) > + # Support for iconv in newlib is configurable. > + AC_TRY_COMPILE([#include <newlib.h>], [ > + #ifndef _ICONV_ENABLED > + #error > + #endif], [ac_newlib_iconv_enabled=yes], > [ac_newlib_iconv_enabled=no]) > + if test "$ac_newlib_iconv_enabled" = yes; then > + AC_DEFINE(HAVE_ICONV) > + fi > + > AC_DEFINE(HAVE_MEMALIGN) > > case "${target}" in > diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure > index fe525308ae28..305675eaa1e1 100755 > --- a/libstdc++-v3/configure > +++ b/libstdc++-v3/configure > @@ -28571,7 +28571,31 @@ _ACEOF > > > > - $as_echo "#define HAVE_ICONV 1" >>confdefs.h > + # Support for iconv in newlib is configurable. > + cat confdefs.h - <<_ACEOF >conftest.$ac_ext > +/* end confdefs.h. */ > +#include <newlib.h> > +int > +main () > +{ > + > + #ifndef _ICONV_ENABLED > + #error > + #endif > + ; > + return 0; > +} > +_ACEOF > +if ac_fn_c_try_compile "$LINENO"; then : > + ac_newlib_iconv_enabled=yes > +else > + ac_newlib_iconv_enabled=no > +fi > +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext > + if test "$ac_newlib_iconv_enabled" = yes; then > + $as_echo "#define HAVE_ICONV 1" >>confdefs.h > + > + fi > > $as_echo "#define HAVE_MEMALIGN 1" >>confdefs.h > > -- > 2.30.2 > >
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac index ccb24a82be79..4049f54bd5a3 100644 --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -376,7 +376,15 @@ dnl # rather than hardcoding that information. frexpl hypotl ldexpl log10l logl modfl powl sinhl sinl sqrtl tanhl tanl]) - AC_DEFINE(HAVE_ICONV) + # Support for iconv in newlib is configurable. + AC_TRY_COMPILE([#include <newlib.h>], [ + #ifndef _ICONV_ENABLED + #error + #endif], [ac_newlib_iconv_enabled=yes], [ac_newlib_iconv_enabled=no]) + if test "$ac_newlib_iconv_enabled" = yes; then + AC_DEFINE(HAVE_ICONV) + fi + AC_DEFINE(HAVE_MEMALIGN) case "${target}" in diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index fe525308ae28..305675eaa1e1 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -28571,7 +28571,31 @@ _ACEOF - $as_echo "#define HAVE_ICONV 1" >>confdefs.h + # Support for iconv in newlib is configurable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <newlib.h> +int +main () +{ + + #ifndef _ICONV_ENABLED + #error + #endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_newlib_iconv_enabled=yes +else + ac_newlib_iconv_enabled=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test "$ac_newlib_iconv_enabled" = yes; then + $as_echo "#define HAVE_ICONV 1" >>confdefs.h + + fi $as_echo "#define HAVE_MEMALIGN 1" >>confdefs.h