# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

MK_DIR := ../devtools/mk
include $(MK_DIR)/common.mk

GETTEXT = $(MK_DIR)/pygettext.py
LIST_PYTESTS = ../py/tools/list_pytests.py
MSGFMT = msgfmt
MSGMERGE = msgmerge
MSGCAT = msgcat

KEYWORDS = -k _ -t i18n-label -j _ -j i18nLabel -j i18nLabelNode -J "i18n! "

DOMAIN = factory
BUILD_DIR ?= ../build
PO_DIR ?= .
OUTPUT_DIR ?= $(BUILD_DIR)/locale
TEMP_DIR ?= $(BUILD_DIR)/po

BOARD_PO_DIR ?= $(if $(BOARD_FILES_DIR),$(BOARD_FILES_DIR)/po)

func-get-source-list = \
  $(sort $(wildcard \
    $(1)/goofy/*.py $(1)/goofy/*/*.py $(1)/goofy/plugins/*/*.py \
    $(1)/test/*.py $(1)/test/fixture/*/*.py \
    $(1)/test/pytests/*.py $(1)/test/pytests/*/*.py \
    $(1)/test/test_lists/*.py \
    $(1)/goofy/plugins/*/*/*.html $(1)/goofy/static/*.html \
    $(1)/test/pytests/*/*.html $(1)/test/pytests/*/static/*.html \
    $(1)/goofy/js/*.js $(1)/goofy/plugins/*/*/*.js \
    $(1)/goofy/static/js/default_test_ui.js \
    $(1)/test/pytests/*/*.js $(1)/test/pytests/*/static/*.js \
    $(1)/config/*.test_list.json $(1)/test/test_lists/*.test_list.json))

PYTESTS_LABEL_FILE ?= $(BUILD_DIR)/pytests_label_generated.json
BOARD_PYTESTS_LABEL_FILE ?= $(BUILD_DIR)/board_pytests_label_generated.json

PY_ROOT = ../py
SRC_LIST = $(call func-get-source-list,$(PY_ROOT)) $(PYTESTS_LABEL_FILE)
BOARD_SRC_LIST = $(if $(BOARD_FILES_DIR), \
  $(call func-get-source-list,$(BOARD_FILES_DIR)/py) \
  $(BOARD_PYTESTS_LABEL_FILE))

SRCS = $(wildcard $(PO_DIR)/*.po) \
  $(if $(BOARD_PO_DIR),$(wildcard $(BOARD_PO_DIR)/*.po))
LOCALES = $(sort $(foreach src,$(SRCS),$(basename $(notdir $(src)))))

LOCALE ?=
TARGET_PO = $(if $(BOARD_PO_DIR),$(BOARD_PO_DIR),$(PO_DIR))/$(LOCALE).po

func-update-po = \
  $(if $(wildcard $(1)),, \
    mkdir -p $(dir $(1)) $(\n) \
    sed "s/PO_REVISION_DATE/$(shell date +'%Y-%m-%d %H:%M+%Z')/; \
      s/LOCALE/$(basename $(notdir $(1)))/" po-header > $(1) $(\n)) \
  $(MSGMERGE) --force-po $(1) $(TEMP_DIR)/messages.pot \
    -o $(TEMP_DIR)/tmp.po $(\n) \
  mv -f $(TEMP_DIR)/tmp.po $(1) $(\n)

func-gettext-and-update-po = \
  $(if $(strip $(2)), \
    mkdir -p $(TEMP_DIR) $(\n) \
    $(GETTEXT) $(KEYWORDS) -o $(TEMP_DIR)/messages.pot $(1) $(\n) \
    $(foreach file,$(2),$(call func-update-po,$(file))))

all: build

update_pytest_list:
	mkdir -p $(BUILD_DIR)
	$(LIST_PYTESTS) -l $(PY_ROOT) > $(PYTESTS_LABEL_FILE)
	$(if $(BOARD_FILES_DIR), $(LIST_PYTESTS) -l $(BOARD_FILES_DIR)/py \
	  > $(BOARD_PYTESTS_LABEL_FILE))

init: update_pytest_list
	$(if $(LOCALE),, \
	  $(error "You must specify locale of target translation."))
	$(if $(wildcard $(PO_DIR)/$(LOCALE).po), \
	  $(error "$(PO_DIR)/$(LOCALE).po already exists."))
	$(if $(and $(BOARD_PO_DIR),$(wildcard $(BOARD_PO_DIR)/$(LOCALE).po)), \
	  $(error "$(LOCALE).po already exists in board overlay."))
	$(call func-gettext-and-update-po, \
	  $(BOARD_SRC_LIST) $(SRC_LIST),$(TARGET_PO))

update: update_pytest_list
	$(if $(BOARD_PO_DIR), \
	  $(info Updating overlay-only locales) \
	  $(call func-gettext-and-update-po,$(BOARD_SRC_LIST) $(SRC_LIST), \
	    $(foreach locale,$(LOCALES), \
	      $(if $(wildcard $(PO_DIR)/$(locale).po),, \
	         $(BOARD_PO_DIR)/$(locale).po))) \
	  $(info Updating other locales) \
	  $(call func-gettext-and-update-po,$(BOARD_SRC_LIST), \
	    $(foreach locale,$(LOCALES), \
	      $(if $(wildcard $(PO_DIR)/$(locale).po), \
	        $(BOARD_PO_DIR)/$(locale).po))), \
	  $(info Updating public locales) \
	  $(call func-gettext-and-update-po,$(SRC_LIST), \
	    $(foreach locale,$(LOCALES),$(PO_DIR)/$(locale).po)))

build:
	rm -rf $(OUTPUT_DIR)
	$(foreach locale,$(LOCALES), \
	  mkdir -p $(OUTPUT_DIR)/$(locale)/LC_MESSAGES $(\n) \
	  $(MSGCAT) -o - --use-first \
	    $(wildcard \
	      $(if $(BOARD_PO_DIR),$(BOARD_PO_DIR)/$(locale).po) \
	      $(PO_DIR)/$(locale).po) \
	    | $(MSGFMT) -o $(OUTPUT_DIR)/$(locale)/LC_MESSAGES/$(DOMAIN).mo - \
	  $(\n))

clean:
	rm -rf $(TEMP_DIR) $(OUTPUT_DIR)

.PHONY: init build update clean
.SUFFIXES: .po .mo
