On Tue, May 19, 2026 at 10:33 PM Jonathan Wakely <[email protected]> wrote:

> This doesn't make much difference to the time taken to compile tzdb.cc
> but it is simpler and more maintainable than generating a header in the
> makefile.
>
> libstdc++-v3/ChangeLog:
>
>         * src/c++20/Makefile.am [USE_STATIC_TZDATA]: Remove targets for
>         tzdata.zi.h, tzdb.lo and tzdb.o.
>         * src/c++20/Makefile.in: Regenerate.
>         * src/c++20/tzdb.cc (tzdata_chars): Use #embed.
>         (tzdata_stream::ispanbuf): Remove adjustment for extra newline
>         inserted by the Makefile recipe for tzdata.zi.h.
> ---
>
> Tested aarch64-linux.
>
Looks much simpler indeed. Thanks.

>
>  libstdc++-v3/src/c++20/Makefile.am | 13 -------------
>  libstdc++-v3/src/c++20/Makefile.in | 11 -----------
>  libstdc++-v3/src/c++20/tzdb.cc     |  8 +++++---
>  3 files changed, 5 insertions(+), 27 deletions(-)
>
> diff --git a/libstdc++-v3/src/c++20/Makefile.am
> b/libstdc++-v3/src/c++20/Makefile.am
> index 5182d51b9faa..cfd09bddffcb 100644
> --- a/libstdc++-v3/src/c++20/Makefile.am
> +++ b/libstdc++-v3/src/c++20/Makefile.am
> @@ -54,19 +54,6 @@ if ENABLE_DUAL_ABI
>  cow-string-inst.lo cow-string-inst.o: string-inst.cc
>  endif
>
> -if USE_STATIC_TZDATA
> -tzdata.zi.h: $(top_srcdir)/src/c++20/tzdata.zi
> -       echo 'static const char tzdata_chars[] = R"__libstdcxx__(' > [email protected]
> -       cat $^ >> [email protected]
> -       echo ')__libstdcxx__";' >> [email protected]
> -       mv [email protected] $@
> -
> -tzdb.lo: tzdb.cc tzdata.zi.h
> -       $(LTCXXCOMPILE) -I. -c $<
> -tzdb.o: tzdb.cc tzdata.zi.h
> -       $(CXXCOMPILE) -I. -c $<
> -endif
> -
>  # This needs access to std::text_encoding and to the internals of
> std::locale.
>  format.lo: format.cc
>         $(LTCXXCOMPILE) -std=gnu++26 -fno-access-control -c $<
> diff --git a/libstdc++-v3/src/c++20/Makefile.in
> b/libstdc++-v3/src/c++20/Makefile.in
> index 33e3ba21b522..067419d2e485 100644
> --- a/libstdc++-v3/src/c++20/Makefile.in
> +++ b/libstdc++-v3/src/c++20/Makefile.in
> @@ -758,17 +758,6 @@ vpath % $(top_srcdir)/src/c++20
>  # These files should be rebuilt if the .cc prerequisite changes.
>  @[email protected] cow-string-inst.o:
> string-inst.cc
>
> -@[email protected]: $(top_srcdir)/src/c++20/tzdata.zi
> -@USE_STATIC_TZDATA_TRUE@       echo 'static const char tzdata_chars[] =
> R"__libstdcxx__(' > [email protected]
> -@USE_STATIC_TZDATA_TRUE@       cat $^ >> [email protected]
> -@USE_STATIC_TZDATA_TRUE@       echo ')__libstdcxx__";' >> [email protected]
> -@USE_STATIC_TZDATA_TRUE@       mv [email protected] $@
> -
> -@[email protected]: tzdb.cc tzdata.zi.h
> -@USE_STATIC_TZDATA_TRUE@       $(LTCXXCOMPILE) -I. -c $<
> -@[email protected]: tzdb.cc tzdata.zi.h
> -@USE_STATIC_TZDATA_TRUE@       $(CXXCOMPILE) -I. -c $<
> -
>  # This needs access to std::text_encoding and to the internals of
> std::locale.
>  format.lo: format.cc
>         $(LTCXXCOMPILE) -std=gnu++26 -fno-access-control -c $<
> diff --git a/libstdc++-v3/src/c++20/tzdb.cc
> b/libstdc++-v3/src/c++20/tzdb.cc
> index 183a0c61a616..5793155b6d89 100644
> --- a/libstdc++-v3/src/c++20/tzdb.cc
> +++ b/libstdc++-v3/src/c++20/tzdb.cc
> @@ -1208,8 +1208,10 @@ namespace std::chrono
>      const string_view leaps_file = "/leapseconds";
>
>  #ifdef _GLIBCXX_STATIC_TZDATA
> -// Static copy of tzdata.zi embedded in the library as tzdata_chars[]
> -#include "tzdata.zi.h"
> +// Static copy of tzdata.zi embedded in the library.
> +static constexpr char tzdata_chars[] = {
> +#embed "tzdata.zi"
> +};
>  #endif
>
>      // An istream type that can read from a file or from a string.
> @@ -1222,7 +1224,7 @@ namespace std::chrono
>         {
>  #ifdef _GLIBCXX_STATIC_TZDATA
>           char* p = const_cast<char*>(tzdata_chars);
> -         this->setg(p, p, p + std::size(tzdata_chars) - 1);
> +         this->setg(p, p, p + std::size(tzdata_chars));
>  #endif
>         }
>
> --
> 2.54.0
>
>

Reply via email to