PROGRAM = main
o	= .o
# LDOBJS  = _object$o Object$o Object-imp$o Object-lib$o \
# 	  Expression$o Scanner$o CokeScanner$o \
# 	  VPU$o VPU5$o VPU-none$o VPU-i386$o VPU-ppc$o compile$o \
# 	  libcvpu.a libvpu.a libopcodes.a libbfd.a libiberty.a libintl.a mpint/mpint.a
LDOBJS  = _object$o Object$o Object-imp$o Object-lib$o \
	  Expression$o Scanner$o CokeScanner$o \
	  VPU5$o VPU-arch$o compile$o \
	  mpint/mpint.a
USYS	= $(shell uname -s | tr 'A-Z' 'a-z')
UMAC	= $(shell uname -m | sed 's/i[456789]86/i386/;s/Power Macintosh/ppc/')
ARCH	= VPU-$(USYS)-$(UMAC)
LDLIBS  = -lstdc++ -lreadline -lncurses
SHOBJS	= 
IDC  = idc -k -Jmpint # -Wc,-pipe
SWIG = swig -pepsi

all : mpint/mpint.a $(SHOBJS) $(LDOBJS) $(PROGRAM)

%.so : %.st
	$(IDC) -s $<

%.o : %.st
	$(IDC) -c $<

%.a : $(ARCH)/%.a
	cp $< $@
	ranlib $@

mpint/mpint.a : $(wildcard mpint/*.[ch])
	$(MAKE) -C mpint

$(ARCH)/libcvpu.a : lib/cvpu.cc
	$(MAKE) -C lib # ABI_FLAG="-arch $(ARCH)"
	rm -f $(ARCH)/libcvpu.a
	mv lib/libcvpu.a $(ARCH)/libcvpu.a
	$(MAKE) -C lib clean

% : %.st $(LDOBJS)
	$(IDC) $< $(LDOBJS) $(LDLIBS)
	./mksyms $@

VPU-arch.st :
	ln -s VPU-$(shell idc -C arch).st VPU-arch.st

run : all
	./$(PROGRAM) < test.k

sanaras : .FORCE
	./main-i386 boot.k sanaras.k
	./main-ppc  boot.k sanaras.k

WINOBJS	= ExternalLibrary$o XSetWindowAttributes$o XGCValues$o XEvent$o Xlib$o Window-lib$o Window-x11$o Matrix$o Font$o

test : test.st $(LDOBJS) $(WINOBJS)
	$(IDC) -J/usr/X11R6/include test.st $(LDOBJS) $(WINOBJS) $(LDLIBS) -L/usr/X11R6/lib -lX11 -lXext

test-widgets : test-widgets.st $(LDOBJS) $(WINOBJS)
	$(IDC) -J/usr/X11R6/include test-widgets.st $(LDOBJS) $(WINOBJS) $(LDLIBS) -L/usr/X11R6/lib -lX11 -lXext

test-input : test-input.st $(LDOBJS) $(WINOBJS)
	$(IDC) -J/usr/X11R6/include test-input.st $(LDOBJS) $(WINOBJS) $(LDLIBS) -L/usr/X11R6/lib -lX11 -lXext

CAIROBJS = $(WINOBJS) libcairo$o cairo$o cairo-xlib$o

cmain : main.st $(LDOBJS) $(CAIROBJS)
	$(IDC) -o $@ -J/usr/X11R6/include -J/usr/local/include/cairo main.st \
		$(LDOBJS) $(CAIROBJS) $(LDLIBS) -L/usr/local/lib -lcairo -L/usr/X11R6/lib -lX11 -lXext
	./mksyms $@

cairo-app : cairo-app.st $(LDOBJS) $(CAIROBJS)
	$(IDC) -J/usr/X11R6/include -J/usr/local/include/cairo cairo-app.st \
		$(LDOBJS) $(CAIROBJS) $(LDLIBS) -L/usr/local/lib -lcairo -L/usr/X11R6/lib -lX11 -lXext

libcairo$o : libcairo.st
	$(IDC) -J/usr/local/include/cairo -c libcairo.st

libcairo.st : libcairo.i
	$(SWIG) -I/usr/local/include/cairo libcairo.i

libXlib$o : libXlib.st
	$(IDC) -J/usr/X11R6/include/X11 -c libXlib.st

libXlib.st : libXlib.i
	$(SWIG) -I/usr/X11R6/include/X11 libXlib.i

SOCKOBJS = $(CAIROBJS) Socket$o

smain : main.st $(LDOBJS) $(SOCKOBJS)
	$(IDC) -o $@ -J/usr/X11R6/include -J/usr/local/include/cairo main.st \
		$(LDOBJS) $(SOCKOBJS) $(LDLIBS) -L/usr/local/lib -lcairo -L/usr/X11R6/lib -lX11 -lXext
	./mksyms $@

THROBJS = $(SOCKOBJS) Thread$o Process$o

pmain : main.st $(LDOBJS) $(THROBJS)
	$(IDC) -o $@ -J/usr/X11R6/include -J/usr/local/include/cairo main.st \
		$(LDOBJS) $(THROBJS) $(LDLIBS) -L/usr/local/lib -lcairo -L/usr/X11R6/lib -lX11 -lXext -lpthread
	./mksyms $@

test-process : $(LDOBJS) $(THROBJS) test-process.st
	$(IDC) -o $@ -J/usr/X11R6/include -J/usr/local/include/cairo test-process.st \
		$(LDOBJS) $(THROBJS) $(LDLIBS) -L/usr/local/lib -lcairo -L/usr/X11R6/lib -lX11 -lXext -lpthread

XOBJS = $(THROBJS) serialise$o client$o

xmain : main.st $(LDOBJS) $(XOBJS)
	$(IDC) -o $@ -J/usr/X11R6/include -J/usr/local/include/cairo main.st \
		$(LDOBJS) $(XOBJS) $(LDLIBS) -L/usr/local/lib -lcairo -L/usr/X11R6/lib -lX11 -lXext -lpthread
	./mksyms $@

gen : gen.st CokeCompiler.o
	$(IDC) $< $(LDOBJS) $(LDLIBS) CokeCompiler.o

stats : .FORCE
	sort -u $(LDOBJS:$o=.st) | wc -l

tidy: .FORCE
	rm -f *~

clean : tidy .FORCE
	rm -f $(PROGRAM) $(PROGRAM).c $(LIBS) *.exe *.so.c *.so *.o.c *.o .gdb* *.a *.c
	rm -f cmain smain tmain test MC kgi test-widgets monty cairo-app
	rm -f test test-widgets test-input test-process serialise
	rm -f *main main.sym
	rm -rf NONE temp*.txt
	rm -f VPU-arch.*
	$(MAKE) -C mpint clean

spotless : clean .FORCE
#	rm -f libcairo*.st
#	rm -f libXlib*.st

.FORCE :
