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.master
parent
eaf79d319d
commit
0d353b06ec
|
@ -1,5 +1,6 @@
|
||||||
# GNU Guix --- Functional package management for GNU
|
# GNU Guix --- Functional package management for GNU
|
||||||
# Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
|
# Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
|
||||||
|
# Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
|
||||||
#
|
#
|
||||||
# This file is part of GNU Guix.
|
# This file is part of GNU Guix.
|
||||||
#
|
#
|
||||||
|
@ -41,76 +42,37 @@ EXTRA_DIST = \
|
||||||
$(DOC_PO_FILES) \
|
$(DOC_PO_FILES) \
|
||||||
$(DOC_COOKBOOK_PO_FILES)
|
$(DOC_COOKBOOK_PO_FILES)
|
||||||
|
|
||||||
POT_OPTIONS = --package-name "guix manual" --package-version "$(VERSION)" \
|
POT_OPTIONS = \
|
||||||
|
--package-name "guix manual" --package-version "$(VERSION)" \
|
||||||
--copyright-holder "the authors of Guix (msgids)" \
|
--copyright-holder "the authors of Guix (msgids)" \
|
||||||
--msgid-bugs-address "bug-guix@gnu.org"
|
--msgid-bugs-address "bug-guix@gnu.org"
|
||||||
|
|
||||||
doc-po-update-%:
|
# make-download-po-files-rule PO_FILES POT_FILE_INPUT
|
||||||
@lang=`echo "$@" | sed -e's/^doc-po-update-//'` ; \
|
define make-update-po-files-rule
|
||||||
output="$(srcdir)/po/doc/guix-manual.$$lang.po" ; \
|
$(1): $(2)
|
||||||
input="$(srcdir)/po/doc/guix-manual.pot" ; \
|
@if ! [ -f "$$@" ]; then \
|
||||||
if test -f "$$output"; then \
|
echo "File $$po_file does not exist. If you are a translator, \
|
||||||
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
you can create it with 'msginit'." 1>&2; \
|
||||||
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; \
|
exit 1; \
|
||||||
fi
|
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-%:
|
%D%/%.pot: $(srcdir)/doc/%.texi
|
||||||
@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
|
|
||||||
$(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<" \
|
$(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<" \
|
||||||
-p "$$(echo $@ | sed 's|-update||')" $(POT_OPTIONS)
|
-p "$@" $(POT_OPTIONS) && \
|
||||||
@touch "$$(echo $@ | sed 's|-update||')"
|
touch $@
|
||||||
|
|
||||||
TMP_POT_FILES = contributing.pot guix.pot
|
%D%/guix-manual.pot: %D%/guix.pot %D%/contributing.pot
|
||||||
|
msgcat $< > $@
|
||||||
|
|
||||||
doc-pot-update:
|
$(eval $(call make-update-po-files-rule,$(DOC_PO_FILES),%D%/guix-manual.pot))
|
||||||
for f in $(TMP_POT_FILES); do \
|
$(eval $(call make-update-po-files-rule,\
|
||||||
$(MAKE) $(srcdir)/po/doc/$$f-update; \
|
$(DOC_COOKBOOK_PO_FILES),%D%/guix-cookbook.pot))
|
||||||
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))
|
|
||||||
|
|
||||||
doc-po-update: doc-pot-update
|
doc-pot-update: %D%/guix-manual.pot %D%/guix-cookbook.pot
|
||||||
for f in $(DOC_PO_FILES); do \
|
doc-po-update: $(DOC_PO_FILES) $(DOC_COOKBOOK_PO_FILES)
|
||||||
lang="`echo "$$f" | $(SED) -es'|.*/guix-manual\.\(.*\)\.po$$|\1|g'`"; \
|
.PHONY: doc-pot-update doc-po-update
|
||||||
$(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
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: doc-po-update doc-pot-update
|
|
||||||
|
|
Reference in New Issue