all:
	exec sh -c 'if [ ! -s include ]; then exec make -C ..;else exec make -C include/.. make_all;fi' >/dev/null 2>/dev/null
# Just to get to the top directory of the source three
make_all:
	sh -c 'rm prog;true'
	exec 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:
	sh -c "if [ ! -x prog ]; then exec make;fi"
	gdb --se=prog --core=core
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/GNUmakefile ]; then ln -s ../GNUmakefile $$dd/GNUmakefile;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 make -C $$dd lib;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 >/dev/tty 2>/dev/tty
	sh -c 'rm TMP.Build.Mak 2>/dev/null;true'	
clean:
	exec sh -c 'if [ ! -s include ]; then exec make -C ..;else make -C include -f include/GNUmakefile lclean;exec make -C include/.. tclean;fi' >/dev/null 2>/dev/null
tclean: lclean
	exec make -C include -f ../GNUmakefile lclean
lclean:
	sh -c 'rm `ls|grep -v "\.c"|grep -v "\.h"|grep -v Makefile|grep -v GNUmakefile` 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 make -C $$dd lclean >/dev/null;fi;done;true'
	sh -c 'if [ -h Makefile ]; then rm Makefile;fi;true'
	sh -c 'if [ -h GNUmakefile ]; then rm GNUmakefile;fi;true'
rmi:
	sh -c 'rm -i `ls|grep -v "\.c"|grep -v "\.h"|grep -v Makefile|grep -v GNUmakefile` 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'
	sh -c 'if [ -h Makefile ]; then rm -i Makefile;fi;true'
	sh -c 'if [ -h GNUmakefile ]; then rm -i GNUmakefile;fi;true'
tgz:
	make rmi
	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-'
			
