# Copyright (C) 1996-2014 Free Software Foundation, Inc.
# This file is part of the GNU C Library.

# The GNU C Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.

# The GNU C Library 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
# Lesser General Public License for more details.

# You should have received a copy of the GNU Lesser General Public
# License along with the GNU C Library; if not, see
# <http://www.gnu.org/licenses/>.

# Makefile for installing libc message catalogs.

subdir := po

# Add names of the languages with broken .po files here.
BROKEN_LINGUAS =

# List of languages for which we have message catalogs of translations.
ALL_LINGUAS := $(filter-out $(BROKEN_LINGUAS),$(basename $(wildcard *.po)))

# You can override this in configparms or the make command line to limit
# the languages which get installed.
ifdef LINGUAS
LINGUAS := $(filter $(addsuffix %,$(LINGUAS)),$(ALL_LINGUAS))
else
LINGUAS = $(ALL_LINGUAS)
endif

# Text domain name to install under; must match ../locale/SYS_libc.c string.
domainname = libc

all: # Make this the default target; it will be defined in Rules.

include ../Makeconfig

# Pattern for where message catalog object for language % gets installed.
mo-installed = $(inst_msgcatdir)/%/LC_MESSAGES/$(domainname).mo

# Files to install: a $(domainname).mo file for each language.
install-others = $(LINGUAS:%=$(mo-installed))


include ../Rules

# Generate the translation template from all the source files.
libc.pot: pot.header libc.pot.files
	@rm -f $@.new
	set `date -R`; disp="$$6"; \
	sed -e 's/VERSION/$(version)/' \
	    -e "s/DATE/`date +'%Y-%m-%d %H:%M'$$disp`/" \
	    -e "s/CHARSET/UTF-8/" \
	    $< > $@.new
	egrep -v '\.ksh$$' $(word 2,$^) > $(objdir)/tmp-libc.pot-files
	cd ..; $(XGETTEXT) --keyword=_ --keyword=N_ \
			   --add-comments=TRANS --flag=error:3:c-format \
			   --flag=f_print:2:c-format \
			   --sort-by-file --omit-header -E -n -d - \
			   -f $(objdir)/tmp-libc.pot-files >> po/$@.new
	egrep '\.ksh$$' $(word 2,$^) > $(objdir)/tmp-libc.pot-files
	cd ..; $(XGETTEXT) --add-comments=TRANS --language=Shell \
			   --sort-by-file --omit-header -E -n -o po/$@.new -j \
			   -f $(objdir)/tmp-libc.pot-files po/$@.new
	rm $(objdir)/tmp-libc.pot-files
	mv -f $@.new $@

po-sed-cmd = \
  '/\/tst-/d;$(foreach S,[ch] cxx sh ksh bash,$(subst .,\.,/.$S\(.in\)*$$/p;))'

# Omit tst-* files, and get only files with the given suffixes.
libc.pot.files: FORCE
	$(..)scripts/list-sources.sh .. | sed -n $(po-sed-cmd) > $@.new
	mv -f $@.new $@

.SUFFIXES: .mo .po .pot

# Compile the binary message object files from the portable object source
# files of translations for each language.
%.mo: %.po
	$(MSGFMT) -o $@ $<

# Install the message object files as libc.po in the language directory.
$(mo-installed): %.mo $(+force); $(do-install) || exit 0

.PHONY: linguas linguas.mo
linguas: $(ALL_LINGUAS:=.po)
linguas.mo: $(ALL_LINGUAS:=.mo)

realclean:
	rm -f $(ALL_LINGUAS:=.mo)

# Copy the PO files from the translation coordinator's repository.

podir = /com/share/ftp/gnu/po/maint/glibc

pofiles := $(wildcard $(podir)/*.po)

ifneq (,$(pofiles))

%.po: $(podir)/%.po
	cp -f $< $@
	chmod 444 $@

linguas: $(pofiles:$(podir)/%=%)
linguas.mo: $(pofiles:$(podir)/%.po=%.mo)

endif
