diff options
Diffstat (limited to 'po/Makefile')
-rw-r--r-- | po/Makefile | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/po/Makefile b/po/Makefile new file mode 100644 index 0000000..cc4a062 --- /dev/null +++ b/po/Makefile @@ -0,0 +1,125 @@ +# dgit message translation machinery +# +# Translators: there is no need to look at this file. It contains +# complicated machinery which you do not need to understand :-). +# See po/README instead. + +# Copyright (C)2018 Ian Jackson +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# ----- metaprogramming (translators, pleaee ignore all this) ----- +# +# We present translators with a single file po/messages.pot containing +# all the messages for the translated programs in dgit.deb and +# git-debrebase.deb. This also includes the messages from the shared +# perl modules. +# +# But when we make the .debs, we want to ship in each .deb the +# messages for that .deb, only (but including the common parts). +# +# So we generate three intermediate .pots, +# .{dgit,git-debrebase,common}.pot +# and merge them to make messages.pot. +# +# From the translations we generate two .mo files for each output +# language: {dgit,git-debrebase}.mo -- including the common messages. +# +# To avoid dirtying the tree whenever we do `make install', +# we honour SUPPRESS_PO_UPDATE, to be used like this +# make install prefix=$(prefix) SUPPRESS_PO_UPDATE=1 + +all: messages.pot mofiles + +include ../i18n-common.make + +.%.potfiles: + $S $e; echo ../$*; $f + +.common.potfiles: + $S $e; find ../Debian -name \*.pm; $f + +.%.make: .%.potfiles Makefile part.make + $S $e; \ + sed 's/~/$*/g' part.make; \ + sed "s#^#.$*.pot: #" $<; \ + $f + +-include .dgit.make +-include .git-debrebase.make +-include .common.make + +POFILES := $(wildcard *.po) +LANGS := $(basename $(POFILES)) + +MOFILES = $(foreach part,$(filter-out common,$(PARTS)), \ + $(addprefix mo/$(part)_, $(POFILES:.po=.mo))) + +messages.pot: $(if $(SUPPRESS_PO_UPDATE),,$(POTS)) + $S msgcat --to-code=UTF-8 $^ >.messages.0.tmp + $S ( ./remove-potcdate <$@ ||: ) >.messages.1.tmp + $S ./remove-potcdate <.messages.0.tmp >.messages.2.tmp + $S cmp -s .messages.[12].tmp || mv -v .messages.0.tmp $@ + @echo 'Updated $@.' + +%.mo: %.po + $S msgfmt -o $@ $< + +XGETTEXT_OPTS += -Lperl -k__ -kf_ -ki_ +XGETTEXT_OPTS += --from-code=UTF-8 +XGETTEXT_OPTS += --package-name=dgit --package-version=ongoing +# The --package-* avoids this error from make check's `msgfmt -c' +# warning: header field 'Project-Id-Version' still has the initial default value + +%.pot: + $S TZ=UTC xgettext $(XGETTEXT_OPTS) $^ -o $@.tmp && $f + +mofiles: $(MOFILES) + @echo 'Generated mo/*.mo (binary translated messages) OK.' + +install: all + set -e; for file in $(MOFILES); do \ + lang=$${file#*_}; lang=$${lang%.mo}; \ + part=$${file#mo/}; part=$${part%%_*}; \ + d=$(DESTDIR)$(prefix)/share/locale/$$lang/LC_MESSAGES; \ + install -d $$d; \ + install -m 0644 $$file $$d/$$part.mo; \ + done + +clean: + rm -f .*.make .*.potfiles .*.pot .*.tmp + rm -rf mo + +%.po: $(if $(SUPPRESS_PO_UPDATE),,messages.pot) + @echo -n "Merging messages.pot and $@ " + $S if test -f $@; then \ + msgmerge --previous $@ messages.pot -o $@.new; \ + else \ + msgcat --lang=$* messages.pot >$@.new; \ + fi + $S mv -f $@.new $@ + $S msgfmt -o /dev/null --statistics $@ + +.PRECIOUS: .%.potfiles + +pofiles: $(POFILES) + +update: pofiles check + +check: $(if $(SUPPRESS_PO_UPDATE),,pofiles) + $S set -e; for file in $(POFILES); do \ + lang=`echo $$file | sed 's/\.po//'`; \ + printf "$$lang: "; \ + msgfmt -o /dev/null -c -v --statistics $$lang.po;\ + done |