Build: Update po/*.po files only when needed

When po/xz.pot doesn't exist, running "make" or "make dist" will
create it. Then the .po files will be updated but only if they
actually would change more than the POT-Creation-Date line.
Then the .gmo files would be generated from the .po files.
This is the case before and after this commit.

However, "make dist" and thus "make mydist" did a forced update
to the files, updating them even if the only change was the
POT-Creation-Date line. This had pros and cons: It made it clear
that the .po file really is in sync with the recent strings in
the package. On the other hand, it added noise in form of changed
files in the source tree and distribution tarballs. It can be
ignored with something like "diff -I'^"POT-Creation-Date: '" but
it's still a minor annoyance *if* there's not enough value in
having the most recent timestamp.

Setting DIST_DEPENDS_ON_UPDATE_PO = no means that such forced
update won't happen in "make dist" anymore. However, the "mydist"
target will use xz.pot-update target which is the same target that
is run when xz.pot doesn't exist at all yet. Thus "mydist" will
ensure that the translations are up to date, without noise from
changes that would affect only the POT-Creation-Date line.

Note that po4a always uses msgmerge with --update, so POT-Creation-Date
in the man page translations is never the only change in .po files.
In that sense this commit makes the message translations behave more
similarly to the man page translations.

Distribution tarballs will still have non-reproducible POT-Creation-Date
in po/xz.pot and po4a/xz-man.pot but those are just two files. Even they
could be made reproducible from a Git timestamp if desired.

(cherry picked from commit 9284f1aea3)
This commit is contained in:
Lasse Collin 2024-05-29 16:33:24 +03:00
parent 09daebd66b
commit 33b8a85fac
2 changed files with 7 additions and 2 deletions

View File

@ -90,10 +90,11 @@ dist-hook:
fi fi
# This works with GNU tar and gives cleaner package than normal 'make dist'. # This works with GNU tar and gives cleaner package than normal 'make dist'.
# This also ensures that the man page translations are up to date (dist-hook # This also ensures that the translations are up to date (dist-hook
# would be too late for that). # would be too late for that).
mydist: mydist:
$(SHELL) "$(srcdir)/src/liblzma/validate_map.sh" $(SHELL) "$(srcdir)/src/liblzma/validate_map.sh"
cd po && $(MAKE) xz.pot-update
cd "$(srcdir)/po4a" && $(SHELL) update-po cd "$(srcdir)/po4a" && $(SHELL) update-po
VERSION=$(VERSION); \ VERSION=$(VERSION); \
if test -d "$(srcdir)/.git" && type git > /dev/null 2>&1; then \ if test -d "$(srcdir)/.git" && type git > /dev/null 2>&1; then \

View File

@ -84,4 +84,8 @@ PO_DEPENDS_ON_POT = yes
# regenerate PO files on "make dist". Possible values are "yes" and # regenerate PO files on "make dist". Possible values are "yes" and
# "no". Set this to no if the POT file and PO files are maintained # "no". Set this to no if the POT file and PO files are maintained
# externally. # externally.
DIST_DEPENDS_ON_UPDATE_PO = yes #
# NOTE: The the custom "mydist" target in ../Makefile.am updates xz.pot.
# An updated xz.pot will cause the .po files to be updated too but
# only when updating would change more than the POT-Creation-Date line.
DIST_DEPENDS_ON_UPDATE_PO = no