.DELETE_ON_ERROR:
LANGS := DE EL ES ET FR ID JA KO NL RO RU TR ZH AR
RM_LANGS := JA KO ZH
IGNORE := VERSION AUTHOR LICENSE
ENGINES := deepl gpt5
#LANGS_deepl := DE EL ES ET FR ID JA KO NL RO RU TR ZH
LANGS_gpt5 := JA KO ZH
MOD_NAME := $(shell perl -MJSON -0777nE 'say decode_json($$_)->{name}' ../META.json)
MOD_PATH := ../lib/$(subst -,/,$(MOD_NAME)).pm
MOD_FILE := $(notdir $(MOD_PATH))
MOD_DIR := $(dir $(MOD_PATH))
MOD_NAME := $(MOD_FILE:.pm=)
SRC_DIR := src
ORIGIN := $(MOD_PATH)
PM := $(notdir $(ORIGIN))
POD := $(PM:.pm=.pod)
SRC := $(POD:%=$(if $(SRC_DIR),$(SRC_DIR)/,)%)
###########
$(foreach E,$(ENGINES),\
$(foreach L,$(LANGS_$E),\
$(eval PODS += $(SRC:.pod=.$E-$L.pod))\
$(eval MDS += $(PM:.pm=.$E-$L.md))\
$(eval READMES += $(if $(filter $L,$(RM_LANGS)),../README.$E-$L.md))\
))
###########
ALL := $(PODS) $(MDS) README.md $(READMES)
all: $(ALL)
ifdef SRC_DIR
$(SRC_DIR):
mkdir -p $(SRC_DIR)
endif
SRCPATH := $(if $(SRC_DIR),$(SRC_DIR)/,)
GREPLE := PERL5LIB=../lib$${PERL5LIB:+:$$PERL5LIB} greple
PODIFY := $(GREPLE) -Mperl --nocolor --le :pod
$(foreach mod,$(ORIGIN),$(eval \
$(SRCPATH)$(subst .pm,.pod,$(notdir $(mod))): $(mod) Makefile; $(PODIFY) $$< > $$@ \
))
XLATE := $(GREPLE) -Mxlate
XLATE += $(if $(XLATE_LABOR),--xlate-labor,--xlate)
XLATE += --xlate-cache=$(if $(XLATE_INIT),clear,yes)
XLATE += --match-podtext --xlate-format=none --all --need=0
MASKFILE=PATTERN_MASK
ifneq ($(wildcard $(MASKFILE)),)
XLATE += --xlate-setopt maskfile=$(MASKFILE)
endif
CONTEXTFILE=CONTEXT.md
ifneq ($(wildcard $(CONTEXTFILE)),)
XLATE += --xlate-context "$$(cat $(CONTEXTFILE))"
endif
ifdef IGNORE
$(foreach ignore,$(IGNORE),$(eval \
XLATE += --exclude '^=head\d[ ]+(?i:$(ignore))\b(?s:.*?)(?=^=|\z)'\
))
endif
deepl_JA_FORM ?= desumasu
deepl_JA_DICT := $(wildcard *.dict)
deepl_JA_FILTER := $(GREPLE) -Mperl -Msubst::desumasu \
$(if $(findstring $(deepl_JA_FORM).dict,$(deepl_JA_DICT)),--dict $(deepl_JA_FORM).dict) \
--pod --subst --all --no-color --need=0 \
--$(deepl_JA_FORM)
define LANG_POD
$(SRCPATH)%.$2-$1.pod: $(SRCPATH)%.pod Makefile
ifdef $2_$1_FILTER
$$(XLATE) --xlate-engine=$2 --xlate-to $1 $$< | $$($2_$1_FILTER) > $$@
else
$$(XLATE) --xlate-engine=$2 --xlate-to $1 $$< > $$@
endif
endef
$(foreach E,$(ENGINES),$(foreach L,$(LANGS),$(eval $(call LANG_POD,$L,$E))))
%.md: $(SRCPATH)%.pod
pod2markdown $< > $@
define LANG_README
../README.$2-$1.md: $(MOD_NAME).$2-$1.md
cp $$< $$@
endef
$(foreach E,$(ENGINES),\
$(foreach L,$(LANGS),\
$(eval $(call LANG_README,$L,$E))\
))
README.md: Makefile
exec > $@ && \
printf '## Languages\n\n' && \
for md in $(MDS) ; \
do \
echo "- [$$md]($$md)" ; \
done
clean:
rm -f $(SRC) $(ALL)