SRC         = src
INC         = include
OBJ         = obj
BIN         = .
CC          = gcc
CPPC        = g++
CFLAGS      = -c -g -w -O
CLDFLAGS    = -O -g 
CPPSRC      = cppsrc

CPPSOURCE = ${CPPSRC}/*.cpp

INCLUDES    =\
${CPPSRC}/check.h  \
${INC}/link-includes.h ${INC}/structures.h ${INC}/api-structures.h\
${INC}/api.h ${INC}/externs.h ${INC}/analyze-linkage.h\
${INC}/and.h ${INC}/build-disjuncts.h ${INC}/count.h\
${INC}/error.h ${INC}/extract-links.h ${INC}/fast-match.h\
${INC}/idiom.h ${INC}/linkset.h ${INC}/massage.h\
${INC}/post-process.h ${INC}/pp_knowledge.h ${INC}/pp_lexer.h\
${INC}/pp_linkset.h ${INC}/preparation.h ${INC}/print.h\
${INC}/prune.h ${INC}/read-dict.h ${INC}/resources.h\
${INC}/string-set.h ${INC}/tokenize.h ${INC}/utilities.h\
${INC}/constituents.h ${INC}/word-file.h ${INC}/print-util.h\

OBJECTS     =\
${OBJ}/prune.o ${OBJ}/and.o ${OBJ}/check.o\
${OBJ}/post-process.o ${OBJ}/pp_lexer.o ${OBJ}/resources.o\
${OBJ}/analyze-linkage.o ${OBJ}/string-set.o ${OBJ}/pp_linkset.o\
${OBJ}/pp_knowledge.o ${OBJ}/error.o ${OBJ}/word-file.o\
${OBJ}/utilities.o ${OBJ}/tokenize.o ${OBJ}/command-line.o\
${OBJ}/read-dict.o ${OBJ}/print.o ${OBJ}/preparation.o\
${OBJ}/api.o ${OBJ}/massage.o ${OBJ}/linkset.o\
${OBJ}/idiom.o ${OBJ}/fast-match.o ${OBJ}/extract-links.o\
${OBJ}/count.o ${OBJ}/build-disjuncts.o ${OBJ}/constituents.o\
${OBJ}/print-util.o\
${OBJ}/WordNet.o\
${OBJ}/ClassExtractionRule.o ${OBJ}/HasRule.o \
${OBJ}/WithRule.o ${OBJ}/ClassExtractor.o\
${OBJ}/DirectObjectRule.o \
${OBJ}/AmountOfRule.o \
${OBJ}/SubjectRule.o \
${OBJ}/GenitiveSRule.o \
${OBJ}/GenitiveOfRule.o \
${OBJ}/StateRule.o \
${OBJ}/BottomUpClassification.o \
${OBJ}/PassiveWithObjectRule.o \
${OBJ}/BecomesRule.o \
${OBJ}/PassiveRule.o \
${OBJ}/InfinitiveObjectRule.o \
${OBJ}/DomainClass.o \
${OBJ}/Printer.o  ${OBJ}/StringTokenizer.o\
${OBJ}/ModelPrinter.o\
${OBJ}/UMLGraphPrinter.o 

makeall: getall createdir ${BIN}/classExtractor

${BIN}/classExtractor: ${OBJECTS} ${OBJ}/main.o
		${CPPC} ${OBJECTS} ${OBJ}/main.o -o ${BIN}/classExtractor -lWN

${OBJ}/main.o: ${CPPSRC}/main.cpp ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${CPPSRC}/main.cpp -o ${OBJ}/main.o
		
${OBJ}/check.o: ${CPPSRC}/check.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${CPPSRC}/check.c -o ${OBJ}/check.o
		
${OBJ}/prune.o: ${SRC}/prune.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/prune.c -o ${OBJ}/prune.o

${OBJ}/and.o: ${SRC}/and.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/and.c -o ${OBJ}/and.o

${OBJ}/post-process.o: ${SRC}/post-process.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/post-process.c -o ${OBJ}/post-process.o

${OBJ}/pp_lexer.o: ${SRC}/pp_lexer.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/pp_lexer.c -o ${OBJ}/pp_lexer.o

${OBJ}/resources.o: ${SRC}/resources.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/resources.c -o ${OBJ}/resources.o

${OBJ}/analyze-linkage.o: ${SRC}/analyze-linkage.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/analyze-linkage.c -o ${OBJ}/analyze-linkage.o

${OBJ}/string-set.o: ${SRC}/string-set.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/string-set.c -o ${OBJ}/string-set.o

${OBJ}/pp_linkset.o: ${SRC}/pp_linkset.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/pp_linkset.c -o ${OBJ}/pp_linkset.o

${OBJ}/pp_knowledge.o: ${SRC}/pp_knowledge.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/pp_knowledge.c -o ${OBJ}/pp_knowledge.o

${OBJ}/error.o: ${SRC}/error.c ${INC}/error.h
		${CC} ${CFLAGS} -I${INC} ${SRC}/error.c -o ${OBJ}/error.o

${OBJ}/word-file.o: ${SRC}/word-file.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/word-file.c -o ${OBJ}/word-file.o

${OBJ}/utilities.o: ${SRC}/utilities.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/utilities.c -o ${OBJ}/utilities.o

${OBJ}/tokenize.o: ${SRC}/tokenize.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/tokenize.c -o ${OBJ}/tokenize.o

${OBJ}/command-line.o: ${SRC}/command-line.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/command-line.c -o ${OBJ}/command-line.o

${OBJ}/read-dict.o: ${SRC}/read-dict.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/read-dict.c -o ${OBJ}/read-dict.o

${OBJ}/print.o: ${SRC}/print.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/print.c -o ${OBJ}/print.o

${OBJ}/preparation.o: ${SRC}/preparation.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/preparation.c -o ${OBJ}/preparation.o

${OBJ}/api.o: ${SRC}/api.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/api.c -o ${OBJ}/api.o

${OBJ}/massage.o: ${SRC}/massage.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/massage.c -o ${OBJ}/massage.o

${OBJ}/linkset.o: ${SRC}/linkset.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/linkset.c -o ${OBJ}/linkset.o

${OBJ}/idiom.o: ${SRC}/idiom.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/idiom.c -o ${OBJ}/idiom.o

${OBJ}/fast-match.o: ${SRC}/fast-match.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/fast-match.c -o ${OBJ}/fast-match.o

${OBJ}/extract-links.o: ${SRC}/extract-links.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/extract-links.c -o ${OBJ}/extract-links.o

${OBJ}/count.o: ${SRC}/count.c ${INCLUDES} ${INC}/print.h
		${CC} ${CFLAGS} -I${INC} ${SRC}/count.c -o ${OBJ}/count.o

${OBJ}/build-disjuncts.o: ${SRC}/build-disjuncts.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/build-disjuncts.c -o ${OBJ}/build-disjuncts.o

${OBJ}/constituents.o: ${SRC}/constituents.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/constituents.c -o ${OBJ}/constituents.o

${OBJ}/print-util.o: ${SRC}/print-util.c ${INCLUDES}
		${CC} ${CFLAGS} -I${INC} ${SRC}/print-util.c -o ${OBJ}/print-util.o

${OBJ}/ClassExtractor.o: ${CPPSRC}/ClassExtractor.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/ClassExtractor.cpp -o ${OBJ}/ClassExtractor.o

${OBJ}/ClassExtractionRule.o: ${CPPSRC}/ClassExtractionRule.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/ClassExtractionRule.cpp -o ${OBJ}/ClassExtractionRule.o

${OBJ}/HasRule.o: ${CPPSRC}/HasRule.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/HasRule.cpp -o ${OBJ}/HasRule.o

${OBJ}/InfinitiveObjectRule.o: ${CPPSRC}/InfinitiveObjectRule.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/InfinitiveObjectRule.cpp -o ${OBJ}/InfinitiveObjectRule.o

${OBJ}/PassiveRule.o: ${CPPSRC}/PassiveRule.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/PassiveRule.cpp -o ${OBJ}/PassiveRule.o

${OBJ}/BecomesRule.o: ${CPPSRC}/BecomesRule.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/BecomesRule.cpp -o ${OBJ}/BecomesRule.o

${OBJ}/PassiveWithObjectRule.o: ${CPPSRC}/PassiveWithObjectRule.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/PassiveWithObjectRule.cpp -o ${OBJ}/PassiveWithObjectRule.o

${OBJ}/BottomUpClassification.o: ${CPPSRC}/BottomUpClassification.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/BottomUpClassification.cpp -o ${OBJ}/BottomUpClassification.o

${OBJ}/StateRule.o: ${CPPSRC}/StateRule.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/StateRule.cpp -o ${OBJ}/StateRule.o

${OBJ}/AmountOfRule.o: ${CPPSRC}/AmountOfRule.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/AmountOfRule.cpp -o ${OBJ}/AmountOfRule.o

${OBJ}/DirectObjectRule.o: ${CPPSRC}/DirectObjectRule.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/DirectObjectRule.cpp -o ${OBJ}/DirectObjectRule.o

${OBJ}/GenitiveOfRule.o: ${CPPSRC}/GenitiveOfRule.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/GenitiveOfRule.cpp -o ${OBJ}/GenitiveOfRule.o

${OBJ}/GenitiveSRule.o: ${CPPSRC}/GenitiveSRule.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/GenitiveSRule.cpp -o ${OBJ}/GenitiveSRule.o

${OBJ}/SubjectRule.o: ${CPPSRC}/SubjectRule.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/SubjectRule.cpp -o ${OBJ}/SubjectRule.o

${OBJ}/WordNet.o: ${CPPSRC}/WordNet.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/WordNet.cpp -o ${OBJ}/WordNet.o

${OBJ}/WithRule.o: ${CPPSRC}/WithRule.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/WithRule.cpp -o ${OBJ}/WithRule.o

${OBJ}/DomainClass.o: ${CPPSRC}/DomainClass.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/DomainClass.cpp -o ${OBJ}/DomainClass.o

${OBJ}/Printer.o: ${CPPSRC}/Printer.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/Printer.cpp -o ${OBJ}/Printer.o

${OBJ}/ModelPrinter.o: ${CPPSRC}/ModelPrinter.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/ModelPrinter.cpp -o ${OBJ}/ModelPrinter.o

${OBJ}/UMLGraphPrinter.o: ${CPPSRC}/UMLGraphPrinter.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/UMLGraphPrinter.cpp -o ${OBJ}/UMLGraphPrinter.o

${OBJ}/StringTokenizer.o: ${CPPSRC}/StringTokenizer.cpp ${INCLUDES}
		${CPPC} ${CFLAGS}  -I${INC} ${CPPSRC}/StringTokenizer.cpp -o ${OBJ}/StringTokenizer.o

getall:
	@echo -e 'Y\n' | sudo cp -r ../WordNet-3.0 /usr/local/
	@echo -e 'Y\n' | sudo cp ./lib/libWN.a /usr/local/lib/

createdir:
	@mkdir -p ${OBJ}
	@exit 0

clean:
	rm -f -R ${OBJ}
	rm -f ${BIN}/classExtractor

