CHECK=-c
CLIB= ../../lib/
DCLIB= ../../dlib/
CINC= ../../include/
LIBS=$(CLIB)libRJB-graf.a
SHLIBS=$(CLIB)libRJVB-graf.so
SRC= graftool.c graffont.c grafmous.c axes.c fig_save.c fig_graf.c xtb.c xtb_alone.c grafvarsV.c joystick.c DSlate.c
OBJECTS= graftool.o.o graffont.o.o grafmous.o.o axes.o.o fig_save.o.o fig_graf.o.o xtb.o.o xtb_alone.o.o grafvarsV.o.o joystick.o.o DSlate.o.o
DEBUG=
OPTIM=
LDFLAGS= 
TESTFLAG=-g
CFLAGS=-rwstrings $(DEBUG) $(OPTIM)
LIBCFLAGS=$(CFLAGS) $(shell ./machdepLDOPTS shobj)
ARCH=-unibin64
CC= gccopt $(ARCH)
AxesCC= $(CC) $(LIBCFLAGS) #gcc -O -finline-functions -fkeep-inline-functions -pipe $(CHECK) -g -Q
AR=$(shell machdepcomp ar)

TESTSOURCE=graftest
TESTOBJ= $(TESTSOURCE).o
T_OBJECTS = $(TESTOBJ)
ULIBS = $(CLIB)libRJB.a $(CLIB)libRJBx.a
SHULIBS = $(CLIB)libRJVB.so $(SHLIBS)
MDIR = $(MAKEDIR)
HEADERFILES = graf_tool.h Graf_Macros.h axes_.h fig_object.h fig_save.h fig_graphics.h xtb.h grafvarsedit.h joystick.h DSlate.h DrawingSlate.h

graftool: tags $(MAKEFILE) $(SHLIBS) ux11_m headers .make_success
	touch graftool

.make_success:
	echo > .make_success

$(SHLIBS): $(LIBS) tmp
#	-(cd tmp ; rm -rf * ;\
#		ar x $(LIBS) ;\
#		gccopt $(shell ./machdepLDOPTS shlib $(SHLIBS)) -o $(SHLIBS) $(OBJECTS) -L$(CLIB) -lux11 $(GLLIBS) -lXext -lX11 $(shell ./machdeplibs) ;\
#		echo "It is normal to get warnings about undefined symbols on e.g. Darwin" ;\
#		rm -f * )
	-gccopt $(ARCH) $(shell ./machdepLDOPTS shlib $(SHLIBS)) -o $(SHLIBS) $(OBJECTS) -L$(CLIB) -lux11 $(GLLIBS) -lXext -lX11 $(shell ./machdeplibs)
	touch -r $(LIBS) tmp

tmp:
	-rm -rf tmp
	-mkdirhier tmp/.env

tags: $(OBJECTS:.o.o=.c) $(HEADERFILES) ../cx/tags 3dplot.c ux11/*.[ch] ../OpenGL/libaux/tags Particles.c $(TESTSOURCE).c
	-ctags $+

../cx/tags:
	-cmake cx -d ../cx tags

../OpenGL/libaux/tags: ../OpenGL/libaux/*.[ch] ../OpenGL/libtk/*.[ch] 
	-( cd ../OpenGL/libaux ; ctags ../lib*/*.[ch] )

$(CINC)local/graftool.h: graf_tool.h
	cp -p graf_tool.h $(CINC)local/graftool.h

$(CINC)local/axes.h: axes_.h
	cp -p axes_.h $(CINC)local/axes.h

headers: $(HEADERFILES) $(CINC)local/graftool.h $(CINC)local/axes.h
	cp -p Graf_Macros.h $(CINC)local
	cp -p fig_save.h fig_object.h fig_graphics.h $(CINC)local
	cp -p grafvarsedit.h $(CINC)local
	cp -p joystick.h $(CINC)local
	cp -p DrawingSlate.h $(CINC)local
	-cp -p xtb.h $(CINC)local
	touch headers

$(LIBS): $(OBJECTS)
	-rm -f tmp/.env/*
	$(AR) $(CLIB)libRJB-graf.a $?
	-ranlib $(CLIB)libRJB-graf.a
	#zero $?

graftool.o.o: graftool.c graf_tool.h  Graf_Macros.h $(CINC)local/Macros.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(LIBCFLAGS) -o $@ $(CHECK) $(@:.o.o=.c)

graffont.o.o: graffont.c fontdefs.h Graf_Macros.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(LIBCFLAGS) -o $@ $(CHECK) $(@:.o.o=.c)

grafmous.o.o: grafmous.c $(CINC)local/Macros.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(LIBCFLAGS) -o $@ $(CHECK) $(@:.o.o=.c)

fig_save.o.o: fig_save.c fig_save.h fig_object.h $(CINC)local/Macros.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(LIBCFLAGS) -o $@ $(CHECK) $(@:.o.o=.c)

fig_graf.o.o: fig_graf.c fig_graphics.h fig_save.h fig_object.h Graf_Macros.h $(CINC)local/cpu.h
	rm -f $@
	$(AxesCC) -o $@ $(CHECK) $(@:.o.o=.c)

axes.o.o: axes.c axes_.h Graf_Macros.h $(CINC)local/cpu.h
	rm -f $@
	$(AxesCC) -o $@ $(CHECK) $(@:.o.o=.c)

xtb.o.o: xtb.c $(CINC)local/Macros.h $(CINC)local/cpu.h xgALLOCA.h
	rm -f $@
	$(CC) $(LIBCFLAGS) -D_GRAFTOOL_ -g -o $@ $(CHECK) $(@:.o.o=.c)

xtb_alone.o.o: xtb_alone.c $(CINC)local/Macros.h $(CINC)local/cpu.h xgALLOCA.h
	rm -f $@
	$(CC) $(LIBCFLAGS) -g -o $@ $(CHECK) $(@:.o.o=.c)

grafvarsV.o.o: grafvarsV.c grafvarsedit.h $(CINC)local/varsedit.h $(CINC)local/xtb.h $(CINC)local/ux11.h $(CINC)local/Macros.h $(CINC)local/cpu.h xgALLOCA.h
	rm -f $@
	$(CC) $(LIBCFLAGS) -o $@ $(CHECK) $(@:.o.o=.c)

joystick.o.o: joystick.[ch]
	rm -f $@
	$(CC) $(LIBCFLAGS) -o $@ $(CHECK) $(@:.o.o=.c)

DRAWINGSLATE_TYPE=CALCOMP_HIRES

DrawingSlate.h: DSlate.h
	sed -e "s/define_DRAWINGSLATE_TYPE/#define $(DRAWINGSLATE_TYPE)/g" < DSlate.h > DrawingSlate.h

DSlate.c: DrawingSlate.c

DSlate.o.o: DrawingSlate.c DrawingSlate.h
	rm -f $@
	$(CC) $(LIBCFLAGS) -o $@ $(CHECK) DrawingSlate.c

# DSlateC.o.o: DrawingSlate.[ch]
# 	rm -f $@
# 	$(CC) -DCALCOMP2000 $(LIBCFLAGS) -o $@ $(CHECK) DrawingSlate.c
# 
# DSlateK.o.o: DrawingSlate.[ch]
# 	rm -f $@
# 	$(CC) -DKURTA_IS_ONE_4 $(LIBCFLAGS) -o $@ $(CHECK) DrawingSlate.c

joycallib: graftool joystick.[ch]
	rm -f $@
	$(CC) $(LIBCFLAGS) $(LDFLAGS) -DSTAND_ALONE joystick.c -L$(CLIB) -lRJBx -L$(CLIB) -lRJB -lm -o joycallib

slatetest: graftool DrawingSlate.[ch]
	rm -f $@
	$(CC) -g $(CFLAGS) -DSTAND_ALONE $(CHECK) DrawingSlate.c
	gccopt -g $(CFLAGS) $(LDFLAGS) -DSTAND_ALONE DrawingSlate.o -L$(CLIB) -lRJBx -L$(CLIB) -lRJB -lux11 $(GLLIBS) -lXext -lX11 -lm -o slatetest

Particles : Particles.o graftool $(ULIBS) joystick.h DrawingSlate.h
	@echo "LDFLAGS=$(LDFLAGS) CLIB=$(CLIB)"
	$(CC) $(CFLAGS) $(LDFLAGS) Particles.o -L$(CLIB) -lRJB-graf $(ULIBS) -lux11 $(GLLIBS) -lXext -lX11 -lm -o Particles
	 touch .make_success

Particles.o : Particles.c $(HEADERFILES) tags
	 @echo "CFLAG=$(CFLAG)"
	 $(CC) $(CFLAGS) -o $@ $(CHECK) $(@:.o=.c)

testp : $(MDIR)maketest $(T_OBJECTS) graftool $(ULIBS)
	$(CC) $(TESTFLAG) $(LDFLAGS) $(T_OBJECTS) -L$(DCLIB) -lRJBx -L$(CLIB) -lRJB $(GLLIBS) -lXext -lX11_s -lm -lc_s -o $(TESTSOURCE)p

s$(TESTSOURCE) : $(MDIR)maketest $(T_OBJECTS) graftool $(SHULIBS)
	@echo "LDFLAGS=$(LDFLAGS) DCLIB=$(DCLIB) CLIB=$(CLIB) GLLIBS=$(GLLIBS)"
	$(CC) $(TESTFLAG) $(CFLAGS) $(LDFLAGS) $(T_OBJECTS) -L$(DCLIB) -lRJVB -L$(CLIB) -lRJVB-graf $(shell ./machdeplibs) $(GLLIBS) -lm -o s$(TESTSOURCE)
	 touch .make_success

$(TESTSOURCE) : $(MDIR)maketest $(T_OBJECTS) graftool $(ULIBS)
	@echo "LDFLAGS=$(LDFLAGS) DCLIB=$(DCLIB) CLIB=$(CLIB) GLLIBS=$(GLLIBS)"
	$(CC) $(TESTFLAG) $(CFLAGS) $(LDFLAGS) $(T_OBJECTS) -L$(DCLIB) -lRJBx -L$(CLIB) -lRJB-graf -lRJB -lux11 $(GLLIBS) -lXext -lX11 -lm -o $(TESTSOURCE)
	 touch .make_success

$(TESTOBJ) : $(TESTSOURCE).c $(HEADERFILES) tags
	 @echo "TESTFLAG=$(TESTFLAG) CFLAG=$(CFLAG)"
	 $(CC)  $(TESTFLAG) $(CFLAGS) -DNO_ENUM_BOOLEAN -o $(TESTOBJ) $(CHECK) $(TESTSOURCE).c 

3dplot: graftool 3dplot.o $(ULIBS)
	$(CC) $(CFLAGS) -o 3dplot 3dplot.o -L$(CLIB) -lRJB -lRJBx $(GLLIBS) -lXext -lX11 -lm
	touch .make_success

3dplot.o: 3dplot.c axes_.h
	$(CC) -Q $(CFLAGS) $(CHECK) 3dplot.c

funplot: graftool funplot.o $(ULIBS)
	$(CC) $(CFLAGS) -o funplot funplot.o -L$(CLIB) -lRJB -lRJBx $(GLLIBS) -lXext -lX11 -lm
	touch .make_success

funplot.o: funplot.c axes_.h
	$(CC) $(CFLAGS) $(CHECK) funplot.c

ux11_m:	ux11/ux11*.[ch]
	( cd ux11 ; cmake ux11_sa CHECK=$(CHECK) CLEVEL=$(CLEVEL) DEBUG=$(DEBUG) )
	touch ux11_m

