# Build configuration. See README for more information.
PYTHON=python
VOIKKO_BUILDDIR=voikko
VVFST_BUILDDIR=vvfst
DESTDIR=/usr/lib/voikko
GENLEX_OPTS=
EXTRA_LEX=
VOIKKO_VARIANT=standard
VOIKKO_DESCRIPTION=suomi (perussanasto)
SM_PATCHINFO=
VANHAHKOT_MUODOT=yes
VANHAT_MUODOT=no
SUKIJAN_MUODOT=no
VOIKKO_DEBUG=no
# Include user's configuration
-include config.mak
# Suomi-malaga version
SM_VERSION=1.19
SM_BUILDDATE=$(shell date -R -u)
# Optional vocabulary files (needed in the source package)
OPTIONAL_LEX=atk-lyhenteet po-oikoluku linux-distributions
# Source files for Sukija version.
SUKIJA_SRC=sukija/generate_lex.py sukija/generoi.sh sukija/LUE.MINUT \
sukija/Makefile sukija/malaga1.png sukija/malaga2.png \
sukija/malaga3.png sukija/README sukija/sanat/11-19.lex \
sukija/sanat/jokinen.lex sukija/sanat/jokinen.sh sukija/ei-sukija.txt \
sukija/sanat/latex.lex sukija/sanat/olla-ei.lex sukija/sanat/omat.lex \
sukija/sanat/etuliitteet.lex sukija/sanat/lyhenteet.lex sukija/sanat/atk-lyhenteet.lex \
sukija/sukija.py sukija/suomi.all sukija/suomi.sym sukija/suomi.tex \
sukija/suomi.inc sukija/suomi.lex sukija/suomi.mor sukija/suomi.pro
VVFST_LEXC=vvfst/suomi.lexc vvfst/olla-ei.lexc vvfst/poikkeavat.lexc vvfst/lukusanat.lexc \
vvfst/asemosanat.lexc vvfst/seikkasanat.lexc vvfst/suhdesanat.lexc
# Files to ship only in the full source package
SRC_ONLY=ChangeLog CONTRIBUTORS README.fi Makefile README COPYING \
voikko/voikko-fi_FI.pro.in common/voikkoutils.py \
vocabulary/autocorrect/autocorrect.dtd vocabulary/autocorrect/fi.xml \
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)) \
vvfst/generate_lex.py vvfst/generate_taivutuskaavat.py vvfst/root.lexc \
vvfst/taivutuskaavat.lexc.in vvfst/index.txt.in vvfst/filter_lexc.py \
vvfst/autocorrect_to_lexc.py vvfst/autocorrect.foma.in \
vvfst/main.foma.in $(VVFST_LEXC) vvfst/generate_sukija.py vvfst/poikkeavat-sukija.lexc
VOIKKO_BINDIST=$(VOIKKO_BUILDDIR)/voikko-fi_FI.pro $(VOIKKO_BUILDDIR)/voikko-fi_FI.lex_? \
$(VOIKKO_BUILDDIR)/voikko-fi_FI.mor_? $(VOIKKO_BUILDDIR)/voikko-fi_FI.sym_?
VVFST_BINDIST=$(VVFST_BUILDDIR)/index.txt $(VVFST_BUILDDIR)/mor.vfst $(VVFST_BUILDDIR)/autocorr.vfst
VVFST_GENERATED_LEXC_SUFFIXES=ee em ep es h l n nl t p a s c
VVFST_GENERATED_LEXC=$(patsubst %,$(VVFST_BUILDDIR)/joukahainen-%.lexc,$(VVFST_GENERATED_LEXC_SUFFIXES))
VVFST_TAIVUTUSKAAVAT_OPTS=
ifeq "$(VANHAT_MUODOT)" "yes"
VVFST_TAIVUTUSKAAVAT_OPTS=--vanhat
endif
# Shared files needed in Voikko
VOIKKO_COPY_FROM_COMMON=mor.inc subrule.inc
VOIKKO_COPY_FROM_VOCABULARY=erikoissanat.lex seikkasanat.lex \
suhdesanat.lex lukusanat.lex lyhenteet.lex yhdyssanat.lex erikoiset.lex \
poikkeavat.lex lainen.lex taivutustaydennykset.lex
VOIKKO_COPY_FROM_VOIKKO=voikko-fi_FI.all voikko-fi_FI.sym voikko-fi_FI.mor \
olla-ei.lex suomi.lex suomi.inc voikko-fi_FI.lex
SUKIJA_LEX_FROM_XML=joukahainen atk laaketiede matluonnontiede kasvatustiede
# 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)) \
$(patsubst %,voikko/%,$(VOIKKO_COPY_FROM_VOIKKO))
VOIKKO_ACTUALLY_COPY_FROM_VOIKKO=
ifneq "$(VOIKKO_BUILDDIR)" "voikko"
VOIKKO_ACTUALLY_COPY_FROM_VOIKKO=$(VOIKKO_COPY_FROM_VOIKKO)
endif
.PHONY: all clean update-vocabulary voikko voikko-install dist-gzip vvfst vvfst-install vvfst-sukija vvfst-sukija-install
all: voikko
voikko: $(patsubst %,$(VOIKKO_BUILDDIR)/%,$(VOIKKO_COPY_FROM_VOCABULARY)) $(patsubst %,$(VOIKKO_BUILDDIR)/%,$(VOIKKO_COPY_FROM_COMMON)) \
$(patsubst %,$(VOIKKO_BUILDDIR)/%,$(VOIKKO_ACTUALLY_COPY_FROM_VOIKKO)) \
$(VOIKKO_BUILDDIR)/main.lex $(VOIKKO_BUILDDIR)/voikko-fi_FI.pro $(VOIKKO_BUILDDIR)/config.inc
@malmake $(VOIKKO_BUILDDIR)/voikko-fi_FI.pro 2>&1 | grep -v "Warning: No allomorphs generated."
$(patsubst %,$(VOIKKO_BUILDDIR)/%,$(VOIKKO_COPY_FROM_VOCABULARY)): $(VOIKKO_BUILDDIR)/%: vocabulary/%
@mkdir -p $(VOIKKO_BUILDDIR)
cp $^ $@
$(patsubst %,$(VOIKKO_BUILDDIR)/%,$(VOIKKO_COPY_FROM_COMMON)): $(VOIKKO_BUILDDIR)/%: common/%
@mkdir -p $(VOIKKO_BUILDDIR)
cp $^ $@
$(patsubst %,$(VOIKKO_BUILDDIR)/%,$(VOIKKO_ACTUALLY_COPY_FROM_VOIKKO)): $(VOIKKO_BUILDDIR)/%: voikko/%
@mkdir -p $(VOIKKO_BUILDDIR)
cp $^ $@
$(VOIKKO_BUILDDIR)/joukahainen.lex: 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.puimula.org/word/edit?wid=\1|p"
$(PYTHON) voikko/generate_lex.py $(GENLEX_OPTS) --destdir=$(VOIKKO_BUILDDIR)
$(VOIKKO_BUILDDIR)/main.lex: $(VOIKKO_BUILDDIR)/joukahainen.lex $(EXTRA_LEX)
cat $^ > $@
# Rule to generate voikko-fi_FI.pro
VOIKKO_MURRE=no
ifeq "$(findstring dialect,$(GENLEX_OPTS))" "dialect"
VOIKKO_MURRE=yes
endif
VOIKKO_PRO_SEDSCRIPT="s/VANHAHKOT_MUODOT/$(VANHAHKOT_MUODOT)/; \
s/VANHAT_MUODOT/$(VANHAT_MUODOT)/; \
s/VOIKKO_MURRE/$(VOIKKO_MURRE)/; \
s/SUKIJAN_MUODOT/$(SUKIJAN_MUODOT)/; \
s/SM_VOIKKO_VARIANT/$(VOIKKO_VARIANT)/; \
s/SM_VOIKKO_DESCRIPTION/$(VOIKKO_DESCRIPTION)/; \
s/SM_VERSION/$(SM_VERSION)/; \
s/SM_PATCHINFO/$(SM_PATCHINFO)/; \
s/SM_BUILDCONFIG/$(subst /,\\/,GENLEX_OPTS=$(GENLEX_OPTS) EXTRA_LEX=$(EXTRA_LEX))/; \
s/SM_BUILDDATE/$(SM_BUILDDATE)/"
$(VOIKKO_BUILDDIR)/voikko-fi_FI.pro: voikko/voikko-fi_FI.pro.in
sed -e $(VOIKKO_PRO_SEDSCRIPT) < $^ > $@
$(VOIKKO_BUILDDIR)/config.inc:
echo "define @voikko_debug := $(VOIKKO_DEBUG);" > $@
clean:
rm -f $(VOIKKO_BUILDDIR)/*_l common/voikkoutils.pyc common/hfconv.pyc
rm -f $(VOIKKO_BUILDDIR)/config.inc
rm -f common/generate_lex_common.pyc
rm -f "suomi-malaga-$(SM_VERSION).tar.gz"
rm -rf "suomi-malaga-$(SM_VERSION)" "voikko-fi-$(SM_VERSION)"
rm -f $(patsubst %,$(VOIKKO_BUILDDIR)/%,$(VOIKKO_COPY_FROM_VOCABULARY))
rm -f $(patsubst %,$(VOIKKO_BUILDDIR)/%,$(VOIKKO_COPY_FROM_COMMON))
rm -f $(patsubst %,$(VOIKKO_BUILDDIR)/%,$(VOIKKO_ACTUALLY_COPY_FROM_VOIKKO))
rm -f $(VOIKKO_BUILDDIR)/joukahainen.lex $(VOIKKO_BUILDDIR)/main.lex $(VOIKKO_BUILDDIR)/voikko-fi_FI.pro
rm -rf sukija/*_l sukija/transmit sukija/sukija.pyc sukija/voikonsanat
rm -f sukija/k1 sukija/k2 sukija/foo sukija/bar
rm -f $(VVFST_BUILDDIR)/all.att $(VVFST_BUILDDIR)/all.lexc $(VVFST_BUILDDIR)/main.foma $(VVFST_BUILDDIR)/mor.vfst
rm -f $(VVFST_BUILDDIR)/autocorrect.att $(VVFST_BUILDDIR)/autocorrect.foma $(VVFST_BUILDDIR)/autocorrect.lexc
rm -f $(VVFST_BUILDDIR)/autocorr.vfst $(VVFST_BUILDDIR)/taivutuskaavat.lexc $(VVFST_BUILDDIR)/index.txt
rm -f $(VVFST_GENERATED_LEXC) $(VVFST_BUILDDIR)/joukahainen.lexc.stamp
rm -f TAGS
rm -f $(VVFST_BUILDDIR)/all-sukija.att $(VVFST_BUILDDIR)/all-sukija.lexc $(VVFST_BUILDDIR)/main-sukija.foma*
rm -f $(VVFST_BUILDDIR)/generate_sukija.py.stamp $(VVFST_BUILDDIR)/sukija.fst $(VVFST_BUILDDIR)/test.out
rm -f $(VVFST_BUILDDIR)/mor-sukija.vfst
# 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-install: voikko
install -m 755 -d $(DESTDIR)/2/mor-$(VOIKKO_VARIANT)
install -m 644 $(VOIKKO_BINDIST) $(DESTDIR)/2/mor-$(VOIKKO_VARIANT)
# Vocabulary update
update-vocabulary:
wget http://joukahainen.puimula.org/sanastot/joukahainen.xml.gz -O - \
| gunzip > vocabulary/joukahainen.xml
SUKIJA_COPY_FROM_VOCABULARY=\
erikoisalat/linux-distributions.lex \
erikoiset.lex \
erikoissanat.lex \
lainen.lex \
lukusanat.lex \
poikkeavat.lex \
seikkasanat.lex \
suhdesanat.lex \
taivutustaydennykset.lex \
yhdyssanat.lex
sukija: $(patsubst %,sukija/voikonsanat/%,$(SUKIJA_COPY_FROM_VOCABULARY)) \
$(patsubst %,sukija/voikonsanat/%.lex,$(SUKIJA_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/%
@mkdir -p sukija/voikonsanat/erikoisalat
cp $^ $@
$(patsubst %,sukija/voikonsanat/%.lex,$(SUKIJA_LEX_FROM_XML)): vocabulary/joukahainen.xml vocabulary/flags.txt \
common/voikkoutils.py common/hfconv.py common/generate_lex_common.py $(SUKIJA_SRC)
@grep -B1 "ERROR: base form missing" vocabulary/joukahainen.xml | \
sed -ne "s|^.*\"w\([^\"]*\)\".*|Base form missing: http://joukahainen.puimula.org/word/edit?wid=\1|p"
$(PYTHON) sukija/generate_lex.py
-@grep "Malaga class not found" sukija/voikonsanat/joukahainen.lex
vvfst: $(VVFST_BUILDDIR)/mor.vfst $(VVFST_BUILDDIR)/autocorr.vfst $(VVFST_BUILDDIR)/index.txt
$(VVFST_BUILDDIR)/joukahainen.lexc.stamp: vocabulary/joukahainen.xml vocabulary/flags.txt vvfst/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.puimula.org/word/edit?wid=\1|p"
$(PYTHON) vvfst/generate_lex.py $(GENLEX_OPTS) --destdir=$(VVFST_BUILDDIR)
touch $@
$(VVFST_BUILDDIR)/taivutuskaavat.lexc: vvfst/taivutuskaavat.lexc.in vvfst/generate_taivutuskaavat.py
$(PYTHON) vvfst/generate_taivutuskaavat.py $(GENLEX_OPTS) $(VVFST_TAIVUTUSKAAVAT_OPTS) --destdir=$(VVFST_BUILDDIR)
$(VVFST_BUILDDIR)/all.lexc: vvfst/filter_lexc.py vvfst/root.lexc $(VVFST_BUILDDIR)/taivutuskaavat.lexc $(VVFST_BUILDDIR)/joukahainen.lexc.stamp $(VVFST_LEXC)
$(PYTHON) vvfst/filter_lexc.py $(GENLEX_OPTS) $(VVFST_TAIVUTUSKAAVAT_OPTS) vvfst/root.lexc $(VVFST_BUILDDIR)/taivutuskaavat.lexc $(VVFST_GENERATED_LEXC) $(VVFST_LEXC) > $@
$(VVFST_BUILDDIR)/autocorrect.lexc: vocabulary/autocorrect/fi.xml vvfst/autocorrect_to_lexc.py
$(PYTHON) vvfst/autocorrect_to_lexc.py vocabulary/autocorrect/fi.xml $@
$(VVFST_BUILDDIR)/main.foma: vvfst/main.foma.in
sed -e "s,VVFST_BUILDDIR,$(VVFST_BUILDDIR)," < $^ > $@
$(VVFST_BUILDDIR)/autocorrect.foma: vvfst/autocorrect.foma.in
sed -e "s,VVFST_BUILDDIR,$(VVFST_BUILDDIR)," < $^ > $@
$(VVFST_BUILDDIR)/all.att: $(VVFST_BUILDDIR)/all.lexc $(VVFST_BUILDDIR)/main.foma
foma -f $(VVFST_BUILDDIR)/main.foma | grep -v "defined but not used" 2>&1
$(VVFST_BUILDDIR)/autocorrect.att: $(VVFST_BUILDDIR)/autocorrect.lexc $(VVFST_BUILDDIR)/autocorrect.foma
foma -f $(VVFST_BUILDDIR)/autocorrect.foma | grep -v "defined but not used" 2>&1
$(VVFST_BUILDDIR)/mor.vfst: $(VVFST_BUILDDIR)/all.att
cat $^ | sort -n | voikkovfstc -o $@
$(VVFST_BUILDDIR)/autocorr.vfst: $(VVFST_BUILDDIR)/autocorrect.att
cat $^ | sort -n | voikkovfstc -o $@
VVFST_PRO_SEDSCRIPT="s/SM_VOIKKO_VARIANT/$(VOIKKO_VARIANT)/; \
s/SM_VOIKKO_DESCRIPTION/$(VOIKKO_DESCRIPTION)/; \
s/SM_VERSION/$(SM_VERSION)/; \
s/SM_PATCHINFO/$(SM_PATCHINFO)/; \
s/SM_BUILDCONFIG/$(subst /,\\/,GENLEX_OPTS=$(GENLEX_OPTS) EXTRA_LEX=$(EXTRA_LEX))/; \
s/SM_BUILDDATE/$(SM_BUILDDATE)/"
$(VVFST_BUILDDIR)/index.txt: vvfst/index.txt.in
sed -e $(VVFST_PRO_SEDSCRIPT) < $^ > $@
vvfst-install: vvfst
install -m 755 -d $(DESTDIR)/5/mor-$(VOIKKO_VARIANT)
install -m 644 $(VVFST_BINDIST) $(DESTDIR)/5/mor-$(VOIKKO_VARIANT)
TAGS: $(patsubst %,vocabulary/%,$(VOIKKO_COPY_FROM_VOCABULARY)) \
$(patsubst %,vocabulary/erikoisalat/%.lex,$(OPTIONAL_LEX))
etags --lang=none --output=$@ \
--regex='/[ \t]*\[.*\<perusmuoto:[ \t]*"\([^"]+\)"/\1/' \
-- $^
# Generate a big Voikko dictionary to use in Sukija (according to Harri Pitkänen).
#
voikko-sukija:
make voikko VANHAT_MUODOT=yes SUKIJAN_MUODOT=yes \
GENLEX_OPTS='--style=dialect,foreign,incorrect --min-frequency=10 \
--extra-usage=sukija,it,medicine,science,education,orgname,nature' \
EXTRA_LEX="vocabulary/erikoisalat/atk-lyhenteet.lex" VOIKKO_DEBUG=yes
# Rules for creating vvfst morphology for Sukija indexer. See file
# $(VVFST_BUILDDIR)/generate_sukija.py for details.
#
vvfst-sukija: GENLEX_OPTS=--style=dialect,foreign,foreignloan,inappropriate,incorrect,international,old --min-frequency=10 --extra-usage=education,human,it,medicine,nature,orgname,science --sukija
vvfst-sukija: $(VVFST_BUILDDIR)/mor-sukija.vfst $(VVFST_BUILDDIR)/autocorr.vfst voikko/voikko-fi_FI.pro.in $(VVFST_BUILDDIR)/index.txt
#vvfst-sukija: VOIKKO_VARIANT=sukija
#vvfst-sukija: VOIKKO_DESCRIPTION=suomi (perussanasto) Sukija
vvfst-sukija-ys: GENLEX_OPTS=--style=dialect,foreign,foreignloan,inappropriate,incorrect,international,old --min-frequency=10 --extra-usage=education,human,it,medicine,nature,orgname,science --sukija --sukija-ys
vvfst-sukija-ys: $(VVFST_BUILDDIR)/mor-sukija.vfst voikko/voikko-fi_FI.pro.in $(VVFST_BUILDDIR)/index.txt
$(VVFST_BUILDDIR)/all-sukija.lexc: $(VVFST_BUILDDIR)/all.lexc $(VVFST_BUILDDIR)/generate_sukija.py.stamp $(VVFST_BUILDDIR)/poikkeavat-sukija.lexc
$(PYTHON) vvfst/generate_sukija.py $(GENLEX_OPTS) --destdir=$(VVFST_BUILDDIR)
$(VVFST_BUILDDIR)/all-sukija.att: $(VVFST_BUILDDIR)/all-sukija.lexc $(VVFST_BUILDDIR)/main-sukija.foma
foma -f $(VVFST_BUILDDIR)/main-sukija.foma | grep -v "defined but not used" 2>&1
$(VVFST_BUILDDIR)/main-sukija.foma: $(VVFST_BUILDDIR)/main.foma
sed -e 's,/all,/all-sukija,' < $^ > $@
$(VVFST_BUILDDIR)/mor-sukija.vfst: $(VVFST_BUILDDIR)/all-sukija.att
cat $^ | sort -n | voikkovfstc -o $@
cp $@ $(VVFST_BUILDDIR)/mor.vfst
$(VVFST_BUILDDIR)/generate_sukija.py.stamp: $(VVFST_BUILDDIR)/generate_sukija.py
touch $@
vvfst-sukija-install: vvfst-sukija
install -m 755 -d $(DESTDIR)/5/mor-$(VOIKKO_VARIANT)
install -m 644 $(VVFST_BINDIST) $(DESTDIR)/5/mor-$(VOIKKO_VARIANT)