[PATCH] newlib: filter out versions from newlib.h to simplify autoreconf

Jeff Johnston jjohnstn@redhat.com
Wed Oct 25 23:14:20 GMT 2023


Works well.  Feel free to push.

-- Jeff J.

On Sun, Oct 15, 2023 at 5:32 AM Mike Frysinger <vapier@gentoo.org> wrote:

> We've been manually editing newlib.hin after generating it with
> autoheader to drop the version defines that we keep in the separate
> _newlib_version.h header.  This is confusing for people, and is an
> easy source of mistakes/errors.
>
> Since we're already running sed on newlib.h during configure to
> filter out defines we don't want to expose, add the version macros
> there too.  This way we don't have to manually edit newlib.hin.
>
> This simplifies the autoreconf step in exchange for a slightly more
> complicated configure+sed step, but seems worth the trade-off.
> ---
>  newlib/configure    |  2 +-
>  newlib/configure.ac |  5 ++++-
>  newlib/newlib.hin   | 12 ++++++++++++
>  3 files changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/newlib/configure b/newlib/configure
> index 0585e0ee8b33..b21d9bf45810 100755
> --- a/newlib/configure
> +++ b/newlib/configure
> @@ -9269,7 +9269,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
>
>
>    case $ac_file$ac_mode in
> -    "newlib.h":H) sed -i.tmp -e '/^#define [^_]/d' -e '/^\/\* #undef
> [^_]/d' newlib.h && rm -f newlib.h.tmp ;;
> +    "newlib.h":H) sed -i.tmp -E -e '/^#define [^_]/d' -e '/^\/\* #undef
> [^_]/d' -e '/_NEWLIB_VERSION|__NEWLIB_(MINOR|PATCHLEVEL)__|__NEWLIB__/d'
> newlib.h && rm -f newlib.h.tmp ;;
>      "default-1":C)
>  # Only add multilib support code if we just rebuilt the top-level
>  # Makefile.
> diff --git a/newlib/configure.ac b/newlib/configure.ac
> index 94242c082d20..55e5a944689f 100644
> --- a/newlib/configure.ac
> +++ b/newlib/configure.ac
> @@ -8,8 +8,11 @@ dnl Since we can't control what defines autoheader picks
> up (various autoconf
>  dnl macros will add their own), filter out all the ones w/out a _
> prefix.  All
>  dnl the ones we want to export use a _ prefix, and all the rest we don't
> want
>  dnl to export as it'll pollute the namespace of newlib users.
> +dnl We also filter out version defines that we want in _newlib_version.h.
>  dnl NB: newlib.h must be the first AC_CONFIG_HEADERS call for autoheader.
> -AC_CONFIG_HEADERS([newlib.h:newlib.hin], [sed -i.tmp -e '/^#define
> [^_]/d' -e '/^\/\* #undef [^_]/d' newlib.h && rm -f newlib.h.tmp])
> +AC_CONFIG_HEADERS(
> +  [newlib.h:newlib.hin],
> +  [sed -i.tmp -E -e '/^#define [^_]/d' -e '/^\/\* #undef [^_]/d' -e
> '/_NEWLIB_VERSION|__NEWLIB_(MINOR|PATCHLEVEL)__|__NEWLIB__/d' newlib.h &&
> rm -f newlib.h.tmp])
>  AH_TOP([/* NB: The contents are filtered before being installed. */
>
>  #ifndef __NEWLIB_H__
> diff --git a/newlib/newlib.hin b/newlib/newlib.hin
> index e87a5eabbb24..8318469400b0 100644
> --- a/newlib/newlib.hin
> +++ b/newlib/newlib.hin
> @@ -375,6 +375,9 @@
>  /* nano version of malloc is used. */
>  #undef _NANO_MALLOC
>
> +/* The newlib version in string format. */
> +#undef _NEWLIB_VERSION
> +
>  /* Verify _REENT_CHECK macros allocate memory successfully. */
>  #undef _REENT_CHECK_VERIFY
>
> @@ -422,4 +425,13 @@
>  /* Define if wide char orientation is supported. */
>  #undef _WIDE_ORIENT
>
> +/* The newlib minor version number. */
> +#undef __NEWLIB_MINOR__
> +
> +/* The newlib patch level. */
> +#undef __NEWLIB_PATCHLEVEL__
> +
> +/* The newlib major version number. */
> +#undef __NEWLIB__
> +
>  #endif /* !__NEWLIB_H__ */
> --
> 2.42.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://sourceware.org/pipermail/newlib/attachments/20231025/8bb8f9db/attachment.htm>


More information about the Newlib mailing list