# Makefile for inflector, 990922, Johan Carlberger
# Changed 051213, Oscar Tckstrm

LIBS = -lfl
PROGRAMS = inflector
TAGGER_SRC = ../scrutinizer/tagger
COMMON = ../scrutinizer/common

#compiling with g++:
DEBUG = -g
CPP = g++
CC = gcc
FLAGS = -O3 -Wall -funroll-loops -ffast-math -I$(COMMON) -I -I$(TAGGER_SRC)

#compiling with CC:
#CPP = CC
#CC = cc
#FLAGS = -O2 +w -fast

CPPFLAGS = $(FLAGS) -DENSURE -I$(TAGGER_SRC) -DPROB_DOUBLE
INFLECTOR_BASE = hashscatter.o letter.o file.o inflectlexicon.o inflectrule.o message.o newwordlexicon.o settings.o tag.o taglexicon.o word.o wordtag.o wordlexicon.o

INFLECTOR = $(INFLECTOR_BASE) inflector.o main.o

DEP = $(COMMON)/basics.h $(COMMON)/ensure.h $(COMMON)/message.h $(TAGGER_SRC)/settings.h

ALLHEADERS = $(COMMON)/basics.h $(TAGGER_SRC)/bitmap.h $(COMMON)/ensure.h $(TAGGER_SRC)/feature.h $(COMMON)/file.h $(TAGGER_SRC)/hasharray.h $(TAGGER_SRC)/hashscatter.h $(TAGGER_SRC)/hashtable.h $(TAGGER_SRC)/inflectlexicon.h $(TAGGER_SRC)/inflectrule.h $(TAGGER_SRC)/letter.h $(COMMON)/message.h $(TAGGER_SRC)/settings.h $(TAGGER_SRC)/newword.h $(TAGGER_SRC)/tag.h $(TAGGER_SRC)/taglexicon.h $(TAGGER_SRC)/tagtrigram.h $(TAGGER_SRC)/word.h $(TAGGER_SRC)/wordlexicon.h $(TAGGER_SRC)/wordtag.h

all:	$(PROGRAMS)

everything: clean all install

inflector.o:	$(ALLHEADERS) inflector.h
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) inflector.cpp

hashscatter.o:	$(TAGGER_SRC)/hashscatter.cpp $(TAGGER_SRC)/hashscatter.h
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) $(TAGGER_SRC)/hashscatter.cpp

file.o:	$(COMMON)/file.cpp $(DEP) $(COMMON)/file.h
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) $(COMMON)/file.cpp

inflectlexicon.o:	$(TAGGER_SRC)/inflectlexicon.cpp $(DEP) $(TAGGER_SRC)/inflectlexicon.h $(TAGGER_SRC)/inflectrule.h
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) $(TAGGER_SRC)/inflectlexicon.cpp

inflectrule.o:	$(TAGGER_SRC)/inflectrule.cpp $(DEP) $(TAGGER_SRC)/inflectrule.h
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) $(TAGGER_SRC)/inflectrule.cpp

letter.o:	$(TAGGER_SRC)/letter.cpp $(DEP) $(TAGGER_SRC)/letter.h
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) $(TAGGER_SRC)/letter.cpp

main.o:	main.cpp $(DEP) $(ALLHEADERS)
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) main.cpp

message.o:	$(COMMON)/message.cpp $(DEP)
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) $(COMMON)/message.cpp

newwordlexicon.o:	$(TAGGER_SRC)/newwordlexicon.cpp $(DEP) $(COMMON)/file.h $(TAGGER_SRC)/hashtable.h $(TAGGER_SRC)/newwordlexicon.h $(TAGGER_SRC)/word.h $(TAGGER_SRC)/wordtag.h $(TAGGER_SRC)/newword.h 
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) $(TAGGER_SRC)/newwordlexicon.cpp 

settings.o:	$(TAGGER_SRC)/settings.cpp $(DEP) $(COMMON)/file.h
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) $(TAGGER_SRC)/settings.cpp 

tag.o:	$(TAGGER_SRC)/tag.cpp $(TAGGER_SRC)/tag.h
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) $(TAGGER_SRC)/tag.cpp 

taglexicon.o:	$(TAGGER_SRC)/taglexicon.cpp $(COMMON)/basics.h $(TAGGER_SRC)/bitmap.h $(COMMON)/file.h $(TAGGER_SRC)/hasharray.h $(TAGGER_SRC)/tag.h $(TAGGER_SRC)/feature.h $(TAGGER_SRC)/taglexicon.h $(TAGGER_SRC)/token.h $(TAGGER_SRC)/word.h $(TAGGER_SRC)/settings.h
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) $(TAGGER_SRC)/taglexicon.cpp

word.o:	$(TAGGER_SRC)/word.cpp	 $(DEP) $(TAGGER_SRC)/word.h $(TAGGER_SRC)/tagger.h $(TAGGER_SRC)/inflectrule.h $(TAGGER_SRC)/wordtag.h
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) $(TAGGER_SRC)/word.cpp 

wordtag.o:	$(TAGGER_SRC)/wordtag.cpp $(DEP) $(TAGGER_SRC)/word.h $(TAGGER_SRC)/wordtag.h $(TAGGER_SRC)/wordlexicon.h $(TAGGER_SRC)/tag.h
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) $(TAGGER_SRC)/wordtag.cpp 

wordlexicon.o:	$(TAGGER_SRC)/wordlexicon.cpp $(ALLHEADERS)
	$(CPP) $(DEBUG) -c -o $@ $(CPPFLAGS) $(TAGGER_SRC)/wordlexicon.cpp 

inflector:	$(INFLECTOR)
	@echo inflector...
	$(CPP) $(LD_FLAGS) -o inflector $(INFLECTOR) $(LIBS)	

clean:
	@echo cleaning...
	@rm -f -r *.o core Templates.DB *~ $(PROGRAMS)

backup: clean
	@echo doing backup...
	cp * Backup

install:
	@echo installing...
	@chmod 744 $(PROGRAMS)
	@mv $(PROGRAMS) $(GRANSKA_BIN)
