ifndef GCC
	GCC := $(shell gcc --version 2>/dev/null)
	CC := $(shell if [ "${GCC}" != "" ]; then echo gcc -fno-asm -g ${COPTS}; else echo cc;fi)
endif
ifndef RANLIB
	RANLIB := $(shell which ranlib 2>/dev/null || (ranlib 2>/dev/null && echo ranlib) || echo true)
endif
ifndef MAKE
    MAKE := make
endif
LIBNAME := $(shell PWD=`pwd`;echo include/../lib`basename $$PWD`.a)
all:
	@echo CC is ${CC}
	@echo RANLIB is ${RANLIB}
	@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} etags libs xo link
build:clean all
run:all
	./prog
exec: 
	sh -c "if [ ! -x prog ]; then exec ${MAKE} build;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"
	(test -f core && gdb --se=prog --core=core) || gdb --se=prog
link:
	${CC} *.o -L. ${LIBS} $(shell for ff in *; do if [ -d $$ff -a "$$ff" != "include" ]; then echo -l$$ff;fi;done) -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
	ar rs ${LIBNAME} *.o || ar q ${LIBNAME} *.o
	${RANLIB} ${LIBNAME}
libs:
	rm *.a || true
	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: 
	@echo MAKE is ${MAKE}
	sh -c 'rm TMP.Build.Mak 2>/dev/null;true'
	cat /dev/null >> TMP.Build.Mak
	echo CC=${CC} >>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|egrep -vi "\.c|\.h|Makefile|GNUmakefile|\.prg|\.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 ${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|egrep -vi "\.c|\.h|Makefile|GNUmakefile|\.prg|\.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'
	sh -c 'if [ -h Makefile ]; then rm -i Makefile;fi;true'
	sh -c 'if [ -h GNUmakefile ]; then rm -i GNUmakefile;fi;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-'
#----	Modes		
bugtrax:
	${MAKE} COPTS=${COPTS}" -Wall -pedantic" LIBS="-lefence "${LIBS}
wall:
	${MAKE} COPTS=${COPTS}" -Wall"
pedantic:
	${MAKE} COPTS=${COPTS}" -Wall -pedantic"
efence:
	${MAKE} LIBS="-lefence "${LIBS}
etags:
	etags ${ETAGS} `find . -name "*.[ch]"`||true



























