.PHONY: all clean build 32 64 tar tareod7 tareod8 tareod9 buildtar

ifeq "$(shell hostname)" "c5ryan"
export SRCDIR=/home/maker/src
export VGLSRC=$(SRCDIR)/virtualgl
export EODROOT=$(SRCDIR)/etxtrunk
export EODSRC=$(EODROOT)/src
export LIBJPEGSRC32=$(SRCDIR)/libjpeg-turbo32
export LIBJPEGSRC64=$(SRCDIR)/libjpeg-turbo64
endif
ifeq "$(shell hostname)" "connr6b1"
# Using stock gcc 4.4.4
ifneq "$(shell which ld)" "/usr/local/binutil/2.27/bin/ld"
$(warning You need to use a new ld in /usr/local/binutil/2.27/bin or similar)
$(error Try export PATH=/usr/local/binutil/2.27/bin:$$PATH)
endif
endif

VGL_LIB_VERSION=3
VGL_SO_VERSION=$(VGL_LIB_VERSION)
VGL_FAKER_NAME=opentextglfaker
FAKER_LIB_NAME=lib$(VGL_FAKER_NAME).so.$(VGL_LIB_VERSION)
FAKERNODL_LIB_NAME=lib$(VGL_FAKER_NAME)-nodl.so.$(VGL_LIB_VERSION)
FAKEROPENCL_LIB_NAME=lib$(VGL_FAKER_NAME)-opencl.so.$(VGL_LIB_VERSION)
VGL_GEFAKER_NAME=opentextgefaker
GEFAKER_LIB_NAME=lib$(VGL_GEFAKER_NAME).so.$(VGL_LIB_VERSION)
VGL_DLFAKER_NAME=opentextdlfaker
DLFAKER_LIB_NAME=lib$(VGL_DLFAKER_NAME).so.$(VGL_LIB_VERSION)
VGL_POLLFAKER_NAME=opentextpollfaker
POLLFAKER_LIB_NAME=lib$(VGL_POLLFAKER_NAME).so.$(VGL_LIB_VERSION)

MKPLAT:=32
MKTYPE:=r
OTPLAT:=bogus
DATE:=$(shell  date +'%Y-%m-%d')
VGLROOT:=$(shell cd .. && pwd)

export BUILDDIR=$(VGLROOT)/o
export BUILDDIR32=$(BUILDDIR)/32
export BUILDDIR64=$(BUILDDIR)/64
export SOURCEDIR=$(VGLROOT)

ifdef DEBUG
MKTYPE:=d
endif

# this goes into the printed version information
VGL_VERSION:=$(shell sed -n 's/^set(VERSION \([0-9\.]*\))/\1/p' ../CMakeLists.txt)
ifeq ($(VGL_VERSION),)
$(error VGL_VERSION detection failed.)
endif
GITHASH:=$(shell git log -n 1 | sed -n '1s/commit \(.......\).*/\1/p')
VGL_BUILD :="$(DATE) $(GITHASH) OpenText"
ifdef DEBUG
VGL_BUILD += " (debug)"
endif

DISTRONAME=$(shell lsb_release -i 2>/dev/null | cut -f2)
ifeq "$(DISTRONAME)" "Ubuntu"
DISTRONAME=debian-based
endif
ifeq "$(DISTRONAME)" "Debian"
DISTRONAME=debian-based
endif

ifeq "Linux" "$(shell uname)"

OTPLAT:=linux
export PATH+=:~/cmake-2.8.8-Linux-i386/bin:

all: build tar

build:
	make 32 MKPLAT=32
	make 64 MKPLAT=64

ifeq "$(MKPLAT)" "32"

export CFLAGS=-m32
export CXXFLAGS=-m32
export LDFLAGS=-m32

ifeq "$(DISTRONAME)" "debian-based"
export CMAKEFLAGS=-DX11_X11_LIB=/usr/lib/i386-linux-gnu/libX11.so.6 \
                  -DX11_Xext_LIB=/usr/lib/i386-linux-gnu/libXext.so.6 \
                  -DX11_Xv_LIB=/usr/lib/i386-linux-gnu/libXv.so.1 \
                  -DX11_XTest_LIB=/usr/lib/i386-linux-gnu/libXtst.so.6 \
                  -DOPENGL_gl_LIBRARY=/usr/lib/i386-linux-gnu/libGL.so.1 \
                  -DOPENGL_glu_LIBRARY=/usr/lib/i386-linux-gnu/libGLU.so.1
else
export CMAKEFLAGS=
endif

else

export CFLAGS=-m64
export CXXFLAGS=-m64
export LDFLAGS=-m64

ifeq "$(DISTRONAME)" "debian-based"
export CMAKEFLAGS=-DX11_X11_LIB=/usr/lib/x86_64-linux-gnu/libX11.so.6 \
                  -DX11_Xext_LIB=/usr/lib/x86_64-linux-gnu/libXext.so.6 \
                  -DX11_Xv_LIB=/usr/lib/x86_64-linux-gnu/libXv.so.1 \
                  -DX11_XTest_LIB=/usr/lib/x86_64-linux-gnu/libXtst.so.6 \
                  -DOPENGL_gl_LIBRARY=/usr/lib/x86_64-linux-gnu/libGL.so.1 \
                  -DOPENGL_glu_LIBRARY=/usr/lib/x86_64-linux-gnu/libGLU.so.1
else
export LDFLAGS=
export CMAKEFLAGS=
endif

endif

ifneq "$(DEBUG)" ""
CMAKEFLAGS+=-DCMAKE_BUILD_TYPE=Debug
endif

CMAKEFLAGS+= -DVGL_USEXV=OFF
CMAKEFLAGS+= -DVGL_FAKEXCB=1

CMAKEFLAGS+= -DVGL_FAKER_NAME=$(VGL_FAKER_NAME)
CMAKEFLAGS+= -DVGL_FAKERCL_NAME=$(VGL_FAKER_NAME)
CMAKEFLAGS+= -DVGL_FAKERDL_NAME=$(VGL_FAKER_NAME)
CMAKEFLAGS+= -DVGL_GEFAKER_NAME=$(VGL_GEFAKER_NAME)
CMAKEFLAGS+= -DVGL_DLFAKER_NAME=$(VGL_DLFAKER_NAME)
CMAKEFLAGS+= -DVGL_POLLFAKER_NAME=$(VGL_POLLFAKER_NAME)
CMAKEFLAGS+= -DVGL_LIB_VERSION=$(VGL_LIB_VERSION)
CMAKEFLAGS+= -DVGL_SO_VERSION=$(VGL_SO_VERSION)

$(BUILDDIR)/$(MKPLAT):
	mkdir -p $(BUILDDIR)/$(MKPLAT)

$(MKPLAT): $(BUILDDIR)/$(MKPLAT)
	cd $(BUILDDIR)/$(MKPLAT) ;\
	cmake3 -G "Ninja" -DBUILD=$(VGL_BUILD) $(CMAKEFLAGS) $(SOURCEDIR) > cmake.log 2>&1 ;\
	ninja > make.log 2>&1
	
else
$(error Platform '$(shell uname)' is not supported for OpenText build.)
endif

clean:
	-rm -rf $(BUILDDIR)

tar:
	make buildtar BINDIR=$(VGLROOT)/o/$(OTPLAT)/bin VGLDIR=$(VGLROOT)/o/$(OTPLAT)/3rdparty/virtualgl TARSPEC=3rdparty EODVER=etx11

buildtar:
	rm -rf $(VGLROOT)/o/$(OTPLAT)/
	mkdir -p $(BINDIR)
	mkdir -p $(VGLDIR)/bin
	mkdir -p $(VGLDIR)/lib
	mkdir -p $(VGLDIR)/lib64
	cp $(SOURCEDIR)/opentext/ssrrun			$(BINDIR)/
	cp $(SOURCEDIR)/opentext/ssrconfig		$(BINDIR)/
	cp $(SOURCEDIR)/opentext/ssrgennvidiaxorgconf	$(BINDIR)/
	cp $(SOURCEDIR)/opentext/getssrdisplay.sh	$(BINDIR)/
	cp $(SOURCEDIR)/opentext/copyssrtosyslib	$(BINDIR)/
	cp $(BUILDDIR32)/bin/print-nv-gpu-loads		$(BINDIR)/print-nv-gpu-loads32
	cp $(BUILDDIR64)/bin/print-nv-gpu-loads		$(BINDIR)/print-nv-gpu-loads64
	cp $(SOURCEDIR)/server/vglserver_config		$(VGLDIR)/bin/
	cp $(SOURCEDIR)/server/vglgenkey		$(VGLDIR)/bin/
	cp $(BUILDDIR32)/bin/glxinfo			$(VGLDIR)/bin/
	cp $(BUILDDIR32)/bin/glreadtest			$(VGLDIR)/bin/
	cp $(BUILDDIR32)/bin/glxspheres			$(VGLDIR)/bin/
	cp $(BUILDDIR32)/lib/$(FAKER_LIB_NAME)		$(VGLDIR)/lib/
	cp $(BUILDDIR32)/lib/$(FAKERNODL_LIB_NAME)	$(VGLDIR)/lib/
	cp $(BUILDDIR32)/lib/$(FAKEROPENCL_LIB_NAME)	$(VGLDIR)/lib/
	cp $(BUILDDIR32)/lib/$(GEFAKER_LIB_NAME)	$(VGLDIR)/lib/
	cp $(BUILDDIR32)/lib/$(DLFAKER_LIB_NAME)	$(VGLDIR)/lib/
	cp $(BUILDDIR32)/lib/$(POLLFAKER_LIB_NAME)	$(VGLDIR)/lib/
	cp $(BUILDDIR64)/bin/glxinfo			$(VGLDIR)/bin/glxinfo64
	cp $(BUILDDIR64)/bin/glreadtest			$(VGLDIR)/bin/glreadtest64
	cp $(BUILDDIR64)/bin/glxspheres64		$(VGLDIR)/bin/glxspheres64
	cp $(BUILDDIR64)/lib/$(FAKER_LIB_NAME)		$(VGLDIR)/lib64/
	cp $(BUILDDIR64)/lib/$(FAKERNODL_LIB_NAME)	$(VGLDIR)/lib64/
	cp $(BUILDDIR64)/lib/$(FAKEROPENCL_LIB_NAME)	$(VGLDIR)/lib64/
	cp $(BUILDDIR64)/lib/$(GEFAKER_LIB_NAME)	$(VGLDIR)/lib64/
	cp $(BUILDDIR64)/lib/$(DLFAKER_LIB_NAME)	$(VGLDIR)/lib64/
	cp $(BUILDDIR64)/lib/$(POLLFAKER_LIB_NAME)	$(VGLDIR)/lib64/
	chmod -R 755 $(BINDIR)/..
	tar cfz $(VGLROOT)/o/virtualgl_$(VGL_VERSION)_$(OTPLAT)_$(DATE)_$(GITHASH).tar.gz --numeric-owner --owner=0 --group=0 -C $(BINDIR)/.. bin $(TARSPEC)
