# 
# Copyright (c) 2023 Ricoh Company, Ltd.
# 
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#     http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# 
# 各種設定

# パスの設定
TOOLS           = ../tools
TOOLS_INCL      = $(TOOLS)/include
TOOLS_SRC       = $(TOOLS)/src
TOOLS_BIN       = $(TOOLS)/bin
TOOLS_PERL      = $(TOOLS)/perl
STEM            = $(TOOLS_BIN)/stem

# ツールの設定
INSTALL         = cp
CP              = cp
MKDIR           = /bin/mkdir -p
RM              = /bin/rm -f
RMDIR           = /bin/rm -fr
SH              = sh -x

# 出力先ディレクトリ
OUT_DIR         = ./unadic

# 作業用ディレクトリ
WORK_DIR        = ./swork

# ソースから直接作成されるソースデータ
SRC_DATA1       = $(SRC_FORM_DAT) $(SRC_LEMMA_DAT) $(VAR1_DAT) $(VAR2_DAT) $(SRC_VAR_DAT) \
                  $(FORM_DAT) $(INF_DAT) $(FORM_EXC_DAT) $(NORM_INF_DAT) $(NORM_VAR_DAT) \
                  $(NORM_DAT) $(EXP_INF_DAT) $(EXP_INF_VAR_DAT) $(EXP_VAR_INF_DAT) $(EXP_DAT) \
                  $(SRC_RUL) $(SRC_DIC)
SRC_FORM_DAT    = $(WORK_DIR)/src_form.dat
SRC_LEMMA_DAT   = $(WORK_DIR)/src_lemma.dat
VAR1_DAT        = $(WORK_DIR)/var1.dat
VAR2_DAT        = $(WORK_DIR)/var2.dat
SRC_VAR_DAT     = $(WORK_DIR)/src_var.dat
FORM_DAT        = $(WORK_DIR)/form.dat
INF_DAT         = $(WORK_DIR)/inf.dat
FORM_EXC_DAT    = $(WORK_DIR)/form_exc.dat
NORM_INF_DAT    = $(WORK_DIR)/norm_inf.dat
NORM_VAR_DAT    = $(WORK_DIR)/norm_var.dat
NORM_DAT        = $(WORK_DIR)/norm.dat
EXP_INF_DAT     = $(WORK_DIR)/exp_inf.dat
EXP_INF_VAR_DAT = $(WORK_DIR)/exp_inf_var.dat
EXP_VAR_INF_DAT = $(WORK_DIR)/exp_var_inf.dat
EXP_DAT         = $(WORK_DIR)/exp.dat
SRC_RUL         = $(WORK_DIR)/rl_stem.src
SRC_DIC         = $(WORK_DIR)/dic_stem.src

# 実行時に作成されるソースデータ
SRC_DATA2       = $(SRC_RUL_KEY) $(SRC_RUL_STEM) $(SRC_RUL_IDX) $(SRC_DIC_KEY) $(SRC_DIC_EXP) \
                  $(SRC_DIC_IDX) $(MAP_RUL_KEY) $(MAP_RUL_STEM) $(MAP_DIC_KEY) $(MAP_DIC_EXP)

# SRC_RULから作成されるデータ
SRC_RUL_KEY     = $(WORK_DIR)/ruleKey.src
SRC_RUL_STEM    = $(WORK_DIR)/ruleStem.src
SRC_RUL_IDX     = $(WORK_DIR)/ruleIndex.src

# SRC_DICから作成されるデータ
SRC_DIC_KEY     = $(WORK_DIR)/dictKey.src
SRC_DIC_EXP     = $(WORK_DIR)/dictExp.src
SRC_DIC_IDX     = $(WORK_DIR)/dictIndex.src
MAP_RUL_KEY     = $(WORK_DIR)/ruleKey.map
MAP_RUL_STEM    = $(WORK_DIR)/ruleStem.map
MAP_DIC_KEY     = $(WORK_DIR)/dictKey.map
MAP_DIC_EXP     = $(WORK_DIR)/dictExp.map

# 作業用データ
WORK_DATA		= $(WORK_DIR)/rl_stem.tmp \
                  $(WORK_DIR)/add.tmp \
				  $(WORK_DIR)/del.tmp

# SRC_DATA1, SRC_DATA2を作成するツールと補助データ
SH_MKSTEM       = $(TOOLS_PERL)/mkstem.sh
PATHFILE        = $(WORK_DIR)/path.txt

# UNAの実行用データ
DATA            = $(BIN_STEMDAT)
BIN_STEMDAT     = $(WORK_DIR)/stemmer.dat

all: $(DATA)

$(SRC_RUL) $(SRC_DIC): $(WORK_DIR)/stem-src.ready

$(WORK_DIR)/stem-src.ready: $(SH_MKSTEM) $(WORK_DIR)
	$(SH) $(SH_MKSTEM)
	touch $(WORK_DIR)/stem-src.ready

$(WORK_DIR):
	$(MKDIR) $(WORK_DIR)

dic: $(BIN_STEMDAT)

$(MAP_RUL_KEY): $(SRC_RUL)
	perl $(TOOLS_PERL)/reverse_key.pl $(SRC_RUL) | \
	    perl -a -nle 'print $$F[0]' | perl $(TOOLS_PERL)/sortu.pl | \
	    perl $(TOOLS_PERL)/get_offset.pl > $(MAP_RUL_KEY)

$(MAP_RUL_STEM): $(SRC_RUL)
	perl -a -nle 'print $$F[1] if($$F[0]ne$$F[1])' $(SRC_RUL) | \
	    perl $(TOOLS_PERL)/sortu.pl | perl $(TOOLS_PERL)/get_offset.pl > \
	    $(MAP_RUL_STEM)

$(SRC_RUL_KEY): $(MAP_RUL_KEY)
	perl -a -nle 'print $$F[0]' $(MAP_RUL_KEY) > $(SRC_RUL_KEY)

$(SRC_RUL_STEM): $(MAP_RUL_STEM)
	perl -a -nle 'print $$F[0]' $(MAP_RUL_STEM) > $(SRC_RUL_STEM)

$(SRC_RUL_IDX): $(SRC_RUL) $(MAP_RUL_KEY) $(MAP_RUL_STEM)
	perl $(TOOLS_PERL)/reverse_key.pl $(SRC_RUL) | \
	    perl $(TOOLS_PERL)/sortu.pl > $(WORK_DIR)/rl_stem.tmp
	perl $(TOOLS_PERL)/mk_index.pl -d $(WORK_DIR)/rl_stem.tmp \
	    -k $(MAP_RUL_KEY) -s $(MAP_RUL_STEM) > $(SRC_RUL_IDX)

$(MAP_DIC_KEY): $(SRC_DIC)
	perl -a -nle 'print $$F[0]' $(SRC_DIC) | \
	    perl $(TOOLS_PERL)/get_offset.pl > $(MAP_DIC_KEY)

$(MAP_DIC_EXP): $(SRC_DIC)
	perl -a -nle 'print $$F[2] if($$F[0]ne$$F[2])' $(SRC_DIC) | \
	    perl $(TOOLS_PERL)/sortu.pl | perl $(TOOLS_PERL)/get_offset.pl > \
	    $(MAP_DIC_EXP)

$(SRC_DIC_KEY): $(MAP_DIC_KEY)
	perl -a -nle 'print $$F[0]' $(MAP_DIC_KEY) > $(SRC_DIC_KEY)

$(SRC_DIC_EXP): $(MAP_DIC_EXP)
	perl -a -nle 'print $$F[0]' $(MAP_DIC_EXP) | perl -pe 's/,/ /g' > $(SRC_DIC_EXP)

$(SRC_DIC_IDX): $(SRC_DIC) $(MAP_DIC_KEY) $(MAP_DIC_EXP)
	perl $(TOOLS_PERL)/mk_index.pl -d $(SRC_DIC) \
	    -k $(MAP_DIC_KEY) -e $(MAP_DIC_EXP) > $(SRC_DIC_IDX)

$(BIN_STEMDAT): $(SRC_DIC_KEY) $(SRC_DIC_EXP) $(SRC_DIC_IDX) \
                $(SRC_RUL_KEY) $(SRC_RUL_STEM) $(SRC_RUL_IDX) $(PATHFILE)
	$(STEM) -M $(PATHFILE) $(BIN_STEMDAT)

$(PATHFILE):
	echo $(SRC_DIC_KEY)  >  $(PATHFILE)
	echo $(SRC_DIC_EXP)  >> $(PATHFILE)
	echo $(SRC_DIC_IDX)  >> $(PATHFILE)
	echo $(SRC_RUL_KEY)  >> $(PATHFILE)
	echo $(SRC_RUL_STEM) >> $(PATHFILE)
	echo $(SRC_RUL_IDX)  >> $(PATHFILE)

clean: clean-all

clean-all: clean-data clean-install

clean-data:
	$(RMDIR) $(WORK_DIR)

clean-install:
	$(RMDIR) $(OUT_DIR)

install: install-all

install-all: install-data

install-data: $(DATA) make-dir
	$(INSTALL) $(BIN_STEMDAT) $(OUT_DIR)/stem/stemmer.dat

make-dir:
	$(MKDIR) $(OUT_DIR)/stem
