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-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)

