CLIB= ../../lib/
DCLIB=../../dlib/
CINC= ../../include/
SRCDIR=$(HOME)/cworks/cx
BINDIR=$(HOME)/bin
LIBS1= $(CLIB)libRJB.a $(CLIB)libRJBx.a
LIBS2= $(DCLIB)libRJB.a $(DCLIB)libRJBx.a
OBJECTS1 = cx.o.o mxt.o.o sincos.o.o regex.o.o resize.o.o getargs.o.o dataonfile.o.o lowlevel_timer.o.o 
OBJECTS1D= cx.d.o mxt.d.o sincos.d.o regex.d.o resize.d.o getargs.d.o dataonfile.d.o lowlevel_timer.d.o 
OBJECTS2 = cxx.o.o varsA.o.o varsP.o.o varsS.o.o traps.o.o varsV.o.o
OBJECTS2D= cxx.d.o varsA.d.o varsP.d.o varsS.d.o traps.d.o varsV.d.o
OBJECTS= $(OBJECTS1) $(OBJECTS2D) $(OBJECTS2)
LIBANSI = /usr/local/lib/libansi.a 
DEBUG=
UNIBIN=-unibin64
CCOPTIONS=-DCX -rwstrings $(shell ./machdepLDOPTS shobj) #-I$(CINC)local
CFLAGS= $(DEBUG) $(CCOPTIONS) -DCXLIB
CFLAGSOPT= $(DEBUG) $(CCOPTIONS) -DCXLIB
CC= gccopt $(UNIBIN)
AR= $(shell ./machdepcomp ar)
CHECK=-c

HEADERS = cx.h varsedit.h mxt.h sincos.h traps_.h ALLOCA.h lowlevel_timer.h sse_mathfun.h
CXERRNO = $(CINC)local/cxerrno.h

cx: sdcx socx
	echo $(SRCDIR)
	sleep 1
	touch cx .make_success

sdcx: dcx tmp
#	(cd tmp ; ar x $(CLIB)libRJB.a ; ar x $(DCLIB)libRJBx.a ; \
#		$(CC) $(shell ./machdepLDOPTS shlib $(DCLIB)libRJVB.so) -o $(DCLIB)libRJVB.so $(OBJECTS1) $(OBJECTS2D) $(shell ./machdeplibs) ; \
#		rm -f * )
	$(CC) $(shell ./machdepLDOPTS shlib $(DCLIB)libRJVB.so) -o $(DCLIB)libRJVB.so $(OBJECTS1) $(OBJECTS2D) $(shell ./machdeplibs)
	touch sdcx .make_success
	 # make sure tmp is not newer than dcx -- or even sdcx...
	touch -r dcx tmp

socx: ocx tmp
#	(cd tmp ; ar x $(CLIB)libRJB.a ; ar x $(CLIB)libRJBx.a ; \
#		$(CC) $(shell ./machdepLDOPTS shlib $(CLIB)libRJVB.so) -o $(CLIB)libRJVB.so $(OBJECTS1) $(OBJECTS2) $(shell ./machdeplibs) ; \
#		rm -f * )
	$(CC) $(shell ./machdepLDOPTS shlib $(CLIB)libRJVB.so) -o $(CLIB)libRJVB.so $(OBJECTS1) $(OBJECTS2) $(shell ./machdeplibs)
	touch socx .make_success
	 # make sure tmp is not newer than ocx -- or even socx...
	touch -r ocx tmp

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

dcx: $(MAKEFILE) $(LIBS2) headers $(CXERRNO) $(BINDIR)/xpipe tags # $(LIBANSI)
	-rm -f tmp/.env/*
	touch  dcx
	touch .make_success

ocx: $(MAKEFILE) $(LIBS1) headers $(CXERRNO) $(BINDIR)/xpipe tags # $(LIBANSI)
	-rm -f tmp/.env/*
	touch  ocx
	touch .make_success

cx.h: CX_writable_strings.h
	touch -r $? $@

VARSSRC=varsA.c varsP.c varsS.c varsV.c

# tags: cx.c alloca.c cxx.c mxt.c sincos.c regex.c resize.c dataonfile.c lowlevel_timer.c getargs.c $(VARSSRC) traps.c $(HEADERS) cxerrno.h varsintr.h
tags: $(OBJECTS1:.o.o=.c) $(OBJECTS2:.o.o=.c) $(HEADERS) cxerrno.h varsintr.h alloca.c
	-ctags $+

headers: $(HEADERS) $(CXERRNO)
	cp -p cx.h $(CINC)local/cx.h
	cp -p ALLOCA.h $(CINC)local
	cp -p varsedit.h $(CINC)local
	cp -p mxt.h sincos.h $(CINC)local
	cp -p traps_.h $(CINC)local/traps.h
	cp -p NaN.h $(CINC)local
	cp -p lowlevel_timer.h $(CINC)local
	cp -p sse_mathfun.h $(CINC)local
	touch headers

mxt.h: $(CINC)local/NaN.h
sincos.h: $(CINC)local/NaN.h

$(LIBANSI): exit.c strdup.c strstr.c strerror.c strtoul.c ftime.c
	$(CC) $(CHECK) $?
	$(AR)  $(LIBANSI) $(?:.c=.o)
	ranlib $(LIBANSI)
	rm -f $(?:.c=.o)

$(DCLIB)libRJBx.a: $(OBJECTS2D)
	$(AR) $(DCLIB)libRJBx.a $(OBJECTS2D)
	ranlib $(DCLIB)libRJBx.a
	#zero $?

$(CLIB)libRJB.a: $(OBJECTS1)
	$(AR) $(CLIB)libRJB.a $(OBJECTS1)
	ranlib $(CLIB)libRJB.a
	#zero $?

$(DCLIB)libRJB.a: $(OBJECTS1D)
	$(AR) $(DCLIB)libRJB.a $(OBJECTS1D)
	ranlib $(DCLIB)libRJB.a
	#zero $?

$(CLIB)libRJBx.a: $(OBJECTS2)
	$(AR) $(CLIB)libRJBx.a $(OBJECTS2)
	ranlib $(CLIB)libRJBx.a
	#zero $?

$(CXERRNO): cxerrno.h
	cp -p cxerrno.h $(CINC)local

cx.o.o: cx.c alloca.c cx.h $(CXERRNO) mxt.h $(CINC)local/Macros.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGS) -o $@ $(CHECK) $(@:.o.o=.c)

cx.d.o: cx.o.o
	rm -f $@
	$(CC) $(CFLAGS) -g -o $@ $(CHECK) $(@:.d.o=.c)

cxx.d.o: cxx.c varsedit.h cx.h $(CXERRNO) $(CINC)local/Macros.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGS) -g -o $@ $(CHECK) $(@:.d.o=.c)

cxx.o.o: cxx.c varsedit.h cx.h $(CXERRNO) $(CINC)local/Macros.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGS) -o $@ $(CHECK) $(@:.o.o=.c)

varsA.d.o: varsA.c varsintr.h varsedit.h mxt.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGS) -g -o $@ $(CHECK) $(@:.d.o=.c)
varsP.d.o: varsP.c varsintr.h varsedit.h mxt.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGS) -g -o $@ $(CHECK) $(@:.d.o=.c)
varsS.d.o: varsS.c varsintr.h varsedit.h mxt.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGS) -g -o $@ $(CHECK) $(@:.d.o=.c)
varsV.d.o: varsV.c varsintr.h varsedit.h mxt.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGS) -g -o $@ $(CHECK) $(@:.d.o=.c)

varsA.o.o: varsA.c varsintr.h varsedit.h mxt.h $(CINC)local/cpu.h
	rm -f varsA.o.o
	$(CC) $(CFLAGS) -o $@ $(CHECK) $(@:.o.o=.c)
varsP.o.o: varsP.c varsintr.h varsedit.h mxt.h $(CINC)local/cpu.h
	rm -f varsP.o.o
	$(CC) $(CFLAGS) -o $@ $(CHECK) $(@:.o.o=.c)
varsS.o.o: varsS.c varsintr.h varsedit.h mxt.h $(CINC)local/cpu.h
	rm -f varsS.o.o
	$(CC) $(CFLAGS) -o $@ $(CHECK) $(@:.o.o=.c)
varsV.o.o: varsV.c varsintr.h varsedit.h mxt.h $(CINC)local/cpu.h
	rm -f varsV.o.o
	$(CC) $(CFLAGS) -o $@ $(CHECK) $(@:.o.o=.c)

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

mxt.d.o: mxt.c mxt.h  $(CINC)local/Macros.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGSOPT) -g -o $@ $(CHECK) $(@:.d.o=.c)

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

sincos.d.o: sincos.c sincos.h  $(CINC)local/Macros.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGSOPT) -g -o $@ $(CHECK) $(@:.d.o=.c)

regex.o.o: regex.c  $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGSOPT) -no-rwstrings -s -o $@ $(CHECK) $(@:.o.o=.c)

regex.d.o: regex.c  $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGSOPT) -no-rwstrings -s -g -o $@ $(CHECK) $(@:.d.o=.c)

dataonfile.o.o: dataonfile.c  $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGSOPT) -BSD -s -o $@ $(CHECK) $(@:.o.o=.c)

dataonfile.d.o: dataonfile.c  $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGSOPT) -BSD -s -g -o $@ $(CHECK) $(@:.d.o=.c)

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

lowlevel_timer.d.o: lowlevel_timer.c lowlevel_timer.h  $(CINC)local/Macros.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGSOPT) -g -o $@ $(CHECK) $(@:.d.o=.c)

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

resize.o.o: resize.c  $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGSOPT) -s -o $@ $(CHECK) $(@:.o.o=.c)

resize.d.o: resize.c  $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGSOPT) -s -g -o $@ $(CHECK) $(@:.d.o=.c)

resize: resize.c $(CLIB)libRJB.a 
	$(CC) $(CFLAGSOPT) -DRESIZE_STANDALONE -s -o resize $< -L$(CLIB) -lRJB

getargs.o.o: getargs.c  $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGSOPT) -o $@ $(CHECK) $(@:.o.o=.c)

getargs.d.o: getargs.c  $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGSOPT) -g -o $@ $(CHECK) $(@:.d.o=.c)

traps.o.o: traps.c traps_.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGSOPT) -o $@ $(CHECK) $(@:.o.o=.c)

traps.d.o: traps.c traps_.h $(CINC)local/cpu.h
	rm -f $@
	$(CC) $(CFLAGS) -g -o $@ $(CHECK) $(@:.d.o=.c)

$(BINDIR)/xpipe: xpipe.c
	gccopt -BSD $(CFLAGS) -o xpipe xpipe.c
	mv xpipe $(BINDIR)

xpipetest: xpipetest.c $(BINDIR)/xpipe cx
	gccopt -g -o xpipetest xpipetest.c -L$(DCLIB) -lRJBx -L$(CLIB) -lRJB -lm

TESTSOURCE=try
TOBJECTS = $(OBJECTS1) $(OBJECTS2D) $(TESTSOURCE).o
MDIR = $(MAKEDIR)

s$(TESTSOURCE) : $(MDIR)maketest $(TOBJECTS) sdcx
	$(CC) -g $(DEBUG) $(CC1PTIONS) $(TESTSOURCE).o -L$(DCLIB) -lRJVB -lm -lc -o s$(TESTSOURCE)
	touch .make_success

$(TESTSOURCE) : dcx $(MDIR)maketest $(TOBJECTS)
	$(CC) -g $(DEBUG) $(CC1PTIONS) $(TESTSOURCE).o -L$(DCLIB) -lRJBx -L$(CLIB) -lRJB -lm -lc -o $(TESTSOURCE)
	touch .make_success


$(TESTSOURCE).o : $(TESTSOURCE).c *.h
	 $(CC)  -g $(CFLAGS) $(CHECK) $(TESTSOURCE).c

all: cx test
