Blob Blame History Raw

# 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)