
PYTHON=python
DESTDIR=/usr/lib/voikko
MIN_FREQUENCY=9

# Optional vocabulary files
OPTIONAL_LEX=atk-lyhenteet po-oikoluku

# Source files for Sukija version.
SUKIJA_SRC=sukija/README sukija/suomi.inc sukija/suomi.all \
           sukija/suomi.lex sukija/Makefile sukija/suomi.mor sukija/suomi.pro \
           sukija/suomi.sym sukija/LUE.MINUT \
           sukija/sanat/11-19.lex sukija/sanat/olla-ei.lex sukija/sanat/omat.lex \
           sukija/generoi.sh sukija/inc/all.inc \
           sukija/inc/mor.inc sukija/inc/subrule.inc \
           sukija/sukija.py sukija/generate_lex.py


# Files to ship only in the full source package
SRC_ONLY=ChangeLog CONTRIBUTORS README.fi Makefile README COPYING \
         voikko/voikko-fi_FI.all voikko/voikko-fi_FI.sym voikko/voikko-fi_FI.mor \
         voikko/olla-ei.lex \
         voikko/voikko-fi_FI.lex voikko/voikko-fi_FI.pro common/voikkoutils.py \
         vocabulary/joukahainen.xml vocabulary/flags.txt voikko/generate_lex.py \
         common/hfconv.py common/generate_lex_common.py \
         $(SUKIJA_SRC) $(patsubst %,vocabulary/erikoisalat/%.lex,$(OPTIONAL_LEX))

VOIKKO_BINDIST=voikko/voikko-fi_FI.pro voikko/voikko-fi_FI.lex_? voikko/voikko-fi_FI.mor_? \
	voikko/voikko-fi_FI.sym_?

# Shared files needed in Voikko
VOIKKO_COPY_FROM_COMMON=suomi.lex all.inc mor.inc subrule.inc suomi.inc
VOIKKO_COPY_FROM_VOCABULARY=erikoissanat.lex etuliitteet.lex seikkasanat.lex \
	suhdesanat.lex lukusanat.lex lyhenteet.lex yhdyssanat.lex erikoiset.lex \
	poikkeavat.lex lainen.lex taivutustäydennykset.lex sidesanat.lex \
	huudahdussanat.lex

# Lexicon files generated for Voikko from Joukahainen
VOIKKO_LEX_FROM_XML=joukahainen atk laaketiede matluonnontiede kasvatustiede vieraskieliset

# Files to ship in the preprocessed source package
VOIKKO_FI_SRCDIST=$(VOIKKO_COPY_FROM_VOCABULARY) suomi.lex voikko-fi_FI.pro voikko-fi_FI.mor_l \
                  voikko-fi_FI.sym_l voikko-fi_FI.all_l voikko-fi_FI.lex suomi.inc subrule.inc \
                  $(patsubst %,%.lex,$(VOIKKO_LEX_FROM_XML)) olla-ei.lex

# Files to ship in the source package (duplicates are allowed)
SRCDIST=$(SRC_ONLY) $(patsubst %,common/%,$(VOIKKO_COPY_FROM_COMMON)) \
	$(patsubst %,vocabulary/%,$(VOIKKO_COPY_FROM_VOCABULARY))

SM_VERSION=1.0

.PHONY: all clean update-vocabulary voikko voikko-install voikko-preprocessed-l-gzip dist-gzip

all: voikko

voikko: $(patsubst %,voikko/%,$(VOIKKO_COPY_FROM_VOCABULARY)) $(patsubst %,voikko/%,$(VOIKKO_COPY_FROM_COMMON)) \
	$(patsubst %,voikko/%.lex,$(VOIKKO_LEX_FROM_XML))
	@malmake voikko/voikko-fi_FI.pro 2>&1 | grep -v "Warning: No allomorphs generated."

$(patsubst %,voikko/%,$(VOIKKO_COPY_FROM_VOCABULARY)): voikko/%: vocabulary/%
	cp $^ $@

$(patsubst %,voikko/%,$(VOIKKO_COPY_FROM_COMMON)): voikko/%: common/%
	cp $^ $@

voikko/generate_lex.flag: vocabulary/joukahainen.xml vocabulary/flags.txt voikko/generate_lex.py \
	common/voikkoutils.py common/hfconv.py common/generate_lex_common.py
	@grep -B1 "ERROR: base form missing" vocabulary/joukahainen.xml | \
		sed -ne "s|^.*\"w\([^\"]*\)\".*|Base form missing: http://joukahainen.lokalisointi.org/word/edit?wid=\1|p"
	$(PYTHON) voikko/generate_lex.py $(MIN_FREQUENCY)
	touch $@
	@grep "Malaga class not found" voikko/joukahainen.lex

$(patsubst %,voikko/%.lex,$(VOIKKO_LEX_FROM_XML)): voikko/generate_lex.flag

clean:
	rm -f voikko/*_l voikko/transmit common/voikkoutils.pyc common/hfconv.pyc voikko/generate_lex.flag
	rm -f common/generate_lex_common.pyc sukija/sukija.pyc
	rm -f "suomi-malaga-$(SM_VERSION).tar.gz" "voikko-fi-lsrc-$(SM_VERSION).tar.gz"
	rm -rf "suomi-malaga-$(SM_VERSION)" "voikko-fi-$(SM_VERSION)"
	rm -f $(patsubst %,voikko/%,$(VOIKKO_COPY_FROM_VOCABULARY))
	rm -f $(patsubst %,voikko/%,$(VOIKKO_COPY_FROM_COMMON))
	rm -f $(patsubst %,voikko/%.lex,$(VOIKKO_LEX_FROM_XML))
	rm -f sukija/*_l sukija/transmit sukija/sukija.pyc sukija/voikonsanat/*

# Rules for creating the preprocessed source package

voikko-preprocessed-l-gzip: voikko-fi-lsrc-$(SM_VERSION).tar.gz

voikko-fi-lsrc-$(SM_VERSION).tar.gz: voikko $(patsubst %,voikko-fi-$(SM_VERSION)/%, $(sort $(VOIKKO_FI_SRCDIST)))
	tar c --group 0 --owner 0 voikko-fi-$(SM_VERSION) | gzip -9 > $@

$(patsubst %,voikko-fi-$(SM_VERSION)/%, $(sort $(VOIKKO_FI_SRCDIST))): voikko-fi-$(SM_VERSION)/%: voikko/%
	install -m 755 -d voikko-fi-$(SM_VERSION)
	install -m 644 $^ voikko-fi-$(SM_VERSION)


# Rules for creating the source distribution

dist-gzip: suomi-malaga-$(SM_VERSION).tar.gz

suomi-malaga-$(SM_VERSION).tar.gz: $(patsubst %,suomi-malaga-$(SM_VERSION)/%, $(sort $(SRCDIST)))
	tar c --group 0 --owner 0 suomi-malaga-$(SM_VERSION) | gzip -9 > $@

dist-bzip2: suomi-malaga-$(SM_VERSION).tar.bz2

suomi-malaga-$(SM_VERSION).tar.bz2: $(patsubst %,suomi-malaga-$(SM_VERSION)/%, $(sort $(SRCDIST)))
	tar c --group 0 --owner 0 suomi-malaga-$(SM_VERSION) | bzip2 -9 > $@

$(patsubst %,suomi-malaga-$(SM_VERSION)/%, $(sort $(SRCDIST))): suomi-malaga-$(SM_VERSION)/%: %
	install -m 644 -D $^ $@

voikko/transmit: common/transmit.cc
	g++ -g common/transmit.cc -o voikko/transmit

voikko-install: voikko
	install -m 755 -d $(DESTDIR)
	install -m 644 $(VOIKKO_BINDIST) $(DESTDIR)

# Vocabulary update
update-vocabulary:
	wget http://joukahainen.lokalisointi.org/sanastot/joukahainen.xml.gz -O - \
	| gunzip > vocabulary/joukahainen.xml


SUKIJA_COPY_FROM_VOCABULARY=\
erikoiset.lex \
erikoissanat.lex \
etuliitteet.lex \
jokinen.lex \
lainen.lex \
latex.lex \
lukusanat.lex \
lyhenteet.lex \
omat.lex \
poikkeavat.lex \
seikkasanat.lex \
suhdesanat.lex \
taivutustäydennykset.lex \
yhdyssanat.lex \
sidesanat.lex \
huudahdussanat.lex

sukija: $(patsubst %,sukija/voikonsanat/%,$(SUKIJA_COPY_FROM_VOCABULARY)) \
	$(patsubst %,sukija/voikonsanat/%.lex,$(VOIKKO_LEX_FROM_XML))
	@malmake sukija/suomi.pro 2>&1 | grep -v "Warning: No allomorphs generated."

$(patsubst %,sukija/voikonsanat/%,$(SUKIJA_COPY_FROM_VOCABULARY)): sukija/voikonsanat/%: vocabulary/%
	cp $^ $@

$(patsubst %,sukija/voikonsanat/%.lex,$(VOIKKO_LEX_FROM_XML)): vocabulary/joukahainen.xml vocabulary/flags.txt \
	sukija/generate_lex.py common/voikkoutils.py common/hfconv.py common/generate_lex_common.py sukija/sukija.py
	@grep -B1 "ERROR: base form missing" vocabulary/joukahainen.xml | \
		sed -ne "s|^.*\"w\([^\"]*\)\".*|Base form missing: http://joukahainen.lokalisointi.org/word/edit?wid=\1|p"
	$(PYTHON) sukija/generate_lex.py
	@grep "Malaga class not found" sukija/voikonsanat/joukahainen.lex
