freeipa/install/po/Makefile.in
John Dennis cf8237af69 fix i18n build problem
There was a typo in install/po/Makefile.in which caused (some) of
the .po files to be overwritten because the test to see if a po
file existed had a typo in it.

This patch also removes the unnecessary rebuilding of the pot which was
happening when using the "all" target (the default). The pot file now
must be manually remade, which is what we want.

Added a new target "mo-files" to manually generate the .mo files.
This is useful to run before checking in a new .po file just to
assure it "compiles" and we don't have to discover this during a
build.
2010-02-22 14:30:30 -07:00

290 lines
11 KiB
Makefile

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@
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))
PYTHON_POTFILES = \
../../ipa \
../../lite-server.py \
../../ipapython/config.py \
../../ipapython/sysrestore.py \
../../ipapython/ipasslfile.py \
../../ipapython/__init__.py \
../../ipapython/ipautil.py \
../../ipapython/certdb.py \
../../ipapython/ipavalidate.py \
../../ipapython/dnsclient.py \
../../ipapython/dogtag.py \
../../ipapython/nsslib.py \
../../ipapython/entity.py \
../../install/tools/ipa-replica-manage \
../../install/tools/ipa-server-certinstall \
../../install/tools/ipa-replica-install \
../../install/tools/ipa-nis-manage \
../../install/tools/ipa-upgradeconfig \
../../install/tools/ipa-replica-prepare \
../../install/tools/ipa-compat-manage \
../../install/tools/ipa-server-install \
../../install/tools/ipa-ldap-updater \
../../install/migration/migration.py \
../../ipalib/config.py \
../../ipalib/parameters.py \
../../ipalib/request.py \
../../ipalib/output.py \
../../ipalib/__init__.py \
../../ipalib/backend.py \
../../ipalib/pkcs10.py \
../../ipalib/x509.py \
../../ipalib/plugable.py \
../../ipalib/constants.py \
../../ipalib/aci.py \
../../ipalib/base.py \
../../ipalib/ipauuid.py \
../../ipalib/crud.py \
../../ipalib/cli.py \
../../ipalib/text.py \
../../ipalib/compat.py \
../../ipalib/frontend.py \
../../ipalib/rpc.py \
../../ipalib/errors.py \
../../ipalib/encoder.py \
../../ipalib/util.py \
../../ipalib/plugins/config.py \
../../ipalib/plugins/rolegroup.py \
../../ipalib/plugins/host.py \
../../ipalib/plugins/group.py \
../../ipalib/plugins/migration.py \
../../ipalib/plugins/xmlclient.py \
../../ipalib/plugins/service.py \
../../ipalib/plugins/passwd.py \
../../ipalib/plugins/__init__.py \
../../ipalib/plugins/virtual.py \
../../ipalib/plugins/hbac.py \
../../ipalib/plugins/cert.py \
../../ipalib/plugins/baseldap.py \
../../ipalib/plugins/aci.py \
../../ipalib/plugins/kerberos.py \
../../ipalib/plugins/krbtpolicy.py \
../../ipalib/plugins/dns.py \
../../ipalib/plugins/automount.py \
../../ipalib/plugins/netgroup.py \
../../ipalib/plugins/misc.py \
../../ipalib/plugins/user.py \
../../ipalib/plugins/taskgroup.py \
../../ipalib/plugins/hostgroup.py \
../../ipalib/plugins/pwpolicy.py \
../../ipaserver/__init__.py \
../../ipaserver/servercore.py \
../../ipaserver/ipautil.py \
../../ipaserver/rpcserver.py \
../../ipaserver/conn.py \
../../ipaserver/ipaldap.py \
../../ipaserver/install/installutils.py \
../../ipaserver/install/service.py \
../../ipaserver/install/ldapupdate.py \
../../ipaserver/install/__init__.py \
../../ipaserver/install/cainstance.py \
../../ipaserver/install/ntpinstance.py \
../../ipaserver/install/bindinstance.py \
../../ipaserver/install/krbinstance.py \
../../ipaserver/install/certs.py \
../../ipaserver/install/dsinstance.py \
../../ipaserver/install/replication.py \
../../ipaserver/install/httpinstance.py \
../../ipaserver/plugins/ldap2.py \
../../ipaserver/plugins/rabase.py \
../../ipaserver/plugins/selfsign.py \
../../ipaserver/plugins/__init__.py \
../../ipaserver/plugins/join.py \
../../ipaserver/plugins/ldapapi.py \
../../ipaserver/plugins/xmlserver.py \
../../ipaserver/plugins/dogtag.py \
../../contrib/RHEL4/ipachangeconf.py \
../../ipawebui/engine.py \
../../ipawebui/__init__.py \
../../ipawebui/widgets.py \
../../ipawebui/controllers.py \
../../ipa-client/ipaclient/ntpconf.py \
../../ipa-client/ipaclient/__init__.py \
../../ipa-client/ipaclient/ipachangeconf.py \
../../ipa-client/ipaclient/ipadiscovery.py \
../../ipa-client/ipa-install/ipa-client-install
C_POTFILES = \
../../daemons/ipa-kpasswd/ipa_kpasswd.c \
../../daemons/ipa-slapi-plugins/ipa-enrollment/ipa_enrollment.c \
../../daemons/ipa-slapi-plugins/ipa-memberof/ipa-memberof.c \
../../daemons/ipa-slapi-plugins/ipa-memberof/ipa-memberof.h \
../../daemons/ipa-slapi-plugins/ipa-memberof/ipa-memberof_config.c \
../../daemons/ipa-slapi-plugins/ipa-pwd-extop/ipa_pwd_extop.c \
../../daemons/ipa-slapi-plugins/ipa-winsync/ipa-winsync-config.c \
../../daemons/ipa-slapi-plugins/ipa-winsync/ipa-winsync.c \
../../daemons/ipa-slapi-plugins/ipa-winsync/ipa-winsync.h \
../../ipa-client/config.c \
../../ipa-client/ipa-getkeytab.c \
../../ipa-client/ipa-join.c \
../../ipa-client/ipa-rmkeytab.c
POTFILES = $(PYTHON_POTFILES) $(C_POTFILES)
.SUFFIXES:
.SUFFIXES: .po .mo
.PHONY: all create-po update-po update-pot install mostlyclean clean distclean test_lang test
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; \
$(MSGMERGE) $@ -o $@ $(DOMAIN).pot
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
$(DOMAIN).pot: $(POTFILES)
$(MAKE) update-pot
update-po: update-pot
$(MAKE) all
update-pot:
@rm -f $(DOMAIN).pot.update
@$(XGETTEXT) $(XGETTEXT_OPTIONS) \
--output $(DOMAIN).pot.update \
--language="python" \
$(PYTHON_POTFILES) \
&& \
$(XGETTEXT) $(XGETTEXT_OPTIONS) \
--output $(DOMAIN).pot.update \
--join-existing \
--language="c" \
$(C_POTFILES) ; \
$(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
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 \
$(MSGCMP) $$po_file $(DOMAIN).pot 2>&1 | \
$(AWK) -v po_file=$$po_file -v pot_count=$$pot_count -v pot_file=$(DOMAIN).pot \
'BEGIN {po_untranslated=0; undefined=0; \
po_name = gensub(/.po$$/, "", 1, po_file)} \
/this message is untranslated/ {po_untranslated++} \
/this message is used but not defined/ {undefined++} \
END {untranslated = po_untranslated+undefined; \
translated = pot_count - untranslated; \
ratio = sprintf("%d/%d", translated, pot_count); \
printf "%-7s %8s %5.1f%% %4d po untranslated, %4d missing, %4d untranslated\n", \
po_name ":", ratio, translated/pot_count*100.0, po_untranslated, undefined, untranslated;}'; \
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
rm -f $(DOMAIN).pot.update $(DOMAIN).pot.update.tmp $(DOMAIN).pot.tmp
clean: mostlyclean
distclean: clean
rm -f Makefile
# We test our translations by taking the original untranslated string
# (e.g. msgid) and prepend a prefix character and then append a suffix
# character. The test consists of asserting that the first character in the
# translated string is the prefix, the last character in the translated string
# is the suffix and the everything between the first and last character exactly
# matches the original msgid.
#
# We use unicode characters not in the ascii character set for the prefix and
# suffix to enhance the test. To make reading the translated string easier the
# prefix is the unicode right pointing arrow and the suffix left pointing arrow,
# thus the translated string looks like the original string enclosed in
# arrows. In ASCII art the string "foo" would render as:
# -->foo<--
#
# Unicode right pointing arrow: u'\u2192', utf-8 = '\xe2\x86\x92'
# Unicode left pointing arrow: u'\u2190', utf-8 = '\xe2\x86\x90'
#
# The sed command below performs the prefix and suffix substitution.
#
# When msginit is invoked with an English target locale it copies the msgid
# into the msgstr. This is an undocumented feature of msginit. Otherwise the
# msgstr will be set to the empty string (i.e. untranslated). We depend on
# the msgid being copied to the msgstr.
test_lang:
rm -rf test.po test_locale
$(MSGINIT) --no-translator -i $(DOMAIN).pot -l en_US -o test.po
$(SED) -i -r -e 's/^msgstr[ \t]+"(.*)"[ \t]*$$/msgstr "\xe2\x86\x92\1\xe2\x86\x90"/' test.po
$(MKDIR_P) test_locale/en_US/LC_MESSAGES
$(MSGFMT) -o test_locale/en_US/LC_MESSAGES/ipa.mo test.po
test: test_lang
./test_i18n.py