sources = agenda.c analysis.c argacces.c bload.c bmathfun.c bsave.c \
	classcom.c classexm.c classfun.c classinf.c classini.c \
	classpsr.c clsltpsr.c commline.c conscomp.c constrct.c \
	constrnt.c crstrtgy.c cstrcbin.c cstrccom.c cstrcpsr.c \
	cstrnbin.c cstrnchk.c cstrncmp.c cstrnops.c cstrnpsr.c \
	cstrnutl.c default.c defins.c developr.c dffctbin.c dffctbsc.c \
	dffctcmp.c dffctdef.c dffctpsr.c dffnxbin.c dffnxcmp.c \
	dffnxexe.c dffnxfun.c dffnxpsr.c dfinsbin.c dfinscmp.c drive.c \
	edbasic.c edmain.c edmisc.c edstruct.c edterm.c emathfun.c \
	engine.c envrnmnt.c evaluatn.c expressn.c exprnbin.c exprnops.c \
	exprnpsr.c extnfunc.c factbin.c factbld.c factcmp.c factcom.c \
	factfun.c factgen.c facthsh.c factlhs.c factmch.c factmngr.c \
	factprt.c factqpsr.c factqury.c factrete.c factrhs.c filecom.c filertr.c \
	generate.c genrcbin.c genrccmp.c genrccom.c genrcexe.c genrcfun.c \
	genrcpsr.c globlbin.c globlbsc.c globlcmp.c globlcom.c \
	globldef.c globlpsr.c immthpsr.c incrrset.c inherpsr.c \
	inscom.c insfile.c insfun.c insmngr.c insmoddp.c insmult.c \
	inspsr.c insquery.c insqypsr.c iofun.c lgcldpnd.c \
	memalloc.c miscfun.c modulbin.c modulbsc.c modulcmp.c moduldef.c \
	modulpsr.c modulutl.c msgcom.c msgfun.c msgpass.c msgpsr.c \
	multifld.c multifun.c objbin.c objcmp.c objrtbin.c objrtbld.c \
	objrtcmp.c objrtfnx.c objrtgen.c objrtmch.c parsefun.c pattern.c \
	pprint.c prccode.c prcdrfun.c prcdrpsr.c prdctfun.c prntutil.c \
	proflfun.c reorder.c reteutil.c retract.c router.c rulebin.c \
	rulebld.c rulebsc.c rulecmp.c rulecom.c rulecstr.c ruledef.c \
	ruledlt.c rulelhs.c rulepsr.c scanner.c sortfun.c strngfun.c \
	strngrtr.c symblbin.c symblcmp.c symbol.c sysdep.c textpro.c \
	tmpltbin.c tmpltbsc.c tmpltcmp.c tmpltdef.c tmpltfun.c tmpltlhs.c \
	tmpltpsr.c tmpltrhs.c tmpltutl.c userdata.c utility.c watch.c #userfunctions.c

CPPFLAGS= -g $(RUN_TIME) #-c -Wall  -Wundef -Wpointer-arith -Wshadow -Wcast-qual \
#	    -Wcast-align -Winline -Wmissing-declarations -Wredundant-decls \
#	    -Wmissing-prototypes -Wnested-externs \
#	    -Wstrict-prototypes -Waggregate-return -Wno-implicit
LDFLAGS= -g -L. -lm -lclips #-ltermcap

all: myclips clips

myclips: main.o libclips.a userfunctions.o
	$(CC) $< $(LDFLAGS) -o $@ userfunctions.o

libclips.a: $(sources:.c=.o)
	rm -f $@   
	ar cq $@ $(sources:.c=.o)  

runtime:
	touch setup.h #make sure that librunclips.a recompilation won't use .o's from non-runtime
	rm -f $(sources:.c=.o)
	make librunclips.a RUN_TIME="-DRUN_TIME=1"
	echo "Runtime library completed..." #REQUIRED to cause delay such that the time difference introduced by the following touch will be noticed by make when compiling normal library!
	touch setup.h #make sure that libclips.a recompilation won't use .o's from runtime

librunclips.a: $(sources:.c=.o)
	rm -f $@   
	ar cq $@ $(sources:.c=.o)

clips: libclips.a mainOLD.o
	@$(CC) mainOLD.o $(LDFLAGS) -o $@

check: one two three

one: one.o libclips.a userfunctions.o FORCE
	@$(CC) $< $(LDFLAGS) -o $@ userfunctions.o
	@./$@ | diff - one-out.txt

two: two.o libclips.a userfunctions.o FORCE
	@$(CC) $< $(LDFLAGS) -o $@ userfunctions.o
	#@./$@ | diff - one-out.txt

three: three.o libclips.a userfunctions.o FORCE
	@$(CC) $< $(LDFLAGS) -o $@ userfunctions.o
	./$@ | diff - three-out.txt

four: four.o userfunctions.o FORCE
	rm -f exp/*
	(cd exp ; ../clips -f2 ../four.clp)
	@$(CC) $(CPPFLAGS) -I. -Iexp -DRUN_TIME=1 exp/*.c $< -L. -lrunclips -o $@ userfunctions.o
	./$@ | diff - out.txt

five: five.o libclips.a userfunctions.o FORCE
	@$(CC) $< $(LDFLAGS) -o $@ userfunctions.o
	#@./$@ | diff - one-out.txt

%.d: %.c
	@set -e; rm -f $@; \
	$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
	cat $@.$$$$ | sed -e 's|.*:|$*.o:|' > $@.$$$$.tmp; \
	mv $@.$$$$.tmp $@.$$$$; \
	sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
	rm -f $@.$$$$

clean:
	rm -f $(sources:.c=.o)
	rm -f $(sources:.c=.d)
	rm -f mainOLD.o
	rm -f main.o
	rm -f main.d
	rm -f myclips
	rm -f librunclips.a
	rm -f libclips.a
	rm -f userfunctions.d
	rm -f userfunctions.o
	rm -f one.o
	rm -f one.d
	rm -f one
	rm -f one.txt
	rm -f two.o
	rm -f two.d
	rm -f two
	rm -f three.o
	rm -f three.d
	rm -f three
	rm -f four.o
	rm -f four.d
	rm -f four
	rm -f exp/*

FORCE:

-include $(sources:.c=.d)
-include userfunctions.d
-include main.d
-include one.d
-include two.d
-include three.d
-include four.d
