# must include this for basic directories and such
include ../Make.options

# components
OPTS        = -g -fpic -Wall $(THREAD_OPTS) $(STRING_OPTS) -DTCP_CONTROL # -DUDP_CONTROL
COMMON_OBJS = tcp.o udp.o message.o vetp.o vutil.o log.o vilib.o threadlib.o semaphore.o
VLIB_OBJS   = vlib.o $(COMMON_OBJS)
#VILIB_OBJS  = vilib.o $(COMMON_OBJS)
#SERVER_OBJS = vexecd.o log.o process.o $(COMMON_OBJS)
SERVER_OBJS = vsinfod.o process.o $(COMMON_OBJS)
CLIENT_OBJS = vcinfod.o job.o $(COMMOM_OBJS)

all: address.h libvlib.so vsinfod vcinfod vinfo.h #vexecd libcvlib.so

install:
	cp -f libvlib.so $(WIND_LIB)
	cp -f libcvlib.so $(WIND_LIB)
	cp -f vlib.h $(WIND_INC)
	cp -f cvlib.h $(WIND_INC)
	cp -f vexecd $(WIND_BIN)

clean: 
	rm -f $(COMMON_OBJS) $(VLIB_OBJS) $(SERVER_OBJS) $(CLIENT_OBJS) libvlib.so vsinfod vexecd 

squeaky:
	rm -f *.*~


# the server
vsinfod: $(SERVER_OBJS)
	$(PURIFY) $(CC) $(OPTS) -o vsinfod $(SERVER_OBJS) $(STRING_LIB) $(THREAD_LIB)

vsinfod.o: vsinfod.cc vsinfod.i.h
	$(CC) $(OPTS) -c vsinfod.cc

vcinfod: $(CLIENT_OBJS)
	$(PURIFY) $(CC) $(OPTS) -o vcinfod $(CLIENT_OBJS) $(STRING_LIB) $(VEXEC_LIB) $(THREAD_LIB)

vcinfod.o: vcinfod.cc vcinfod.i.h
	$(CC) $(OPTS) -c vcinfod.cc

#vexecd: $(SERVER_OBJS)
#	$(PURIFY) $(CC) $(OPTS) -o vexecd $(SERVER_OBJS) $(STRING_LIB) $(THREAD_LIB)

#vexecd.o: vexecd.cc
#	$(CC) $(OPTS) -c vexecd.cc

# vlib -- client library
libvlib.so: $(VLIB_OBJS) 
	$(CC) $(VLIB_OBJS) -shared -o libvlib.so $(STRING_LIB) $(THREAD_LIB)

# c-vlib -- client library (for C clients)
#libcvlib.so: cvlib.o
#	$(CC) cvlib.o -shared -o libcvlib.so $(STRING_LIB) $(THREAD_LIB) $(VEXEC_LIB)


# socket lib
address.h: make_address
	./make_address > address.h

make_address: make_address.cc
	$(CC) -O -Wall -o make_address make_address.cc

tcp.o: tcp.cc tcp.h
	$(CC) $(OPTS) -c tcp.cc

udp.o: udp.cc address.h udp.h
	$(CC) $(OPTS) -c udp.cc

message.o: message.cc message.h
	$(CC) $(OPTS) -c message.cc

vetp.o: vetp.cc vetp.h
	$(CC) $(OPTS) -c vetp.cc

vutil.o: vutil.cc vutil.h
	$(CC) $(OPTS) -c vutil.cc

vlib.o: vlib.cc vlib.h vlib.i.h
	$(CC) $(OPTS) -c vlib.cc

vilib.o: vilib.cc vilib.h
	$(CC) $(OPTS) -c vilib.cc

#cvlib.o: cvlib.cc
#	$(CC) $(OPTS) -c cvlib.cc

log.o: log.cc log.h
	$(CC) $(OPTS) -c log.cc

process.o: process.cc process.h
	$(CC) $(OPTS) -c process.cc

semaphore.o: semaphore.cc semaphore.h
	$(CC) $(OPTS) -c semaphore.cc

threadlib.o: threadlib.cc threadlib.h
	$(CC) $(OPTS) -c threadlib.cc

job.o: job.cc job.h
	$(CC) $(OPTS) -c job.cc
