diff mbox series

libstdc++-v3: Handle iconv as optional for newlib builds [PR116362]

Message ID 20240814150115.303572043B@pchp3.se.axis.com
State New
Headers show
Series libstdc++-v3: Handle iconv as optional for newlib builds [PR116362] | expand

Commit Message

Hans-Peter Nilsson Aug. 14, 2024, 3:01 p.m. UTC
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?

-- >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(-)

Comments

Jonathan Wakely Aug. 15, 2024, 8:10 a.m. UTC | #1
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 mbox series

Patch

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