all:
	exec sh -c 'if [ ! -s include ]; then cd ..;exec make;else cd include/..;exec make make_all;fi' 
# Just to get to the top directory of the source three
make_all:
	sh -c 'rm prog;true'
	make libs xo link
build:clean all
run:all
	./prog
exec: 
	sh -c "if [ ! -x prog ]; then exec make bulid;fi"
	./prog
dbx:
	sh -c "if [ ! -x prog ]; then exec make build;fi"
	dbx prog
gcc:
	echo making gcc
	gcc -fno-asm -ggdb3 *.c -o prog
cc:
	cc -g *.c -o prog
gdb:
	touch core
	rm core
	sh -c "if [ ! -x prog ]; then exec make;fi"
	gdb --se=prog
link:
	cc *.o *.a -o prog >/dev/tty 2>/dev/tty
obj: 
	sh -c 'GCC=`which gcc`;if [ -x "$$GCC" ]; then gcc -c -ggdb3 -fno-asm *.c; else cc -c -g *.c;fi'
lib: xo
	sh -c 'PWD=`pwd`;ar qs include/../lib`basename $$PWD`.a *.o'
libs:
	sh -c 'for dd in `ls|grep -v include`;do if [ -d $$dd -a ! -s $$dd/Makefile ]; then ln -s ../Makefile $$dd/Makefile;fi;done'
	sh -c 'for dd in `ls|grep -v include`;do if [ -d $$dd -a ! -s $$dd/include ]; then ln -s ../include $$dd/include;fi;done'
	sh -c 'for dd in `ls|grep -v include`;do if [ -d $$dd ]; then cd $$dd;make lib;cd ..;fi;done' 
xo: 
	sh -c 'rm TMP.Build.Mak 2>/dev/null;true'
	cat /dev/null >> TMP.Build.Mak
	sh -c 'GCC=`which gcc 2>/dev/null`;if [ -x "$$GCC" ]; then CCC="gcc -ggdb3 -fno-asm"; else CCC="cc -g";fi;echo CC=$$CCC >>TMP.Build.Mak'
	sh -c '(echo all:;for ff in *.c; do echo `basename $$ff .c`.o;done)|tr "\012" " ">>TMP.Build.Mak'
	echo >> TMP.Build.Mak
	sh -c '(for ff in *.c; do echo `basename $$ff .c`.o: $$ff `ls include/*.h`;done)>>TMP.Build.Mak 2>/dev/null'
	make -f TMP.Build.Mak
	sh -c 'rm TMP.Build.Mak 2>/dev/null;true'	
clean:
	exec sh -c 'if [ ! -s include ]; then cd ..;exec make clean;else cd include;make -f ../Makefile lclean;cd ..;exec make lclean;fi'
lclean:
	sh -c 'rm `ls|egrep -vi "\.c|\.h|Makefile|\.prg|GNUmakefile|\.txt|\.sh"` 2>/dev/null;true'
	sh -c 'rm `ls *.[ch]?* 2>/dev/null` 2>/dev/null;true'
	sh -c 'for dd in *;do if [ -d $$dd ]; then cd $$dd;make lclean;cd ..;fi;done;true'
	sh -c 'if [ -h Makefile ]; then rm Makefile;fi;true'
rmi:
	sh -c 'rm -i `ls|egrep -vi "\.c|\.h|Makefile|\.prg|GNUmakefile|\.txt|\.sh"` 2>/dev/null;true'
	sh -c 'rm -i `ls *.[ch]?* 2>/dev/null` 2>/dev/null;true'
	sh -c 'for dd in *;do if [ -d $$dd ]; then make -C $$dd rmi;fi;done;true'
tgz:
	sh -c 'WORKDIR=`pwd`;WORKDIR=`basename $$WORKDIR`;cd ..;ls;read TGZNAME;export TGZNAME;tar -cf- $$WORKDIR|gzip -c -9 >$$TGZNAME;gzip -c -d $$TGZNAME|tar -tf-'
			
