


NAME		:=matfquad
MAJOR_VERSION	:=0
MINOR_VERSION	:=03
VERSION		:=$(MAJOR_VERSION).$(MINOR_VERSION)
LIBNAME		:=lib$(NAME).so
SONAME		:=lib$(NAME).so.$(MAJOR_VERSION)

SYSTEM		:=`uname -s`
#SYSTEM		:=`uname -o | sed 's/\//_/'`
ARCH		:=`uname -m`

CXX		:=g++
#CXX		:=eg++
#CXX		:=clang++

OPTFLAGS	:=-O2
#OPTFLAGS	:=-g3
#OPTFLAGS	+=-march=native
#OPTFLAGS	+=-fomit-frame-pointer

CXXFLAGS	:=-std=gnu++11
#CXXFLAGS	+=-m32
#CXXFLAGS	+=-m64
#CXXFLAGS	+=-std=gnu++0x
CXXFLAGS	+=-pedantic-errors
CXXFLAGS	+=-Wall -Werror -Wextra
#CXXFLAGS	+=-fpthread
#CXXFLAGS	+=-fopenmp

CXXFLAGS	+=-fPIC

CPPFLAGS	+=-I./dist/include
#LDFLAGS	+=-lgomp
#LDFLAGS	+=-lpthread

PREFIX		:=/usr/local
BINDIR		:=$(PREFIX)/bin
INCLUDEDIR	:=$(PREFIX)/include
SBINDIR		:=$(PREFIX)/sbin
LIBDIR		:=$(PREFIX)/lib
DATAROOTDIR	:=$(PREFIX)/share
DOCDIR		:=$(DATAROOTDIR)/doc
	
build: clean
	@if [ -x configure.sh ]; then if [ -f README ]; then ./configure.sh; else ./configure.sh "$(NAME)-$(MAJOR_VERSION).$(MINOR_VERSION)"; fi; fi
	@if [ -f README.sed ]; then cat README.UTF-8 | sed -f README.sed > README; fi
	@mkdir -m 0755 dist
	@mkdir -m 0755 dist/doc
	@mkdir -m 0755 dist/doc/$(NAME)-$(VERSION)
	@mkdir -m 0755 dist/include
	@mkdir -m 0755 dist/include/matfquad
	@mkdir -m 0755 dist/include/matfquad/net
	@mkdir -m 0755 dist/include/matfquad/net/socket
	@mkdir -m 0755 dist/include/matfquad/video
	@mkdir -m 0755 dist/lib
	@install -m 0644 -p AUTHORS COPYING *.txt README* THANKS dist/doc/$(NAME)-$(VERSION)
	@install -m 0644 -p include/matfquad/net/socket/*.hpp dist/include/matfquad/net/socket
#	@install -m 0644 -p include/matfquad/video/*.hpp dist/include/matfquad/video
	@if [ -f Socket_Compat.sed ]; then cat include/matfquad/net/socket/Socket.hpp | sed -f Socket_Compat.sed > dist/include/matfquad/net/socket/Socket.hpp; fi
	$(CXX) $(OPTFLAGS) $(CXXFLAGS) $(CPPFLAGS) src/matfquad/net/socket/Address.cpp -c -o matfquad_net_socket_Address.o
	$(CXX) $(OPTFLAGS) $(CXXFLAGS) $(CPPFLAGS) src/matfquad/net/socket/Family.cpp -c -o matfquad_net_socket_Family.o
	$(CXX) $(OPTFLAGS) $(CXXFLAGS) $(CPPFLAGS) src/matfquad/net/socket/Type.cpp -c -o matfquad_net_socket_Type.o
	$(CXX) $(OPTFLAGS) $(CXXFLAGS) $(CPPFLAGS) src/matfquad/net/socket/Parameter.cpp -c -o matfquad_net_socket_Parameter.o
	$(CXX) $(OPTFLAGS) $(CXXFLAGS) $(CPPFLAGS) src/matfquad/net/socket/Protocol.cpp -c -o matfquad_net_socket_Protocol.o
	$(CXX) $(OPTFLAGS) $(CXXFLAGS) $(CPPFLAGS) src/matfquad/net/socket/Socket.cpp -c -o matfquad_net_socket_Socket.o
#	$(CXX) $(OPTFLAGS) $(CXXFLAGS) $(CPPFLAGS) src/matfquad/video/Surface3D.cpp -c -o matfquad_video_Surface3D.o
	$(CXX) $(OPTFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -shared -Wl,-soname,$(SONAME) -o $(LIBNAME) *.o
	@strip $(LIBNAME)
	@ln -f $(LIBNAME) $(SONAME)
	@ln -f $(LIBNAME) $(SONAME).$(MINOR_VERSION)
	@file $(LIBNAME)
	@du -h $(LIBNAME)
	@ldd $(LIBNAME)
	@rm -f $(NAME)-$(VERSION)-$(SYSTEM)-$(ARCH)
	@ln -s dist $(NAME)-$(VERSION)-$(SYSTEM)-$(ARCH)
	@install -m 0755 -p $(LIBNAME)* dist/lib

build-txz: build
	tar -cJvf $(NAME)-$(VERSION)-$(SYSTEM)-$(ARCH).tar.xz $(NAME)-$(VERSION)-$(SYSTEM)-$(ARCH)/*

build-tgz: build
	tar -cxvf $(NAME)-$(VERSION)-$(SYSTEM)-$(ARCH).tar.gz $(NAME)-$(VERSION)-$(SYSTEM)-$(ARCH)/*

build-tbz2: build
	tar -cjvf $(NAME)-$(VERSION)-$(SYSTEM)-$(ARCH).tar.bz2 $(NAME)-$(VERSION)-$(SYSTEM)-$(ARCH)/*

install: build
	if [ ! -d $(DESTDIR)$(DOCDIR)/$(NAME)-$(VERSION) ]; then mkdir -m 0755 -p $(DESTDIR)$(DOCDIR)/$(NAME)-$(VERSION); fi
	if [ ! -d $(DESTDIR)$(INCLUDEDIR)/matfquad ]; then mkdir -m 0755 -p $(DESTDIR)$(INCLUDEDIR)/matfquad; fi
	if [ ! -d $(DESTDIR)$(INCLUDEDIR)/matfquad/net ]; then mkdir -m 0755 $(DESTDIR)$(INCLUDEDIR)/matfquad/net; fi
	if [ ! -d $(DESTDIR)$(INCLUDEDIR)/matfquad/net/socket ]; then mkdir -m 0755 $(DESTDIR)$(INCLUDEDIR)/matfquad/net/socket; fi
	if [ ! -d $(DESTDIR)$(INCLUDEDIR)/matfquad/video ]; then mkdir -m 0755 $(DESTDIR)$(INCLUDEDIR)/matfquad/video; fi
	if [ ! -d $(DESTDIR)$(LIBDIR) ]; then mkdir -m 0755 -p $(DESTDIR)$(LIBDIR); fi
	install -m 0644 -p dist/doc/$(NAME)-$(VERSION)/* $(DESTDIR)$(DOCDIR)/$(NAME)-$(VERSION)
	install -m 0644 -p dist/include/matfquad/net/socket/*.hpp $(DESTDIR)$(INCLUDEDIR)/matfquad/net/socket
	install -m 0755 -p dist/lib/$(LIBNAME)* $(DESTDIR)$(LIBDIR)

clean:
	@rm -f $(NAME)-*
	@rm -rf dist
	@rm -rf build
	@find . -type f -name "*~" -exec rm -f {} \;
	@find . -type f -name "*.bin" -exec rm -f {} \;
	@find . -type f -name "*.exe" -exec rm -f {} \;
	@find . -type f -name "*.o" -exec rm -f {} \;
	@find . -type f -name "*.run" -exec rm -f {} \;
	@find . -type f -name "*.sed" -exec rm -f {} \;
	@find . -type f -name "*.so" -exec rm -f {} \;
	@find . -type l -name "*.so" -exec rm -f {} \;
	@find . -type f -name "*.so.*" -exec rm -f {} \;
	@find . -type l -name "*.so.*" -exec rm -f {} \;
	@find . -type f -name "*.tar" -exec rm -f {} \;
	@find . -type f -name "*.tar.bz2" -exec rm -f {} \;
	@find . -type f -name "*.tar.gz" -exec rm -f {} \;
	@find . -type f -name "*.zip" -exec rm -f {} \;

src-pkg: clean
	ln -s . $(NAME)-$(VERSION)

txz: src-pkg
	tar --create --xz --verbose --file=$(NAME)-$(VERSION).tar.xz --exclude=$(NAME)-$(VERSION)/$(NAME)-$(VERSION) $(NAME)-$(VERSION)/*

tgz: src-pkg
	tar --create --gzip --verbose --file=$(NAME)-$(VERSION).tar.gz --exclude=$(NAME)-$(VERSION)/$(NAME)-$(VERSION) $(NAME)-$(VERSION)/*

tbz2: src-pkg
	tar --create --bzip2 --verbose --file=$(NAME)-$(VERSION).tar.bz2 --exclude=$(NAME)-$(VERSION)/$(NAME)-$(VERSION) $(NAME)-$(VERSION)/*


