GNU bug report logs - #63006
Time zone database improvements

Previous Next

Package: guix-patches;

Reported by: Leo Famulari <leo <at> famulari.name>

Date: Fri, 21 Apr 2023 21:00:02 UTC

Severity: normal

To reply to this bug, email your comments to 63006 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#63006; Package guix-patches. (Fri, 21 Apr 2023 21:00:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Leo Famulari <leo <at> famulari.name>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Fri, 21 Apr 2023 21:00:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Leo Famulari <leo <at> famulari.name>
To: guix-patches <at> gnu.org
Subject: Time zone database improvements
Date: Fri, 21 Apr 2023 16:59:41 -0400
Currently, almost the entire distro is rebuilt when we need to update
the time zone database, tzdata.

We need to do this a few times a year, and it doesn't make any sense for
packages to keep a static reference to this database which will be out
of date in a few months.

Instead, they should look up the time zones at run-time, which most
programs that actually use time zones do.

These patches start improving the situation.

Libical has committed a fix for this almost 5 years ago, but still
hasn't released it, so we cherry-pick Nix's patch:

https://github.com/libical/libical/issues/350

Go wants to embed a copy of the database in case one cannot be found.  I
don't see why having an incorrect time zone is better than no time
zones, so here's a patch to remove the embedded copy.

And after those two changes, we are able to update tzdata to the current
version.

We have more work to do to remove or replace python-pytz, which
unfortunately contains its own embedded copy of the database and a few
thousand dependents. Luckily, it seems that Python 3.9 has made pytz
obsolete:

https://fedoraproject.org/wiki/Changes/DeprecatePytz#Deprecate_pytz

And there are still some small reverse dependency graphs of packages
that mistakenly depend on tzdata.




Information forwarded to guix-patches <at> gnu.org:
bug#63006; Package guix-patches. (Fri, 21 Apr 2023 21:02:01 GMT) Full text and rfc822 format available.

Message #8 received at 63006 <at> debbugs.gnu.org (full text, mbox):

From: Leo Famulari <leo <at> famulari.name>
To: 63006 <at> debbugs.gnu.org
Subject: [PATCH 1/3] gnu: libical: Find the time zone database in the
 environment.
Date: Fri, 21 Apr 2023 17:01:00 -0400
* gnu/packages/patches/libical-respect-tzdir.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/calendar.scm (libical)[source]: Use it.
[inputs]: Remove tzdata.
---
 gnu/local.mk                                  |  1 +
 gnu/packages/calendar.scm                     |  3 +-
 .../patches/libical-respect-tzdir.patch       | 38 +++++++++++++++++++
 3 files changed, 41 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/libical-respect-tzdir.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index b631fa6d5a..f301c33cfa 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1393,6 +1393,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/libffi-3.3-powerpc-fixes.patch		\
   %D%/packages/patches/libffi-float128-powerpc64le.patch	\
   %D%/packages/patches/libgeotiff-fix-tests-with-proj-9.1.1.patch	\
+  %D%/packages/patches/libical-respect-tzdir.patch		\
   %D%/packages/patches/libobjc2-unbundle-robin-map.patch	\
   %D%/packages/patches/librime-fix-build-with-gcc10.patch	\
   %D%/packages/patches/libvirt-add-install-prefix.patch	\
diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm
index cf4286100d..030f9c52e7 100644
--- a/gnu/packages/calendar.scm
+++ b/gnu/packages/calendar.scm
@@ -127,6 +127,7 @@ (define-public libical
               (uri (string-append
                     "https://github.com/libical/libical/releases/download/v"
                     version "/libical-" version ".tar.gz"))
+              (patches (search-patches "libical-respect-tzdir.patch"))
               (sha256
                (base32
                 "0cqc1wpalxmxjx8dmcaga9w8kd5l7944hqmidz43hifaf7fhaixl"))))
@@ -166,7 +167,7 @@ (define-public libical
            pkg-config
            vala))
     (inputs
-     (list glib libxml2 tzdata))
+     (list glib libxml2))
     (propagated-inputs
      ;; In Requires.private of libical.pc.
      (list icu4c))
diff --git a/gnu/packages/patches/libical-respect-tzdir.patch b/gnu/packages/patches/libical-respect-tzdir.patch
new file mode 100644
index 0000000000..f749addf44
--- /dev/null
+++ b/gnu/packages/patches/libical-respect-tzdir.patch
@@ -0,0 +1,38 @@
+Copied from Nix:
+
+https://github.com/NixOS/nixpkgs/blob/0336bd874374a9e33947ace8a289e5c785e44a19/pkgs/development/libraries/libical/respect-env-tzdir.patch
+
+This functionality will be available in libical 3.1.0, whenever that is
+released:
+
+https://github.com/libical/libical/issues/350
+
+--- a/src/libical/icaltz-util.c
++++ b/src/libical/icaltz-util.c
+@@ -94,9 +94,9 @@
+ static const char *zdir = NULL;
+ 
+ static const char *search_paths[] = {
++    "/etc/zoneinfo",
+     "/usr/share/zoneinfo",
+     "/usr/lib/zoneinfo",
+-    "/etc/zoneinfo",
+     "/usr/share/lib/zoneinfo"
+ };
+ 
+@@ -178,6 +178,15 @@
+     const char *fname = ZONES_TAB_SYSTEM_FILENAME;
+     size_t i, num_search_paths;
+ 
++   const char *env_tzdir = getenv ("TZDIR");
++   if (env_tzdir) {
++       sprintf (file_path, "%s/%s", env_tzdir, fname);
++       if (!access (file_path, F_OK|R_OK)) {
++           zdir = env_tzdir;
++           return;
++       }
++   }
++
+     num_search_paths = sizeof(search_paths) / sizeof(search_paths[0]);
+     for (i = 0; i < num_search_paths; i++) {
+         snprintf(file_path, MAXPATHLEN, "%s/%s", search_paths[i], fname);
-- 
2.39.2





Information forwarded to guix-patches <at> gnu.org:
bug#63006; Package guix-patches. (Fri, 21 Apr 2023 21:02:02 GMT) Full text and rfc822 format available.

Message #11 received at 63006 <at> debbugs.gnu.org (full text, mbox):

From: Leo Famulari <leo <at> famulari.name>
To: 63006 <at> debbugs.gnu.org
Subject: [PATCH 2/3] gnu: Go: Do not depend on tzdata.
Date: Fri, 21 Apr 2023 17:01:01 -0400
* gnu/packages/golang.scm (go-1.4)[inputs]: Remove tzdata.
[arguments]: Adjust accordingly.
(go-1.14, go-1.16, go-1.17)[arguments]: Adjust accordingly.
---
 gnu/packages/golang.scm | 27 +++++----------------------
 1 file changed, 5 insertions(+), 22 deletions(-)

diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 24dae34e20..73c70f55fb 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -139,8 +139,6 @@ (define-public go-1.4
                     (ld (string-append (assoc-ref inputs "libc") "/lib"))
                     (loader (car (find-files ld "^ld-linux.+")))
                     (net-base (assoc-ref inputs "net-base"))
-                    (tzdata-path
-                     (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo"))
                     (output (assoc-ref outputs "out")))
 
                ;; Removing net/ tests, which fail when attempting to access
@@ -195,8 +193,6 @@ (define-public go-1.4
 
                (substitute* "net/lookup_unix.go"
                  (("/etc/protocols") (string-append net-base "/etc/protocols")))
-               (substitute* "time/zoneinfo_unix.go"
-                 (("/usr/share/zoneinfo/") tzdata-path))
                (substitute* (find-files "cmd" "asm.c")
                  (("/lib/ld-linux.*\\.so\\.[0-9]") loader))
                #t)))
@@ -238,8 +234,7 @@ (define-public go-1.4
                (copy-recursively "../" output)
                #t))))))
     (inputs
-     `(("tzdata" ,tzdata)
-       ("pcre" ,pcre)
+     `(("pcre" ,pcre)
        ("gcc:lib" ,(canonical-package gcc) "lib")))
     (native-inputs
      (list pkg-config which net-base perl))
@@ -285,8 +280,6 @@ (define-public go-1.14
                       (loader (car (append (find-files ld "^ld-linux.+")
                                            (find-files ld "^ld(64)?\\.so.+"))))
                       (net-base (assoc-ref inputs "net-base"))
-                      (tzdata-path
-                       (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo"))
                       (output (assoc-ref outputs "out")))
 
                  ;; Having the patch in the 'patches' field of <origin> breaks
@@ -400,8 +393,6 @@ (define-public go-1.14
                    (("/etc/protocols") (string-append net-base "/etc/protocols")))
                  (substitute* "net/port_unix.go"
                    (("/etc/services") (string-append net-base "/etc/services")))
-                 (substitute* "time/zoneinfo_unix.go"
-                   (("/usr/share/zoneinfo/") tzdata-path))
                  (substitute* (find-files "cmd" "\\.go")
                    (("/lib(64)?/ld-linux.*\\.so\\.[0-9]") loader))
                  #t)))
@@ -497,9 +488,7 @@ (define-public go-1.16
            (replace 'prebuild
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (let* ((gcclib (string-append (assoc-ref inputs "gcc:lib") "/lib"))
-                      (net-base (assoc-ref inputs "net-base"))
-                      (tzdata-path
-                       (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo")))
+                      (net-base (assoc-ref inputs "net-base")))
 
                  ;; Having the patch in the 'patches' field of <origin> breaks
                  ;; the 'TestServeContent' test due to the fact that
@@ -591,9 +580,7 @@ (define-public go-1.16
                  (substitute* "net/lookup_unix.go"
                    (("/etc/protocols") (string-append net-base "/etc/protocols")))
                  (substitute* "net/port_unix.go"
-                   (("/etc/services") (string-append net-base "/etc/services")))
-                 (substitute* "time/zoneinfo_unix.go"
-                   (("/usr/share/zoneinfo/") tzdata-path)))))
+                   (("/etc/services") (string-append net-base "/etc/services"))))))
            (replace 'build
              (lambda* (#:key inputs outputs (parallel-build? #t)
                        #:allow-other-keys)
@@ -665,9 +652,7 @@ (define-public go-1.17
                (setenv "GOCACHE" "/tmp/go-cache"))))
          (add-after 'unpack 'patch-source
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((net-base (assoc-ref inputs "net-base"))
-                    (tzdata-path (string-append (assoc-ref inputs "tzdata")
-                                                "/share/zoneinfo")))
+             (let* ((net-base (assoc-ref inputs "net-base")))
                ;; XXX: Remove when #49729 is merged?
                (for-each make-file-writable (find-files "src"))
 
@@ -696,9 +681,7 @@ (define-public go-1.17
                   (string-append net-base "/etc/protocols")))
                (substitute* "src/net/port_unix.go"
                  (("/etc/services")
-                  (string-append net-base "/etc/services")))
-               (substitute* "src/time/zoneinfo_unix.go"
-                 (("/usr/share/zoneinfo/") tzdata-path)))))
+                  (string-append net-base "/etc/services"))))))
          ;; Keep this synchronized with the package inputs.
          ;; Also keep syncthonized with later versions of go.
          ,@(if (or (target-arm?) (target-ppc64le?))
-- 
2.39.2





Information forwarded to guix-patches <at> gnu.org:
bug#63006; Package guix-patches. (Fri, 21 Apr 2023 21:02:02 GMT) Full text and rfc822 format available.

Message #14 received at 63006 <at> debbugs.gnu.org (full text, mbox):

From: Leo Famulari <leo <at> famulari.name>
To: 63006 <at> debbugs.gnu.org
Subject: [PATCH 3/3] gnu: tzdata: Update to 2023c.
Date: Fri, 21 Apr 2023 17:01:02 -0400
* gnu/packages/base.scm (tzdata): Update to 2023c.
(tzdata-for-tests): Pin at version 2022a and hide.
* gnu/packages/time.scm (python-pytz): Update to 2023.3.
---
 gnu/packages/base.scm | 19 +++++++++++++++----
 gnu/packages/time.scm |  4 ++--
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index fa5f1ef32b..2aef52ddfe 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -1358,7 +1358,7 @@ (define-public tzdata
     (name "tzdata")
     ;; This package should be kept in sync with python-pytz in (gnu packages
     ;; time).
-    (version "2022a")
+    (version "2023c")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -1366,7 +1366,7 @@ (define-public tzdata
                    version ".tar.gz"))
              (sha256
               (base32
-               "0r0nhwpk9nyxj5kkvjy58nr5d85568m04dcb69c4y3zmykczyzzg"))))
+               "0p4nvp5bdxxdqh269nvvcfrpycbbfwm31al5whwbpsaa3dfhnl9z"))))
     (build-system gnu-build-system)
     (arguments
      (list #:tests? #f
@@ -1434,7 +1434,7 @@ (define-public tzdata
                           version ".tar.gz"))
                     (sha256
                      (base32
-                      "1iysv8fdkm79k8wh8jizmjmq075q4qjhk090vxjy57my6dz5wmzq")))))
+                      "1rqln88ki0jagi372nqyn7bs03rf2l33081sy2835mwsn4mpzla6")))))
     (home-page "https://www.iana.org/time-zones")
     (synopsis "Database of current and historical time zones")
     (description "The Time Zone Database (often called tz or zoneinfo)
@@ -1452,7 +1452,18 @@ (define-public tzdata
 ;;;
 ;;; Please make this a hidden-package if it is different from the primary tzdata
 ;;; package.
-(define-public tzdata-for-tests tzdata)
+(define-public tzdata-for-tests ; TODO rename to tzdata/pinned
+  (hidden-package
+    (package (inherit tzdata)
+      (version "2022a")
+      (source (origin
+                 (method url-fetch)
+                 (uri (string-append
+                        "https://data.iana.org/time-zones/releases/tzdata"
+                        version ".tar.gz"))
+                 (sha256
+                   (base32
+                     "0r0nhwpk9nyxj5kkvjy58nr5d85568m04dcb69c4y3zmykczyzzg")))))))
 
 (define-public libiconv
   (package
diff --git a/gnu/packages/time.scm b/gnu/packages/time.scm
index c0bcb848b3..9416199015 100644
--- a/gnu/packages/time.scm
+++ b/gnu/packages/time.scm
@@ -124,14 +124,14 @@ (define-public python-pytz
   (package
     (name "python-pytz")
     ;; This package should be kept in sync with tzdata in (gnu packages base).
-    (version "2022.1")
+    (version "2023.3")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "pytz" version))
       (sha256
        (base32
-        "19ya5sh7if819flgmszz585glailhi7rr8frng03n5m8wqphwxhy"))))
+        "1265s3my0r1d841w3sh07ngvaanqhw1nvviqafsiy6c9n6fy530x"))))
     (build-system python-build-system)
     (home-page "http://pythonhosted.org/pytz")
     (synopsis "Python timezone library")
-- 
2.39.2





Information forwarded to guix-patches <at> gnu.org:
bug#63006; Package guix-patches. (Sun, 30 Apr 2023 21:02:02 GMT) Full text and rfc822 format available.

Message #17 received at 63006 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Leo Famulari <leo <at> famulari.name>
Cc: 63006 <at> debbugs.gnu.org
Subject: Re: bug#63006: Time zone database improvements
Date: Sun, 30 Apr 2023 23:00:55 +0200
Hello!

Leo Famulari <leo <at> famulari.name> skribis:

> Currently, almost the entire distro is rebuilt when we need to update
> the time zone database, tzdata.
>
> We need to do this a few times a year, and it doesn't make any sense for
> packages to keep a static reference to this database which will be out
> of date in a few months.
>
> Instead, they should look up the time zones at run-time, which most
> programs that actually use time zones do.

Most programs behave fine though, right?  In particular, glibc honors
$TZDIR and we set TZDIR to the latest tzdata in (gnu system).

> These patches start improving the situation.
>
> Libical has committed a fix for this almost 5 years ago, but still
> hasn't released it, so we cherry-pick Nix's patch:
>
> https://github.com/libical/libical/issues/350

LGTM!

> Go wants to embed a copy of the database in case one cannot be found.  I
> don't see why having an incorrect time zone is better than no time
> zones, so here's a patch to remove the embedded copy.

Sounds good, but do we need to build it in a branch first?

> We have more work to do to remove or replace python-pytz, which
> unfortunately contains its own embedded copy of the database and a few
> thousand dependents. Luckily, it seems that Python 3.9 has made pytz
> obsolete:
>
> https://fedoraproject.org/wiki/Changes/DeprecatePytz#Deprecate_pytz

OK.

Thanks!

Ludo’.




This bug report was last modified 359 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.