Subject: [bug#48165] [PATCH] nls: Do not update po files on first make invocation.

From: Julien Lepiller <[email-masked]>
Date: Sun, 2 May 2021 22:23:05 +0200

Hi Guix,

As you probably know, after the first make in a clean checkout of the
guix repository, po files are dirty and we advertise to run "git
checkout po" to get them clean again. This was caused by the gettext
generated makefile that wanted to build the mo (compiled po) files, and
these po files depend on the pot that needs to be generated.

In newer versions of gettext (at least 0.19.1 from 4 years ago), there
is an option, PO_DEPENDS_ON_POT that I set to "no", so this patch
updates the minimal gettext version to 0.19.1 and makes use of that
variable, that removes the dependency from the po files to the pot file.

This means that when make tries to generate the mo files, it can do so
immediately, without needing to generate the pot file nor update the po
files that depended on the pot.

As this patch updates the minimal requirement for gettext to 0.19.1,
I'm not sure what's the impact. This is a version from 4 years ago
(0.18.1 was from 6 years ago). We currently have gettext 0.20.1, and
debian jessie has 0.19.3, so I don't think this change will negatively
affect our users:

- developpers should already use guix environment guix which provides a
  good version.
- packagers of guix on other distros might have a harder time, but even
  debian seems to have a recent enough version

WDYT?
>From cc0549322000a319ecdb82b6cbcfd209a134e507 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Sun, 2 May 2021 22:12:16 +0200
Subject: [PATCH] nls: Do not update po files on first make invocation.

We need to update the minimal gettext version to take advantage of new
features.  Before this patch, the first make invocation would modify
po/guix and po/packages po files, and we advised to run `git checkout
po` to clean the changes.

* configure.ac (AM_GNU_GETTEXT_VERSION): Update to 0.19.1.
* po/guix/Makevars: Set PO_DEPENDS_ON_POT to no.
* po/packages/Makevars: Set PO_DEPENDS_ON_POT to no.
---
 configure.ac         | 2 +-
 po/guix/Makevars     | 5 +++++
 po/packages/Makevars | 5 +++++
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index e5d339f6ec..c64993f4a7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -21,7 +21,7 @@ dnl For the C++ code.  This must be used early.
 AC_USE_SYSTEM_EXTENSIONS
 
 AM_GNU_GETTEXT([external])
-AM_GNU_GETTEXT_VERSION([0.18.1])
+AM_GNU_GETTEXT_VERSION([0.19.1])
 
 GUIX_SYSTEM_TYPE
 GUIX_ASSERT_SUPPORTED_SYSTEM
diff --git a/po/guix/Makevars b/po/guix/Makevars
index 363bf98dfd..88a4e8c7bc 100644
--- a/po/guix/Makevars
+++ b/po/guix/Makevars
@@ -26,3 +26,8 @@ EXTRA_LOCALE_CATEGORIES =
 # "make distcheck -j4".
 # See <https://lists.gnu.org/archive/html/bug-gettext/2014-08/msg00005.html>.
 DIST_DEPENDS_ON_UPDATE_PO = no
+
+# Ignore the timestamp of the .pot file, as .po files are updated by
+# `make download-po` only. This ensures po files are not modified on the
+# first `make` invocation.
+PO_DEPENDS_ON_POT = no
diff --git a/po/packages/Makevars b/po/packages/Makevars
index 39366fbee9..4cdb98d8fe 100644
--- a/po/packages/Makevars
+++ b/po/packages/Makevars
@@ -22,3 +22,8 @@ EXTRA_LOCALE_CATEGORIES =
 # "make distcheck -j4".
 # See <https://lists.gnu.org/archive/html/bug-gettext/2014-08/msg00005.html>.
 DIST_DEPENDS_ON_UPDATE_PO = no
+
+# Ignore the timestamp of the .pot file, as .po files are updated by
+# `make download-po` only. This ensures po files are not modified on the
+# first `make` invocation.
+PO_DEPENDS_ON_POT = no
-- 
2.31.1