all: update_astcode generate-compiler compile.h lex.h lex.c parser.h lang.c compile.c parser.c
	./update_astcode > lang-new.c
	mv lang.c lang.c.PREV
	mv lang-new.c lang.c || exit 0
	#./generate-compiler > compile.c.new
	#diff compile.c compile.c.new || exit 0
	cc -O                   -I. -DCOMPILE_H="\"compile.h\"" -DLEX_H="\"lex.h\"" -DLEX_C="\"lex.c\"" -DTABLE="\"parser.h\"" -DINCLUDE="\"lang.c\"" -DCOMPILE="\"compile.c\"" -Wno-div-by-zero -o parser-opt parser.c
	cc -g -DCHECK_INDEXES=1 -I. -DCOMPILE_H="\"compile.h\"" -DLEX_H="\"lex.h\"" -DLEX_C="\"lex.c\"" -DTABLE="\"parser.h\"" -DINCLUDE="\"lang.c\"" -DCOMPILE="\"compile.c\"" -Wno-div-by-zero -o parser     parser.c

grammar.g: lang.c ecce
	grep ^//\\\\ lang.c > grammar.g
	./ecce grammar.g --command "(v.//\\\\ .s..m,m)0m-0(r0 (v-/ /e-)0 m)0 m-0 (rm,k)0 m-0 (r0v-/;/b,m)0 m-0 (v/B/\m,mr\j,m)0 m0 (m-v/B/\)0 mb;%c" > /dev/null 2>&1

ecce: ecce.c
	cc -o ecce ecce.c

parser.h: grammar.g takeon
	./takeon grammar.g > parser.h

check-missing: parser.h check-missing.c
	cc -g -o check-missing     -I. -DTABLE="\"parser.h\"" check-missing.c

generate-compiler: parser.h generate-compiler.c
	cc -g -o generate-compiler -I. -DTABLE="\"parser.h\"" generate-compiler.c

update_astcode: update_astcode.c parser.h
	cc -g -o update_astcode    -I. -DINCLUDE="\"parser.h\"" -Wno-format-extra-args update_astcode.c

takeon: takeon.c
	cc -g -o takeon takeon.c

clean:
	rm -f *~ generate-compiler parser parser-opt takeon update_astcode ecce compile.c.new lang.c.PREV

tar:
	make clean
	rm -f ../suds.tgz suds.tgz
	tar -cvzf ../suds.tgz *
	mv ../suds.tgz .
