From 0d353b06ec6571972d2e8a3e3a3f0b27aa950e1c Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Thu, 29 Apr 2021 09:45:39 -0400 Subject: build: Make doc-po-update and doc-pot-update targets idempotent. It used to be that the running the doc-po-update and doc-pot-update targets would redo the same work on every run. This change splits the problem in smaller chunks and specifies build dependencies in a way that outputs only get rebuilt when their inputs changed. * po/doc/local.mk (DOC_PO_FILES): Harmonize escapes. (POT_OPTIONS): Re-indent uniformly. (doc-po-update-%, doc-po-update-cookbook-%): Re-implement with... (make-update-po-files-rule): ... this new function. (TMP_POT_FILES): Remove variable. (%D%/%.pot, %D%/guix-manual.pot): New pattern rules. (doc-pot-update, doc-po-update): Adjust prerequisites accordingly. --- po/doc/local.mk | 108 ++++++++++++++++++-------------------------------------- 1 file changed, 35 insertions(+), 73 deletions(-) diff --git a/po/doc/local.mk b/po/doc/local.mk index 90cb6a79bb..da43c0a314 100644 --- a/po/doc/local.mk +++ b/po/doc/local.mk @@ -1,5 +1,6 @@ # GNU Guix --- Functional package management for GNU # Copyright © 2018 Julien Lepiller +# Copyright © 2021 Maxim Cournoyer # # This file is part of GNU Guix. # @@ -16,7 +17,7 @@ # You should have received a copy of the GNU General Public License # along with GNU Guix. If not, see . -DOC_PO_FILES= \ +DOC_PO_FILES = \ %D%/guix-manual.es.po \ %D%/guix-manual.de.po \ %D%/guix-manual.fa.po \ @@ -28,11 +29,11 @@ DOC_PO_FILES= \ %D%/guix-manual.sk.po \ %D%/guix-manual.zh_CN.po -DOC_COOKBOOK_PO_FILES= \ - %D%/guix-cookbook.de.po \ - %D%/guix-cookbook.fa.po \ - %D%/guix-cookbook.fr.po \ - %D%/guix-cookbook.ko.po \ +DOC_COOKBOOK_PO_FILES = \ + %D%/guix-cookbook.de.po \ + %D%/guix-cookbook.fa.po \ + %D%/guix-cookbook.fr.po \ + %D%/guix-cookbook.ko.po \ %D%/guix-cookbook.zh_Hans.po EXTRA_DIST = \ @@ -41,76 +42,37 @@ EXTRA_DIST = \ $(DOC_PO_FILES) \ $(DOC_COOKBOOK_PO_FILES) -POT_OPTIONS = --package-name "guix manual" --package-version "$(VERSION)" \ - --copyright-holder "the authors of Guix (msgids)" \ - --msgid-bugs-address "bug-guix@gnu.org" +POT_OPTIONS = \ + --package-name "guix manual" --package-version "$(VERSION)" \ + --copyright-holder "the authors of Guix (msgids)" \ + --msgid-bugs-address "bug-guix@gnu.org" -doc-po-update-%: - @lang=`echo "$@" | sed -e's/^doc-po-update-//'` ; \ - output="$(srcdir)/po/doc/guix-manual.$$lang.po" ; \ - input="$(srcdir)/po/doc/guix-manual.pot" ; \ - if test -f "$$output"; then \ - test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ - echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $$output $$input"; \ - cd $(srcdir) \ - && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ - $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) "$$output" "$$input";; \ - *) \ - $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} "$$output" "$$input";; \ - esac; \ - }; \ - touch "$$output"; \ - else \ - echo "File $$output does not exist. If you are a translator, you can create it with 'msginit'." 1>&2; \ - exit 1; \ - fi +# make-download-po-files-rule PO_FILES POT_FILE_INPUT +define make-update-po-files-rule +$(1): $(2) + @if ! [ -f "$$@" ]; then \ + echo "File $$po_file does not exist. If you are a translator, \ +you can create it with 'msginit'." 1>&2; \ + exit 1; \ + fi && \ + lang=$$$$(echo $$@ | $(SED) -E 's|.*\.([^.]*)\.po$$$$|\1|') && \ + echo $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) \ + --lang=$$$${lang} "$$@" "$$<" && \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$$$${lang} "$$@" "$$<" +endef -doc-po-update-cookbook-%: - @lang=`echo "$@" | sed -e's/^doc-po-update-cookbook-//'` ; \ - output="$(srcdir)/po/doc/guix-cookbook.$$lang.po" ; \ - input="$(srcdir)/po/doc/guix-cookbook.pot" ; \ - if test -f "$$output"; then \ - test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ - echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $$output $$input"; \ - cd $(srcdir) \ - && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ - $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) "$$output" "$$input";; \ - *) \ - $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} "$$output" "$$input";; \ - esac; \ - }; \ - touch "$$output"; \ - else \ - echo "File $$output does not exist. If you are a translator, you can create it with 'msginit'." 1>&2; \ - exit 1; \ - fi - -$(srcdir)/po/doc/%.pot-update: doc/%.texi +%D%/%.pot: $(srcdir)/doc/%.texi $(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<" \ - -p "$$(echo $@ | sed 's|-update||')" $(POT_OPTIONS) - @touch "$$(echo $@ | sed 's|-update||')" - -TMP_POT_FILES = contributing.pot guix.pot - -doc-pot-update: - for f in $(TMP_POT_FILES); do \ - $(MAKE) $(srcdir)/po/doc/$$f-update; \ - done - $(MAKE) $(srcdir)/po/doc/guix-cookbook.pot-update; - msgcat $(addprefix $(srcdir)/po/doc/, $(TMP_POT_FILES)) > $(srcdir)/po/doc/guix-manual.pot - rm -f $(addprefix $(srcdir)/po/doc/, $(TMP_POT_FILES)) + -p "$@" $(POT_OPTIONS) && \ + touch $@ -doc-po-update: doc-pot-update - for f in $(DOC_PO_FILES); do \ - lang="`echo "$$f" | $(SED) -es'|.*/guix-manual\.\(.*\)\.po$$|\1|g'`"; \ - $(MAKE) "doc-po-update-$$lang"; \ - done - for f in $(DOC_COOKBOOK_PO_FILES); do \ - lang="`echo "$$f" | $(SED) -es'|.*/guix-cookbook\.\(.*\)\.po$$|\1|g'`"; \ - $(MAKE) "doc-po-update-cookbook-$$lang"; \ - done +%D%/guix-manual.pot: %D%/guix.pot %D%/contributing.pot + msgcat $< > $@ +$(eval $(call make-update-po-files-rule,$(DOC_PO_FILES),%D%/guix-manual.pot)) +$(eval $(call make-update-po-files-rule,\ + $(DOC_COOKBOOK_PO_FILES),%D%/guix-cookbook.pot)) -.PHONY: doc-po-update doc-pot-update +doc-pot-update: %D%/guix-manual.pot %D%/guix-cookbook.pot +doc-po-update: $(DOC_PO_FILES) $(DOC_COOKBOOK_PO_FILES) +.PHONY: doc-pot-update doc-po-update -- cgit v1.2.3