# This makefile is very special as it's meant to build as part of the build
# process and also within the source tree to update the translation files.

# Set SRC_PATH for in-tree builds without configuration.
SRC_PATH=..

-include ../config-host.mak
include $(SRC_PATH)/rules.mak

PO_PATH=$(SRC_PATH)/po

VERSION=$(shell cat $(SRC_PATH)/VERSION)
SRCS=$(filter-out $(PO_PATH)/messages.po,$(wildcard $(PO_PATH)/*.po))
OBJS=$(patsubst $(PO_PATH)/%.po,%.mo,$(SRCS))

vpath %.po $(PO_PATH)

all:
	@echo "Use 'make update' to update translation files or use 'make build'"
	@echo "or 'make install' to build and install the translation files."

update: $(SRCS)

build: $(OBJS)

clean:
	$(RM) $(OBJS)

install: $(OBJS)
	for obj in $(OBJS); do \
	    base=`basename $$obj .mo`; \
	    $(INSTALL) -d $(DESTDIR)$(prefix)/share/locale/$$base/LC_MESSAGES; \
	    $(INSTALL) -m644 $$obj $(DESTDIR)$(prefix)/share/locale/$$base/LC_MESSAGES/qemu.mo; \
	done

%.mo: %.po
	$(call quiet-command, msgfmt -o $@ $<, "  GEN   $@")

$(PO_PATH)/messages.po: $(SRC_PATH)/ui/gtk.c
	$(call quiet-command, ( cd $(SRC_PATH) && \
          xgettext -o - --from-code=UTF-8 --foreign-user \
	    --package-name=QEMU --package-version=$(VERSION) \
	    --msgid-bugs-address=qemu-devel@nongnu.org -k_ -C ui/gtk.c | \
	  sed -e s/CHARSET/UTF-8/) >$@, "  GEN   $@")

$(PO_PATH)/%.po: $(PO_PATH)/messages.po
	$(call quiet-command, msgmerge -q $@ $< > $@.bak && mv $@.bak $@, "  GEN   $@")

.PHONY: clean all
