.SILENT: help
VERSION=0.4
OBJLIB_NAME=UDPTCPNetwork

-include Makefile.rules

DEFAULT_TCPPORT=6131
DEFAULT_UDPPORT=6131
DEFAULT_SERVER=localhost

CFLAGS=-I./ -ggdb
OBJLIB=network.o udp.o tcp.o unix.o ssl.o json.o webutils.o webserver.o
INCLIB=UDPTCPNetwork.h UDPTCPNetwork-json.h UDPTCPNetwork-webutils.h
DISTNAME=libUDPTCPNetwork-$(VERSION)

ifeq ($(TARGET),)
noconfig: help
endif


all: dep $(TARGET) test-udp test-tcpserver test-tcpclient test-ssl test-json test-webserver test-getrandom test-base64

-include .depend

help:
	echo "set up configuration"
	echo "   make configwindows    to generate the windows build"
	echo "   make configlinux      to generate the linix build"
	echo "   make keygen           create self signed certificate"

configlinux: clean
	cp -f Makefile.rules.linux Makefile.rules

configwindows: clean
	cp -f Makefile.rules.windows Makefile.rules

test-webserver: $(TARGET) test-webserver.o
	$(CXX) test-webserver.o -o $@ -lUDPTCPNetwork -L./ -I./ $(LDFLAGS)
	
test-base64: $(TARGET) test-base64.o
	$(CXX) test-base64.o -o $@ -lUDPTCPNetwork -L./ -I./ $(LDFLAGS)
	
test-getrandom: $(TARGET) test-getrandom.o
	$(CXX) test-getrandom.o -o $@ -lUDPTCPNetwork -L./ -I./ $(LDFLAGS)
	
test-tcpserver: $(TARGET) test-tcpserver.o
	$(CXX) test-tcpserver.o -o $@ -lUDPTCPNetwork -L./ -I./ $(LDFLAGS)
	
test-tcpclient: $(TARGET) test-tcpclient.o
	$(CXX) test-tcpclient.o -o $@ -lUDPTCPNetwork -L./ -I./ $(LDFLAGS)

test-ssl: $(TARGET) test-ssl.o
	$(CXX) test-ssl.o -o $@ -lUDPTCPNetwork -L./ -I./ $(LDFLAGS) 

test-udp: $(TARGET) test-udp.o
	$(CXX) test-udp.o -o $@ -lUDPTCPNetwork -L./ -I./  $(LDFLAGS)

test-json: $(TARGET) test-json.o
	$(CXX) test-json.o -o $@ -lUDPTCPNetwork -L./ -I./  $(LDFLAGS)

keygen:
	# openssl req -nodes -new -newkey rsa:2048 -sha256 -out csr.pem -keyout privkey.pem
	openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privkey.pem -out cert.pem

install: $(TARGET)
	cp -f $(TARGET) $(PREFIX)/lib/
	ln -sf $(PREFIX)/lib/$(TARGET) $(PREFIX)/lib/lib$(OBJLIB_NAME).so
	cp -f UDPTCPNetwork*.h $(PREFIX)/include/
	ldconfig
 
uninstall:
	rm -f $(PREFIX)/lib/$(TARGET)
	rm -f $(PREFIX)/lib/lib$(OBJLIB_NAME).so
	rm -f $(PREFIX)/include/UDPTCPNetwork*.h

rebuild: clean all

$(TARGET): $(OBJLIB)
	$(CXX) -shared $(LINKPARAMS) -o $(TARGET) $^ $(LDFLAGS)
	if test -f "lib$(OBJLIB_NAME).so.$(VERSION)"; then ln -sf $(TARGET) lib$(OBJLIB_NAME).so; fi
	ar rcs lib$(OBJLIB_NAME).a $(OBJLIB)

dep:
	$(CXX) -MM `ls *.cc` $(CXXFLAGS) > $(DEPENDFILE)
	
clean:
	rm Makefile.rules -rf 
	rm test-tcpserver -rf
	rm test-tcpclient -rf
	rm test-webserver -rf
	rm test-getrandom -rf
	rm test-base64 -rf
	rm test-json -rf
	rm test-udp -rf
	rm test-ssl -rf
	rm -rf gmon.out
	rm *.s -rf
	rm *.exe -rf
	rm *.o -rf
	rm *.oo -rf
	rm *~ -rf
	rm -rf config.h
	rm -rf .depend
	rm -rf *.so
	rm -rf *.a
	rm -rf *.dll
	rm -rf *.so.*
	rm -rf *.pem -rf

config: 
	echo "#ifndef _CONFIG_H_" > config.h
	echo "#define _CONFIG_H_" >> config.h
	echo "" >> config.h
	echo "#define UDPTCPNETWORK_VERSION \"$(VERSION)\"" >> config.h
	echo "" >> config.h
	echo "#define PREFIX \"$(PREFIX)\"" >> config.h
	echo "#define ETCPREFIX \"$(ETCPREFIX)\"" >> config.h
	echo "" >> config.h
	echo "#endif" >> config.h

dist: clean
	mkdir -p $(DISTNAME)
	cp -rf Makefile* $(DISTNAME)
	cp -rf Changelog $(DISTNAME)
	cp -rf *.h $(DISTNAME)
	cp -rf *.cc $(DISTNAME)
	tar cvzf $(DISTNAME).tgz  --exclude=*/CVS/* --exclude=*/CVS/ $(DISTNAME)
	rm -rf $(DISTNAME)

-include $(DEPENDFILE)

