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