# ----------------------------------------------------------
#   (C) 1994 Institute for New Generation Computer Technology
#       (Read COPYRIGHT for detailed information.)
# ----------------------------------------------------------

.SUFFIXES: $(SUFFIXES) .kl1 .ext

PROGRAMS = bb gb normalize version cmputil \
	generate obj write \
	insert macro extern kl1cmp main \
	util

KL1SRC = bb.kl1 gb.kl1 normalize.kl1 version.kl1 cmputil.kl1 \
	generate.kl1 obj.kl1 write.kl1 \
	insert.kl1 macro.kl1 extern.kl1 kl1cmp.kl1 main.kl1 \
	util.kl1

CSRC = bb.c gb.c normalize.c version.c cmputil.c \
	generate.c obj.c write.c \
	insert.c macro.c extern.c kl1cmp.c main.c \
	util.c

EXT = bb.ext gb.ext normalize.ext version.ext cmputil.ext \
	generate.ext obj.ext write.ext \
	insert.ext macro.ext extern.ext kl1cmp.ext main.ext \
	util.ext

OBJECTS = bb.o gb.o normalize.o version.o cmputil.o \
	generate.o obj.o write.o \
	insert.o macro.o extern.o kl1cmp.o main.o \
	util.o atom.o funct.o predicates.o

all: klicdb klic kl1cmp

install: all
	- $(INSTDIR) $(KLICBIN)
	- $(INSTDIR) $(KLICLIB)/klic
	if (test `pwd` != $(KLICBIN)) then ($(INSTALL) klic $(KLICBIN)) fi
	if (test `pwd` != $(KLICLIB)/klic) then \
		($(INSTALL) kl1cmp klicdb $(KLICLIB)/klic) fi

dist: klic klicdb $(CSRC) klicdb.c klic.c klic.h version.c \
	atom.h funct.h atom.c funct.c predicates.c

version.kl1: version.kl1.tmplt
	sed -e "s%##DATE%`date`%" <version.kl1.tmplt >version.kl1

klicdb: klicdb.c klic.h
	$(CC) -I../include $(CFLAGS) -o klicdb klicdb.c $(LDFLAGS)
klic:	klic.c klic.h
	$(CC) -I../include $(CFLAGS) -o klic klic.c $(LDFLAGS)

.kl1.c:
	./klic -K $(KL1CMP) -D./klicdb -C -v $<

.kl1.ext:
	./klic -K $(KL1CMP) -D./klicdb -C -v $<

atom.h: klicdb $(EXT) klicdb.init
	./klicdb -X. $(EXT)
funct.h: klicdb $(EXT) klicdb.init
	./klicdb -X. $(EXT)
atom.c: klicdb $(EXT) klicdb.init
	./klicdb -X. $(EXT)
funct.c: klicdb $(EXT) klicdb.init
	./klicdb -X. $(EXT)
predicates.c: klicdb $(EXT) klicdb.init
	./klicdb -X. $(EXT)

kl1cmp: klic klicdb klicdb.init $(KL1SRC) ../runtime/libklict.a
	./klic -K $(KL1CMP) -D./klicdb -v \
		-X. -I../include -L../runtime \
		$(KLICOPT) -o kl1cmp $(KL1SRC)

klicdb.init: ../runtime/klic.db
	( test -f klicdb.init && cmp -s klicdb.init ../runtime/klic.db ) || \
	/bin/cp -p ../runtime/klic.db klicdb.init

# ========================================
# Verifying a newly built compiler
# ========================================

verifydir:
	- mkdir verifydir
	- for file in $(KL1SRC); do \
		ln -s ../$$file verifydir; \
	  done

verify: verifydir kl1cmp $(CSRC)
	- for file in $(PROGRAMS); do \
	  echo $$file; \
	  ./kl1cmp verifydir/$$file.kl1; \
	  tail +2 $$file.c >/tmp/$$file.old; \
	  tail +2 verifydir/$$file.c >/tmp/$$file.new; \
	  diff /tmp/$$file.old /tmp/$$file.new; \
	  /bin/rm -f /tmp/$$file.old /tmp/$$file.new; \
	done
	
clean:
	/bin/rm -f -r verifydir *.o *~ \#*\# core

distclean: clean
	/bin/rm -f kl1cmp klic klicdb klic.db

realclean: distclean
	/bin/rm -f $(CSRC) *.ext atom.h funct.h version.kl1 \
		atom.c funct.c predicates.c

klicdb.o: klic.h ../include/klic/config.h
klic.o: klic.h ../include/klic/config.h

bb.o: ../include/klic/config.h
gb.o: ../include/klic/config.h
normalize.o: ../include/klic/config.h
version.o: ../include/klic/config.h
cmputil.o: ../include/klic/config.h
generate.o: ../include/klic/config.h
obj.o: ../include/klic/config.h
write.o: ../include/klic/config.h
insert.o: ../include/klic/config.h
macro.o: ../include/klic/config.h
extern.o: ../include/klic/config.h
kl1cmp.o: ../include/klic/config.h
main.o: ../include/klic/config.h
util.o: ../include/klic/config.h
