BASEDIR = /usr
INCLUDEDIR = $(BASEDIR)/include
LIBDIR = $(BASEDIR)/lib
MODULEDIR = $(INCLUDEDIR)/libdconn
DEFINES = -D_REENTRANT
OPTIONS = -O2 -Wall

all: ClientFSM.o DasyneClient.o DasyneServer.o DasyneSettings.o DataMap.o DyBytes.o DyConnect.o DyMutex.o\
	 EDCProtocol.o FlushBuffer.o GlobalSettings.o HandshakePro.o HeaderPro.o LogWriter.o MapSegment.o\
	 NetworkEngine.o NetworkTools.o Object.o PollingConnect.o ServerFSM.o SharedMemory.o SpeckChange.o\
	 TCPListen.o TCPSock.o UDPMsgBuffer.o UDPReceiver.o UDPSock.o
	ar cq libdconn.a *.o
	@echo DyConnect library built!

install: libdconn.a
	cp DyConnect.h $(INCLUDEDIR)
	mkdir $(MODULEDIR)
	mkdir $(MODULEDIR)/dyconnect
	cp libdconn/*.hpp $(MODULEDIR)
	cp libdconn/dyconnect/*.hpp $(MODULEDIR)/dyconnect
	cp libdconn.a $(LIBDIR)
	@echo Installation successful.

uninstall:
	rm $(INCLUDEDIR)/DyConnect.h
	rm $(MODULEDIR)/dyconnect/*.hpp
	rmdir $(MODULEDIR)/dyconnect
	rm $(MODULEDIR)/*.hpp
	rmdir $(MODULEDIR)
	rm $(LIBDIR)/libdconn.a
	@echo Successfully uninstalled.

ClientFSM.o: libdconn/ClientFSM.hpp libdconn/ClientFSM.cpp DasyneSettings.o DataMap.o EDCProtocol.o HandshakePro.o
	g++ -c libdconn/ClientFSM.cpp $(OPTIONS) $(DEFINES)

DasyneClient.o: libdconn/DasyneClient.hpp libdconn/DasyneClient.cpp libdconn/DasyneEngine.hpp ClientFSM.o\
	 DasyneSettings.o
	g++ -c libdconn/DasyneClient.cpp $(OPTIONS) $(DEFINES)

DasyneServer.o: libdconn/DasyneServer.hpp libdconn/DasyneServer.cpp libdconn/DasyneEngine.hpp DasyneSettings.o\
	 DataMap.o FlushBuffer.o ServerFSM.o
	g++ -c libdconn/DasyneServer.cpp $(OPTIONS) $(DEFINES)

DasyneSettings.o: libdconn/DasyneSettings.hpp libdconn/DasyneSettings.cpp GlobalSettings.o PollingConnect.o\
	 NetworkEngine.o UDPSock.o
	g++ -c libdconn/DasyneSettings.cpp $(OPTIONS) $(DEFINES)

DataMap.o: libdconn/DataMap.hpp libdconn/DataMap.cpp DasyneSettings.o FlushBuffer.o MapSegment.o
	g++ -c libdconn/DataMap.cpp $(OPTIONS) $(DEFINES)

DyBytes.o: libdconn/dyconnect/DyBytes.hpp libdconn/dyconnect/DyBytes.cpp GlobalSettings.o Object.o
	g++ -c libdconn/dyconnect/DyBytes.cpp $(OPTIONS) $(DEFINES)

DyConnect.o: DyConnect.h DyConnect.cpp libdconn/SyncArray.hpp libdconn/SyncData.hpp DasyneClient.o DasyneServer.o\
	 DasyneSettings.o
	g++ -c DyConnect.cpp $(OPTIONS) $(DEFINES)

DyMutex.o: libdconn/dyconnect/DyMutex.hpp libdconn/dyconnect/DyMutex.cpp GlobalSettings.o Object.o
	g++ -c libdconn/dyconnect/DyMutex.cpp $(OPTIONS) $(DEFINES)

EDCProtocol.o: libdconn/EDCProtocol.hpp libdconn/EDCProtocol.cpp DasyneSettings.o DataMap.o NetworkTools.o
	g++ -c libdconn/EDCProtocol.cpp $(OPTIONS) $(DEFINES)

FlushBuffer.o: libdconn/FlushBuffer.hpp libdconn/FlushBuffer.cpp NetworkTools.o
	g++ -c libdconn/FlushBuffer.cpp $(OPTIONS) $(DEFINES)

GlobalSettings.o: libdconn/dyconnect/GlobalSettings.hpp libdconn/dyconnect/GlobalSettings.hpp Object.o
	g++ -c libdconn/dyconnect/GlobalSettings.cpp $(OPTIONS) $(DEFINES)

HandshakePro.o: libdconn/HandshakePro.hpp libdconn/HandshakePro.cpp DasyneSettings.o NetworkTools.o
	g++ -c libdconn/HandshakePro.cpp $(OPTIONS) $(DEFINES)

HeaderPro.o: libdconn/HeaderPro.hpp libdconn/HeaderPro.cpp DasyneSettings.o
	g++ -c libdconn/HeaderPro.cpp $(OPTIONS) $(DEFINES)

LogWriter.o: libdconn/LogWriter.hpp libdconn/LogWriter.cpp DasyneSettings.o
	g++ -c libdconn/LogWriter.cpp $(OPTIONS) $(DEFINES)

MapSegment.o: libdconn/MapSegment.hpp libdconn/MapSegment.cpp FlushBuffer.o NetworkTools.o SpeckChange.o
	g++ -c libdconn/MapSegment.cpp $(OPTIONS) $(DEFINES)

NetworkEngine.o: libdconn/dyconnect/NetworkEngine.hpp libdconn/dyconnect/NetworkEngine.cpp DyBytes.o Object.o\
	 SharedMemory.o TCPListen.o TCPSock.o
	g++ -c libdconn/dyconnect/NetworkEngine.cpp $(OPTIONS) $(DEFINES)

NetworkTools.o: libdconn/NetworkTools.hpp libdconn/NetworkTools.cpp DasyneSettings.o HeaderPro.o LogWriter.o\
	 SpeckChange.o UDPReceiver.o
	g++ -c libdconn/NetworkTools.cpp $(OPTIONS) $(DEFINES)

Object.o: libdconn/dyconnect/Object.hpp libdconn/dyconnect/Object.cpp
	g++ -c libdconn/dyconnect/Object.cpp $(OPTIONS) $(DEFINES)

PollingConnect.o: libdconn/dyconnect/PollingConnect.hpp libdconn/dyconnect/PollingConnect.cpp GlobalSettings.o\
	 NetworkEngine.o Object.o TCPSock.o
	g++ -c libdconn/dyconnect/PollingConnect.cpp $(OPTIONS) $(DEFINES)

ServerFSM.o: libdconn/ServerFSM.hpp libdconn/ServerFSM.cpp DasyneSettings.o DataMap.o FlushBuffer.o NetworkTools.o
	g++ -c libdconn/ServerFSM.cpp $(OPTIONS) $(DEFINES)

SharedMemory.o: libdconn/dyconnect/SharedMemory.hpp libdconn/dyconnect/SharedMemory.cpp DyBytes.o DyMutex.o\
	 GlobalSettings.o Object.o TCPSock.o
	g++ -c libdconn/dyconnect/SharedMemory.cpp $(OPTIONS) $(DEFINES)

SpeckChange.o: libdconn/SpeckChange.hpp libdconn/SpeckChange.cpp DasyneSettings.o
	g++ -c libdconn/SpeckChange.cpp $(OPTIONS) $(DEFINES)

TCPListen.o: libdconn/dyconnect/TCPListen.hpp libdconn/dyconnect/TCPListen.cpp GlobalSettings.o Object.o TCPSock.o
	g++ -c libdconn/dyconnect/TCPListen.cpp $(OPTIONS) $(DEFINES)

TCPSock.o: libdconn/dyconnect/TCPSock.hpp libdconn/dyconnect/TCPSock.cpp GlobalSettings.o Object.o
	g++ -c libdconn/dyconnect/TCPSock.cpp $(OPTIONS) $(DEFINES)

UDPMsgBuffer.o: libdconn/UDPMsgBuffer.hpp libdconn/UDPMsgBuffer.cpp DasyneSettings.o
	g++ -c libdconn/UDPMsgBuffer.cpp $(OPTIONS) $(DEFINES)

UDPReceiver.o: libdconn/UDPReceiver.hpp libdconn/UDPReceiver.cpp DasyneSettings.o LogWriter.o UDPMsgBuffer.o
	g++ -c libdconn/UDPReceiver.cpp $(OPTIONS) $(DEFINES)

UDPSock.o: libdconn/dyconnect/UDPSock.hpp libdconn/dyconnect/UDPSock.cpp GlobalSettings.o Object.o TCPSock.o
	g++ -c libdconn/dyconnect/UDPSock.cpp $(OPTIONS) $(DEFINES)

clean:
	-rm *.o
	-rm *.a

