prefix = @prefix@ exec_prefix = ${prefix} datarootdir = ${prefix}/share datadir = ${datarootdir} localedir = ${datarootdir}/locale INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL@ -m 644 AWK = @AWK@ SED = @SED@ MKDIR_P = @MKDIR_P@ XGETTEXT = @XGETTEXT@ MSGFMT = @MSGFMT@ MSGINIT = @MSGINIT@ MSGMERGE = @MSGMERGE@ MSGCMP = @MSGCMP@ MSGATTRIB = @MSGATTRIB@ TX = @TX@ IPA_TEST_I18N = ../../ipatests/i18n.py DOMAIN = @GETTEXT_DOMAIN@ MSGMERGE_UPDATE = $(MSGMERGE) --update COPYRIGHT_HOLDER = Red Hat PACKAGE_NAME = $(DOMAIN) PACKAGE_BUGREPORT = https://hosted.fedoraproject.org/projects/freeipa/newticket XGETTEXT_OPTIONS = \ --add-comments="TRANSLATORS:" \ --copyright-holder="$(COPYRIGHT_HOLDER)" \ --package-name="$(PACKAGE_NAME)" \ --msgid-bugs-address="$(PACKAGE_BUGREPORT)" languages = $(shell $(SED) 's/\#.*//' LINGUAS) # The sed command removes comments po_files = $(patsubst %, %.po, $(languages)) mo_files = $(patsubst %.po, %.mo, $(po_files)) po_count=$(words $(po_files)) PY_FILES = $(shell cd ../..; git ls-files | grep -v -e "^ipatests/" -e "^doc/" -e "^install/po/" -e "^ipapython/test/" -e "setup.py" -e "setup-client.py" | grep "\.py$$" | tr '\n' ' '; cd install/po) C_FILES = $(shell cd ../..; git ls-files | grep "\.c$$" | tr '\n' ' '; cd install/po) H_FILES = $(shell cd ../..; git ls-files | grep "\.h$$" | tr '\n' ' '; cd install/po) # Please keep this list sorted! PY_EXPLICIT_FILES = \ install/tools/ipa-adtrust-install \ install/tools/ipa-ca-install \ install/tools/ipa-compat-manage \ install/tools/ipa-csreplica-manage \ install/tools/ipactl \ install/tools/ipa-dns-install \ install/tools/ipa-kra-install \ install/tools/ipa-ldap-updater \ install/tools/ipa-managed-entries \ install/tools/ipa-nis-manage \ install/tools/ipa-replica-conncheck \ install/tools/ipa-replica-install \ install/tools/ipa-replica-manage \ install/tools/ipa-replica-prepare \ install/tools/ipa-server-certinstall \ install/tools/ipa-server-install \ install/tools/ipa-upgradeconfig \ ipa \ ipa-client/ipa-install/ipa-client-install PYTHON_POTFILES = $(PY_FILES) $(PY_EXPLICIT_FILES) C_POTFILES = $(C_FILES) $(H_FILES) .SUFFIXES: .SUFFIXES: .po .mo .PHONY: all create-po update-po update-pot install mostlyclean clean distclean test mo-files debug strip-po merge-po $(po_files) all: SUFFIXES = .po .mo .po.mo: @echo Creating $@; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ $(po_files): $(DOMAIN).pot @if [ ! -f $@ ]; then \ lang=`echo $@ | $(SED) -r -e 's/\.po$$//'` # Strip .po suffix ; \ echo Creating nonexistent $@, you should add this file to your SCM repository; \ $(MSGINIT) --locale $$lang --no-translator -i $(DOMAIN).pot -o $@; \ fi; \ echo Merging $(DOMAIN).pot into $@; \ $(MSGMERGE) --no-fuzzy-matching -o $@ $@ $(DOMAIN).pot strip-po: @for po_file in $(po_files); do \ echo Stripping $$po_file; \ $(MSGATTRIB) --translated --no-fuzzy --no-location $$po_file > $$po_file.tmp; \ mv $$po_file.tmp $$po_file; \ done @export FILES_TO_REMOVE=`find . -name '*.po' -empty`; \ if [ "$$FILES_TO_REMOVE" != "" ]; then \ echo Removing empty translation files; \ rm -v $$FILES_TO_REMOVE; \ echo; echo Please remove the deleted files from LINGUAS!; echo; \ fi create-po: $(DOMAIN).pot @for po_file in $(po_files); do \ if [ ! -e $$po_file ]; then \ lang=`echo $$po_file | $(SED) -r -e 's/\.po$$//'` # Strip .po suffix ; \ echo Creating nonexistent $$po_file, you should add this file to your SCM repository; \ $(MSGINIT) --locale $$lang --no-translator -i $(DOMAIN).pot -o $$po_file; \ fi; \ done pull-po: cd ../..; $(TX) pull -f $(MAKE) strip-po merge-po: update-pot $(MAKE) $(po_files) update-po: merge-po $(MAKE) strip-po update-pot: @rm -f $(DOMAIN).pot.update @pushd ../.. ; \ $(XGETTEXT) $(XGETTEXT_OPTIONS) \ --output install/po/$(DOMAIN).pot.update \ --language="python" \ $(PYTHON_POTFILES) \ && \ $(XGETTEXT) $(XGETTEXT_OPTIONS) \ --output install/po/$(DOMAIN).pot.update \ --join-existing \ --language="c" \ --from-code="UTF-8" \ --keyword='_' \ $(C_POTFILES) ; \ popd ; \ $(SED) '/^"POT-Creation-Date: .*"$$/d' $(DOMAIN).pot.update > $(DOMAIN).pot.update.tmp ; \ $(SED) -i -r -e 's%("Content-Type: text/plain; charset=)(.*)(\\n")%\1UTF-8\3%' $(DOMAIN).pot.update.tmp ; \ $(SED) '/^"POT-Creation-Date: .*"$$/d' $(DOMAIN).pot > $(DOMAIN).pot.tmp ; \ if ! cmp -s $(DOMAIN).pot.update.tmp $(DOMAIN).pot.tmp ; then \ echo "$(DOMAIN).pot updated" ; \ mv $(DOMAIN).pot.update $(DOMAIN).pot ; \ # Replace the charset with UTF-8 ; \ $(SED) -i -r -e 's%("Content-Type: text/plain; charset=)(.*)(\\n")%\1UTF-8\3%' $(DOMAIN).pot ; \ else \ echo "$(DOMAIN).pot unmodified" ; \ fi || : @rm -f $(DOMAIN).pot.update $(DOMAIN).pot.update.tmp $(DOMAIN).pot.tmp $(IPA_TEST_I18N) --show-strings --validate-pot $(DOMAIN).pot msg-stats: @pot_count=`$(MSGFMT) --statistics $(DOMAIN).pot 2>&1 | \ $(AWK) '{match($$0, /([0-9]+) translated messages, ([0-9]+) untranslated messages/, groups); \ printf "%s\n", groups[2];}'` ; \ echo "$(DOMAIN).pot has $$pot_count messages. There are $(po_count) po translation files." ; \ for po_file in $(po_files); do \ $(MSGFMT) --statistics $$po_file 2>&1 | \ $(AWK) -v po_file=$$po_file -v pot_count=$$pot_count -v pot_file=$(DOMAIN).pot \ 'BEGIN {po_name = gensub(/\.po$$/, "", 1, po_file);} \ match($$0, /([[:digit:]]+) translated/, group) {translated = group[1]} \ match($$0, /([[:digit:]]+) untranslated/, group) {untranslated = group[1]} \ match($$0, /([[:digit:]]+) fuzzy/, group) {fuzzy = group[1]} \ END {pot_untranslated = pot_count - translated; \ ratio = sprintf("%d/%d", translated, pot_count); \ printf "%-7s %11s %5.1f%% %5d untranslated, %5d fuzzy\n", \ po_name ":", ratio, translated/pot_count*100.0, pot_untranslated, fuzzy;}'; \ done mo-files: $(mo_files) install: $(mo_files) @for lang in $(languages); do \ dstdir=$(DESTDIR)$(localedir)/$$lang/LC_MESSAGES; \ $(MKDIR_P) $$dstdir; \ $(INSTALL) $$lang.mo $$dstdir/$(DOMAIN).mo; \ done mostlyclean: rm -rf *.mo test.po test_locale tmp.pot rm -f $(DOMAIN).pot.update $(DOMAIN).pot.update.tmp $(DOMAIN).pot.tmp clean: mostlyclean distclean: clean rm -f Makefile maintainer-clean: distclean test: $(IPA_TEST_I18N) --test-gettext validate-pot: $(IPA_TEST_I18N) --show-strings --validate-pot $(DOMAIN).pot validate-po: $(IPA_TEST_I18N) --show-strings --validate-po $(po_files) validate-src-strings: @rm -f tmp.pot @touch tmp.pot @$(MAKE) DOMAIN=tmp update-pot; \ status=$$?; \ rm tmp.pot; \ exit $$status debug: @echo Python potfiles: @echo PY_FILES = $(PY_FILES) @echo PY_EXPLICIT_FILES = $(PY_EXPLICIT_FILES) @echo C potfiles: @echo C_FILES = $(C_FILES) @echo H_FILES = $(H_FILES)