CC=gcc
COPTS=-g -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast
# -m32

all: soapy pass1.c pass2.c
	echo All up to date.

soapy: imp.e tacc taccutil.o log.o mmalloc.o regexp.o sscanr.o
	./tacc imp
	$(CC) $(COPTS) -Wno-int-conversion -Wno-format -o soapy imp.c taccutil.o log.o mmalloc.o regexp.o sscanr.o

imp.e:
	echo imp.e updated

taccutil.o: taccutil.c
	$(CC) $(COPTS) -c taccutil.c

log.o: log.c
	$(CC) $(COPTS) -c log.c

mmalloc.o: mmalloc.c
	$(CC) $(COPTS) -c -D__UNIX__ mmalloc.c

regexp.o: regexp.c
	$(CC) $(COPTS) -c regexp.c

sscanr.o: sscanr.c
	$(CC) $(COPTS) -c sscanr.c

passes: pass2.c pass1.c
	echo all up to date

pass2.c: imp2c pass2.imp filter
	./imp2c pass2.imp|tee pass2.c.raw|cpp -nostdinc -Iemptyheaders -iquote emptyheaders -C -P -o pass2.c
	indent -bad -dj -bap -ci1 -cli0.5 -di4 -nbc -nfc1 -i3 -npsl -nsc -br -ce -sob -fca -l200 -ss pass2.c
	ecce pass2.c -command "(f/0 b/s/0b/)0;%c" 2>/dev/null
	#diff pass2.c pass2.c.BASELINE
	ctohtml pass2.c > pass2.c.html
	ctohtml imp2c.c > imp2c.c.html
	ctohtml imp2c.e > imp2c.e.html

pass1.c: imp2c pass1.imp filter
	./imp2c pass1.imp|tee pass1.c.raw|cpp -nostdinc -Iemptyheaders -iquote emptyheaders -C -P -o pass1.c
	indent -bad -dj -bap -ci1 -cli0.5 -di4 -nbc -nfc1 -i3 -npsl -nsc -br -ce -sob -fca -l200 -ss pass1.c
	ecce pass1.c -command "(f/0 b/s/0b/)0;%c" 2>/dev/null
	#diff pass1.c pass1.c.BASELINE
	ctohtml pass1.c > pass1.c.html
	ctohtml imp2c.c > imp2c.c.html
	ctohtml imp2c.e > imp2c.e.html

test.ii: test.imp filter imp2c
	./filter < test.imp > test.ii
	./imp2c > test.c
	indent -bad -dj -bap -ci1 -cli0.5 -di4 -nbc -nfc1 -i3 -npsl -nsc -br -ce -sob -fca -l200 -ss test.c
	cat test.c


imp2c: imp2c.c mmalloc.o filter
	$(CC) $(COPTS) -o imp2c imp2c.c taccutil.o log.o mmalloc.o regexp.o sscanr.o
	mkdir -p emptyheaders
	touch emptyheaders/i2clib.h emptyheaders/stdarg.h emptyheaders/stdio.h emptyheaders/stdlib.h emptyheaders/string.h

filter: filter.c
	$(CC) $(COPTS) -o filter filter.c

imp2c.c: imp2c.e tacc
	./tacc imp2c

tacc: tacc.c
	$(CC) $(COPTS) -o tacc tacc.c


upload:
	scp README.txt i2clib.h imp.e debugf.h debug.h imp2c.h log.h mmalloc.h regexp.h sscanr.h tacc.h taccutil.h Makefile filter.c imp2c.e tacc.c regexp.c sscanr.c taccutil.c log.c mmalloc.c test.imp pass1.imp pass2.imp gtoal@gtoal.com:gtoal.com/src/imp2c/

clean:
	rm -f *.o imp2c filter tacc soapy test.ii imp2c.c *.raw *~ mnem.stk imp2c.h imp.h pass1.c pass2.c imp.c test.c imp2c.tar.gz
	rm -rf emptyheaders

tar:
	make clean
	tar -cvzf ../imp2c.tar.gz debugf.h filter.c log.c Makefile mmalloc.h pass1.imp pass2.imp regexp.c sscanr.c tacc.c taccutil.c test.imp debug.h i2clib.h imp2c.e imp.e log.h mmalloc.c regexp.h sscanr.h tacc.h taccutil.h README.txt
	mv ../imp2c.tar.gz .
