summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut2009-01-09 10:54:08 +0000
committerPeter Eisentraut2009-01-09 10:54:08 +0000
commit723281845d82c3e5178151aae9c12fd6cbfce10f (patch)
tree6d848882859ff7ce97511ac25d783bcf35574796
parent12e900834ff11219214a461c4c977d7925c5e2c6 (diff)
Rewrite update-po target, so that it works less like a shell script and more
like a makefile with real dependencies. Instead of overwriting the old po file, write the new one to .po.new. This is less annoying and integrates better with the NLS web site. Also, we can now merge languages that don't have a po file yet, by merging against all other po files of that language, to pick up recurring translations automatically. This previously only worked when a po file already existed.
-rw-r--r--doc/src/sgml/nls.sgml5
-rw-r--r--src/nls-global.mk41
2 files changed, 25 insertions, 21 deletions
diff --git a/doc/src/sgml/nls.sgml b/doc/src/sgml/nls.sgml
index 26d9e10160..52da8ead95 100644
--- a/doc/src/sgml/nls.sgml
+++ b/doc/src/sgml/nls.sgml
@@ -200,9 +200,8 @@ gmake update-po
which will create a new blank message catalog file (the pot file
you started with) and will merge it with the existing PO files.
If the merge algorithm is not sure about a particular message it
- marks it <quote>fuzzy</quote> as explained above. For the case
- where something went really wrong, the old PO file is saved with a
- <filename>.po.old</filename> extension.
+ marks it <quote>fuzzy</quote> as explained above. The new PO file
+ is saved with a <filename>.po.new</filename> extension.
</para>
</sect2>
diff --git a/src/nls-global.mk b/src/nls-global.mk
index 4f85245625..0b5959389f 100644
--- a/src/nls-global.mk
+++ b/src/nls-global.mk
@@ -80,7 +80,7 @@ uninstall-po:
clean-po:
$(if $(MO_FILES),rm -f $(MO_FILES))
- @$(if $(PO_FILES),rm -f $(addsuffix .old, $(PO_FILES)))
+ @$(if $(wildcard po/*.po.new),rm -f po/*.po.new)
rm -f po/$(CATALOG_NAME).pot
@@ -93,26 +93,31 @@ maintainer-check-po: $(PO_FILES)
init-po: po/$(CATALOG_NAME).pot
-define merge-lang
-@printf 'merging $(1) '
-@if $(MSGMERGE) $(srcdir)/po/$(1).po $< -o po/$(1).po.new $(addprefix --compendium=,$(shell find $(top_srcdir) -name $(1).po -printf '%p ')); \
-then \
- mv $(srcdir)/po/$(1).po po/$(1).po.old; \
- mv po/$(1).po.new $(srcdir)/po/$(1).po; \
-else \
- echo "msgmerge for $(1) failed"; \
- rm -f po/$(1).po.new; \
-fi
-
-endef
-
-update-po: po/$(CATALOG_NAME).pot
-ifdef MSGMERGE
- $(foreach lang,$(LANGUAGES),$(call merge-lang,$(lang)))
+# For performance reasons, only calculate these when the user actually
+# requested update-po or a specific file.
+ifneq (,$(filter update-po %.po.new,$(MAKECMDGOALS)))
+ALL_LANGUAGES := $(shell find $(top_srcdir) -name '*.po' -printf '%f\n' | sort -u | sed 's/\.po$$//')
+all_compendia := $(shell find $(top_srcdir) -name '*.po' -printf '%p ')
else
- @echo "You don't have 'msgmerge'." ; exit 1
+ALL_LANGUAGES = $(AVAIL_LANGUAGES)
+all_compendia = FORCE
+FORCE:
+endif
+
+ifdef WANTED_LANGUAGES
+ALL_LANGUAGES := $(filter $(WANTED_LANGUAGES), $(ALL_LANGUAGES))
endif
+update-po: $(ALL_LANGUAGES:%=po/%.po.new)
+
+$(AVAIL_LANGUAGES:%=po/%.po.new): po/%.po.new: po/%.po po/$(CATALOG_NAME).pot $(all_compendia)
+ $(MSGMERGE) $(word 1, $^) $(word 2,$^) -o $@ $(addprefix --compendium=,$(filter %/$*.po,$(wordlist 3,$(words $^),$^)))
+
+# For languages not yet available, merge against empty file, to pick
+# up translations from the compendia.
+po/%.po.new: po/$(CATALOG_NAME).pot $(all_compendia)
+ $(MSGMERGE) /dev/null $(word 1,$^) -o $@ $(addprefix --compendium=,$(filter %/$*.po,$(wordlist 2,$(words $^),$^)))
+
all: all-po
install: install-po