[PATCH] libstdc++: Use #embed for static tzdata.zi file

Tomasz Kaminski tkaminsk@redhat.com
Wed May 20 11:10:01 GMT 2026


On Tue, May 19, 2026 at 10:33 PM Jonathan Wakely <jwakely@redhat.com> 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__(' > $@.tmp
> -       cat $^ >> $@.tmp
> -       echo ')__libstdcxx__";' >> $@.tmp
> -       mv $@.tmp $@
> -
> -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.
>  @ENABLE_DUAL_ABI_TRUE@cow-string-inst.lo cow-string-inst.o:
> string-inst.cc
>
> -@USE_STATIC_TZDATA_TRUE@tzdata.zi.h: $(top_srcdir)/src/c++20/tzdata.zi
> -@USE_STATIC_TZDATA_TRUE@       echo 'static const char tzdata_chars[] =
> R"__libstdcxx__(' > $@.tmp
> -@USE_STATIC_TZDATA_TRUE@       cat $^ >> $@.tmp
> -@USE_STATIC_TZDATA_TRUE@       echo ')__libstdcxx__";' >> $@.tmp
> -@USE_STATIC_TZDATA_TRUE@       mv $@.tmp $@
> -
> -@USE_STATIC_TZDATA_TRUE@tzdb.lo: tzdb.cc tzdata.zi.h
> -@USE_STATIC_TZDATA_TRUE@       $(LTCXXCOMPILE) -I. -c $<
> -@USE_STATIC_TZDATA_TRUE@tzdb.o: 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20260520/1753d312/attachment-0001.htm>


More information about the Libstdc++ mailing list