build: don't "update-po" during make dist

Instead, hack gettext's Makefile.

gettext has an issue with parallel make. See [1] and [2].
Reproduce with:

  git reset --hard &&
    git clean -fdx &&
    NOCONFIGURE=yes ./autogen.sh &&
    ./configure --enable-gtk-doc --enable-introspection &&
    make -j distcheck V=1

We worked around this by setting "DIST_DEPENDS_ON_UPDATE_PO = yes",
however that (obviously) results in regenerating source files during
dist. "Source files" in the sense that the po files are commited to git
and get distributed in the release. Doing this is very ugly.

In particular it's ugly, because `make -C po update-po` is not reproducible
and the output depends on the current time (*had one job*).
Otherwise, we could just regenerate the files before doing a release.

This means, running "release.sh" script ends up with a dirty tree
afterwards. Also, the distributed po files are not the ones from the source
tree when we did the release. Also, since "release.sh rc1" does two distributions
(once for the rc1 and once for the next devel snapshot), the commit for the
second distribution will have a large diff for the po files.

This reverts commit 978d8eb699 ('po: make dist depend on update-po')
and hacks around the problem.

[1] https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1094#note_1435313
[2] https://lists.gnu.org/archive/html/bug-gettext/2022-06/msg00022.html

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1405
This commit is contained in:
Thomas Haller 2022-09-29 11:21:55 +02:00
parent 991481a568
commit 7ee0da3eaf
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
3 changed files with 17 additions and 4 deletions

View file

@ -20,9 +20,6 @@ fi
do_clean() {
git clean -fdx
# "make -C update-po", run on "make dist" has a silly habit of
# modifying files in-tree. Lets undo that.
git checkout -- po/
git status
git diff --exit-code

View file

@ -168,6 +168,22 @@ if !BUILD_DOCS
dist_configure_check += dist-configure-check
endif
# Gettext's Makefile has a race with parallel builds during dist.
# Hack around that.
# See also:
# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1094#note_1435313
# https://lists.gnu.org/archive/html/bug-gettext/2022-06/msg00022.html
# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1405
po/.Makefile.patched:
sed -i \
's#^dist2: \$$(srcdir)/stamp-po \$$(DISTFILES)#dist2: \$$(srcdir)/stamp-po\n\t\$$(MAKE) \$$(DISTFILES)#' \
"$(builddir)/po/Makefile" && \
touch "$(builddir)/po/.Makefile.patched"
DISTCLEANFILES += po/.Makefile.patched
dist: po/.Makefile.patched
dist: $(dist_configure_check) $(dist_dependencies)
###############################################################################

View file

@ -75,4 +75,4 @@ PO_DEPENDS_ON_POT = no
# 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
# externally.
DIST_DEPENDS_ON_UPDATE_PO = yes
DIST_DEPENDS_ON_UPDATE_PO = no