# Magyar Ispell helyesrsi sztr
# makefile v0.21 (2007-09-12)

#######################################################################
# Felhasznli bellts

# KNYVTRAK 
# clknyvtrak prefixuma
PREFIX?=/usr
# ispell clknyvtr; ide kerlnek: magyar.hash hungarian.hash magyar.aff
ISPELLDIR?=$(PREFIX)/lib/ispell
# myspell clknyvtr; ide kerlnek:
# hu_HU.dic hu_HU.aff hungarian.dic hungarian.aff
MYSPELLDIR?=$(PREFIX)/share/myspell
# OpenOffice clknyvtr: ide kerlnek: hu_HU.aff hu_HU.dic
OODIR?=$(PREFIX)/OpenOffice.org/user/wordbook
# parancsok
INSTALL_DATA?=install
M4?=m4
CC?=cc
FLEX?=flex
AWK?=awk

# a szotar sikeres elkeszitesehez BOURNE kompatibilis shell kell!
# ilyenek a ksh, bash, zsh.
SH=/bin/sh

# Felhasznli bellts vge
#######################################################################

# gykrknyvtr
ROOTDIR=$(shell pwd)
# munkaknyvtar
WRKDIR=$(ROOTDIR)/tmp
# a sztrknyvtr
SZOTAR=$(ROOTDIR)/szotar
# affix llomnyok
AFFDIR=$(ROOTDIR)/aff
# scriptek
BINDIR=$(ROOTDIR)/bin
# awk scriptek
AWKDIR=$(ROOTDIR)/awk
# sztrfjl
DICT=$(WRKDIR)/dictionary
# soremels
EN=
EC=
ECHO_N=$(shell echo -n)
ifeq "$(ECHO_N)" ""
  EN=-n
else
  EC="\\c"
endif
CATUTF="$(BINDIR)/catutf"

# keressi tvonalak:
	vpath %.aff $(AFFDIR)
	vpath %.aff $(WRKDIR)
	vpath %.hash $(WRKDIR)
	vpath %.dict $(WRKDIR)
	vpath %.awk $(AWKDIR)

# ez a default target ha nincs megadva paramter
default: myspell
	@cat $(ROOTDIR)/logo.txt | $(CATUTF)

# modulvlaszts, mens interfsz
menu:
	@vi szotar.konf
	#@$(SH) bin/modul $(SZOTAR)
	make myspell

# munkaknyvtrak ltrehozsa
$(WRKDIR) $(OODIR) $(MYSPELLDIR) $(ISPELLDIR): 
	@mkdir -p $@ 

# hasttbla ltrehozsa a megfelel helyesrs-ellenrzhz (Ispell/Myspell)
# magyar4X.hash ahol X={ispell,myspell}
magyar4ispell.hash: $(WRKDIR) magyar4ispell.dict magyar.aff
	@echo "===> Ispell ragozsi sztr (magyar4ispell.hash)" | $(CATUTF)
	@buildhash $(WRKDIR)/magyar4ispell.dict $(WRKDIR)/magyar.aff \
	    $(WRKDIR)/magyar4ispell.hash 2> $(WRKDIR)/magyar4ispell.log

# sztr (.dic llomny) ltrehozsa a megfelel helyesrs-ellenrzhz (Ispell/Myspell)
# magyar4X.dict ahol X={ispell,myspell}
magyar4%.dict: $(WRKDIR)
	@echo "===> magyar $(*F) alapsztr (magyar4$(*F).dict) ellltsa" | $(CATUTF)

	@echo "==> szimbolikus ktsek ltrehozsa a szotar.konf alapjn" | $(CATUTF)
	@$(SH) bin/makesymlink $(WRKDIR) szotar.konf

	@echo "==> sztrak egybemsolsa" | $(CATUTF)
	@$(SH) bin/copydict $(WRKDIR) $(WRKDIR) $(*F)

	@echo "==> igbl kpzett alakok ellltsa" | $(CATUTF)
	@$(SH) bin/igesgen $(ROOTDIR)

	@echo "==> igk" | $(CATUTF)
	@$(SH) bin/igek $(ROOTDIR)

# egyb kivtelek: az m4 miatt nem megy kln hjprogramba
	@echo "==> kivtelek" | $(CATUTF)
	@cat $(SZOTAR)/kivetelek/igekotos/*.2* \
		| grep -v ^# | $(M4) | LC_ALL=C $(AWK) -f $(AWKDIR)/tovek.awk -v param="/X" \
		>> $(DICT)
	@echo $(EN) ."$(EC)"
	@cat $(SZOTAR)/kivetelek/ragozatlan/*.1* \
		| $(M4) | grep -v ^# | grep -v "#[A-Z]" \
		| sed 's/[	 ]*#.*$$//' | tr "\t" "\n" \
		>> $(DICT)
	@echo $(EN) ."$(EC)"
	@cat $(SZOTAR)/kivetelek/ragozatlan/*.1* \
		| $(M4) | grep -v ^# | grep -i "#$(*F)" | sed 's/[	 ]*#.*$$//' \
		| tr "\t" "\n" \
		>> $(DICT)
	@echo $(EN) ."$(EC)"
	@cat $(WRKDIR)/ragozatlan.2 $(SZOTAR)/kivetelek/ragozatlan/*.2* \
		| $(M4) | $(BINDIR)/field | grep -v ^# | grep -v "#[A-Z]" \
		| sed 's/[	 ]*#.*$$//' \
		| LC_ALL=C $(AWK) -f $(AWKDIR)/tovek.awk \
		>> $(DICT)
	@echo $(EN) ."$(EC)"
	@cat $(WRKDIR)/ragozatlan.2 $(SZOTAR)/kivetelek/ragozatlan/*.2* \
		| $(M4) | $(BINDIR)/field | grep -v ^# | grep -i "#$(*F)" | sed 's/[	 ]*#.*$$//' \
		| LC_ALL=C $(AWK) -f $(AWKDIR)/tovek.awk \
		>> $(DICT)
	@echo Rendben.

	@echo "==> nvszk" | $(CATUTF)
	@$(SH) bin/fonevek $(ROOTDIR)

	@echo "==> morfolgiai kdok" | $(CATUTF)
	@$(SH) bin/kodok $(ROOTDIR)

	@echo $(EN) ."$(EC)"

	@echo "==> tiltott szavak"
	@$(SH) bin/tiltott $(ROOTDIR) $(*F)

	@mv $(DICT) $(WRKDIR)/magyar4$(*F).dict
	@echo Rendben.

# ragozsi tblzat (magyar.aff) ellltsa
magyar.aff: $(WRKDIR) eleje.aff ige_alanyi.aff fonev.aff fonev_kepzo.aff ige_kepzo.aff
	@echo "===> ragozsi tblzat (magyar.aff) ellltsa" | $(CATUTF)
	@cd $(AFFDIR);\
	    cat eleje.aff ige_kepzo.aff fonev_kepzo.aff ige_morfo.aff ige_alanyi.aff \
            fonev.aff fonev_morfo.aff ige_targyas.aff | $(M4) > $(WRKDIR)/magyar.aff;

# ispell-installls: magyar.hash, magyar.aff a helyre (ISPELLDIR knyvtr)
# a default rtkkel csak rendszergazdaknt tudjuk kiadni!
install_ispell: ispell $(ISPELLDIR)
	@echo "==> ispell llomnyok (magyar.aff magyar.hash) teleptse" | $(CATUTF)
	@echo "	clknyvtr: $(ISPELLDIR)" | $(CATUTF)
	@$(INSTALL_DATA) $(WRKDIR)/magyar.aff $(ISPELLDIR)/magyar.aff
	@$(INSTALL_DATA) $(WRKDIR)/magyar4ispell.hash $(ISPELLDIR)/magyar.hash
# hungarian.aff link nem kell?
	@if [ ! -h $(ISPELLDIR)/hungarian.hash ]; then \
		ln -s magyar.hash $(ISPELLDIR)/hungarian.hash; \
	fi

# myspell-installls: hu_HU.dic, hu_HU.aff a helyre (MYSPELLDIR knyvtr)
# s ktsek ltrehozsa
# a default rtkkel csak rendszergazdaknt tudjuk kiadni!
install_myspell: myspell $(MYSPELLDIR)
	@echo "==> myspell llomnyok (hu_HU.dic s hu_HU.aff) teleptse" | $(CATUTF)
	@echo "	clknyvtr: $(MYSPELLDIR)" | $(CATUTF)

	@cp -f $(WRKDIR)/hu_HU.{dic,aff} $(MYSPELLDIR)/
#	
# magyar.aff -> hu_HU.aff kts ltrehozsa
	@echo " myspell linkek ({magyar,hungarian}.{dic,aff}) ltrehozsa" | $(CATUTF)
	@if [ ! -h $(MYSPELLDIR)/magyar.aff ]; then \
		ln -s hu_HU.aff $(MYSPELLDIR)/magyar.aff; \
	fi
#	
# magyar.dic -> hu_HU.dic kts ltrehozsa
	@if [ ! -h $(MYSPELLDIR)/magyar.dic ]; then \
		ln -s hu_HU.dic $(MYSPELLDIR)/magyar.dic; \
	fi
#	
# hungarian.aff -> hu_HU.aff kts ltrehozsa
	@if [ ! -h $(MYSPELLDIR)/hungarian.aff ]; then \
		ln -s hu_HU.aff $(MYSPELLDIR)/hungarian.aff; \
	fi	 
#	
# hungarian.dic -> hu_HU.dic kts ltrehozsa
	@if [ ! -h $(MYSPELLDIR)/hungarian.dic ]; then \
		ln -s hu_HU.dic $(MYSPELLDIR)/hungarian.dic; \
	fi

install_OO: myspell $(OODIR)
	@echo "OpenOffice.org llomnyok (hu_HU.dic s hu_HU.aff) teleptse" | $(CATUTF)
	@echo "	clknyvtr: $(OODIR)" | $(CATUTF)
	@$(INSTALL_DATA) $(WRKDIR)/hu_HU.{dic,aff} $(OODIR)

install: install_all

install_all: install_myspell install_ispell install_OO 

# ispell opcival kompillt hashtbla 
#ispell: magyar4ispell.hash

# hu_HU.aff myspell ragozsi tblzat s a hu_HU.dic sztr ellltsa
myspell: magyar4myspell.dict magyar.aff hu_HU.aff hu_HU.dic alias kr

# - hu_HU.aff myspell ragozsi tblzat ellltsa az sszes
#   lehetsges cserebetvel
# a myspellhez ellltott magyar.aff llomnyhoz
hu_HU.aff: magyar.aff
	@echo "===> myspell ragozsi tblzat (hu_HU.aff) ellltsa" | $(CATUTF)
	@$(SH) bin/i2myspell $(WRKDIR)/magyar.aff HUNSPELL_heading \
		A-Z a-z | sed 's/q\([^[]*\]\)/-\1/' | \
                bin/newsyntax >$(ROOTDIR)/hu_HU_morph.aff                
	@cat $(ROOTDIR)/hu_HU_morph.aff | bin/aff2gen | \
	        sed 's/&agrave;//g;s/&oslash;//g' >$(ROOTDIR)/hu_HU_gen.aff
	@cat $(ROOTDIR)/hu_HU_gen.aff | \
		LC_ALL=C sed 's/\t\([^p].\|.[^h]\):[^\t]*//g' >$(ROOTDIR)/hu_HU.aff

# q ktjell alaktva a szablyokban

# hu_HU.dic sztr ellltsa
# a myspellhez ellltott hashtblbl (magyar4myspell.hash)
hu_HU.dic: magyar.aff
	@echo "===> myspell sztr (hu_HU.dic) ellltsa" | $(CATUTF)
	@$(SH) bin/i2myspell -d $(WRKDIR)/magyar4myspell.dict | \
	    bin/lemma_present | bin/quniq >$(ROOTDIR)/hu_HU_morph.dic
	@cat $(ROOTDIR)/hu_HU_morph.dic | \
	    bin/dic2gen $(WRKDIR)/mezok2.txt >$(ROOTDIR)/hu_HU_gen.dic
	@cat hu_HU_gen.dic | \
	    sed 's/\t\([^p].\|.[^h]\):[^\t]*//g' >$(ROOTDIR)/hu_HU.dic

u8: hu_HU.aff hu_HU.dic
	@echo "===> Unicode karakterkdols llomnyok ellltsa" | $(CATUTF)
	@bin/u8myspell $(ROOTDIR)/hu_HU_morph $(WRKDIR)/hu_HU_u8_morph l2
	@cat $(WRKDIR)/hu_HU_u8_morph.dic | sed 's#	/#/#' >$(ROOTDIR)/hu_HU_u8_morph.dic
	@mv $(WRKDIR)/hu_HU_u8_morph.aff $(ROOTDIR)
	@cat $(ROOTDIR)/hu_HU_u8_morph.dic | \
	    bin/dic2gen $(WRKDIR)/mezok_utf.txt >$(ROOTDIR)/hu_HU_u8_gen.dic
	@cat hu_HU_u8_gen.dic | \
	    sed 's/\t\([^p].\|.[^h]\):[^\t]*//g' >$(ROOTDIR)/hu_HU_u8.dic
	@cat $(ROOTDIR)/hu_HU_u8_morph.aff | \
	    bin/aff2gen >$(ROOTDIR)/hu_HU_u8_gen.aff
	@cat hu_HU_u8_gen.aff | \
	    sed 's/\t\([^p].\|.[^h]\):[^\t]*//g' >$(ROOTDIR)/hu_HU_u8.aff

alias: u8
	@echo "===> Tmrtett Hunspell sztrak elksztse" | $(CATUTF)
	@$(SH) bin/makealias $(ROOTDIR)/hu_HU_u8.dic $(ROOTDIR)/hu_HU_u8.aff
	@$(SH) bin/makealias $(ROOTDIR)/hu_HU_u8_gen.dic $(ROOTDIR)/hu_HU_u8_gen.aff

kr: hu_HU.aff hu_HU.dic u8 
	@cd kr; make

# minden komponens kompillsa
all: ispell myspell

# j modul ltrehozsa
new:
	@echo "==> j modul ltrehozsa" | $(CATUTF)
	@$(SH) bin/modul $(SZOTAR) uj

# takarts
clean: 
	@-rm -rf $(WRKDIR) *~ $(ROOTDIR)/hu_*

# a modulvlaszts defaultra val visszalltsa
# a kizrand modulok explicite megadandk az "if"-ben
distclean:
	@for DIR in `find $(SZOTAR) -type d -name "_?*" -maxdepth 1 -noleaf`; do \
		MODULE_LOWER=`echo $(EN) $${DIR}"$(EC)" | sed 's/^.*\/_//'`; \
		MODULE=`echo $(EN) $${MODULE_LOWER}"$(EC)" | sed 's/^\(.\).*/\1/' | \
		tr a-z A-Z; \
		echo $(EN) $${MODULE_LOWER}"$(EC)" | sed 's/^.\(.*\)/\1/'`; \
		if [ "$${MODULE}" = "Huhyph2" ]; then \
			for LINK in `find $(SZOTAR) -type l -name "[A-Z]*" \
			-lname _$${MODULE_LOWER} -maxdepth 1 -noleaf`; do \
				rm -f $${LINK}; \
			done; \
		else \
			ln -s -f -n _$${MODULE_LOWER} $(SZOTAR)/$${MODULE}; \
		fi; \
	done

distbin:
	make clean
	pwd=$$(pwd); cd ..; tar cv $$(basename $$pwd) | gzip >$$pwd.tar.gz
