### Setup ###
BIN_DIR=../../bin
LIB_DIR=../../lib
INC_DIR=../../include
GEN_DIR=./gen

COFLAGS=-g
EXE_EXT=


INC_DIRS=$(INC_DIR) $(GEN_DIR)
SOAPCPP=$(BIN_DIR)/soapcpp2$(EXE_EXT)
SOAPCPP_FLAGS=-I$(BIN_DIR)/import
WSDL2H=$(BIN_DIR)/wsdl2h$(EXE_EXT)

### Files, includes and libraries ###
space:=$(empty) $(empty)
INCS:=$(subst $(space), -I,$(INC_DIRS))

SERVER_OBJS=$(GEN_DIR)/litServerLib.o $(GEN_DIR)/prjServerLib.o $(GEN_DIR)/wshServerLib.o $(GEN_DIR)/litClientLib.o listener.o server.o fileio.o
CLIENT_OBJS=$(GEN_DIR)/litClientLib.o $(GEN_DIR)/prjClientLib.o $(GEN_DIR)/wshClientLib.o $(GEN_DIR)/litHandlerLib.o $(GEN_DIR)/wshHandlerLib.o ProjectorClient.o LightingClient.o WasherClient.o listener.o client.o fileio.o
SERVER_LIBS:= -ldcruntime -ldcxml
CLIENT_LIBS:= -ldcruntime -ldcxml

### Compilation options ###
CIFLAGS=-I$(INCS)
CFLAGS=$(COFLAGS) $(CIFLAGS)
LDFLAGS= -L$(LIB_DIR) -Wl,-rpath,.


all: server$(EXE_EXT) client$(EXE_EXT)
		
server$(EXE_EXT): $(SERVER_OBJS)
		$(CC) -fpic -o server$(EXE_EXT) $(SERVER_OBJS) $(LDFLAGS) $(SERVER_LIBS)

client$(EXE_EXT): $(CLIENT_OBJS)
		$(CC) -fpic -o client$(EXE_EXT) $(CLIENT_OBJS) $(LDFLAGS) $(CLIENT_LIBS)

$(GEN_DIR)/litServerLib.c $(GEN_DIR)/litClientLib.c: $(GEN_DIR)/Lighting.gsoap
		$(SOAPCPP) $(SOAPCPP_FLAGS) -2ucn -plit -d $(GEN_DIR) $(GEN_DIR)/Lighting.gsoap

$(GEN_DIR)/prjServerLib.c $(GEN_DIR)/prjClientLib.c: $(GEN_DIR)/Projector.gsoap
		$(SOAPCPP) $(SOAPCPP_FLAGS) -2ucn -pprj -d $(GEN_DIR) $(GEN_DIR)/Projector.gsoap

$(GEN_DIR)/wshServerLib.c $(GEN_DIR)/wshClientLib.c: $(GEN_DIR)/WashingMachine.gsoap
		$(SOAPCPP) $(SOAPCPP_FLAGS) -2ucn -pwsh -d $(GEN_DIR) $(GEN_DIR)/WashingMachine.gsoap

$(GEN_DIR)/%.gsoap: typemap.dat %.wsdl
		$(WSDL2H) -o $@ -c -t $^
										
$(GEN_DIR)/%.o: $(GEN_DIR)/%.c
		$(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<

%.o: %.c
		$(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<

clean:
		-rm *.o server$(EXE_EXT) client$(EXE_EXT) $(GEN_DIR)/*.*

cleanall:
		-rm *.o server$(EXE_EXT) client$(EXE_EXT) $(GEN_DIR)/*.*
