CXX	?= g++
CXX_OPT ?=-fPIC -O3 -I./ -L./ -std=c++11
#CXX_OPT ?=-fPIC -g -I./ -L./ -I/usr/include/hdf5/serial # For Ubuntu 16.04
#CXX_OPT ?= -fPIC -g -O0 -I./ -L./ -std=c++11
#CXX_OPT ?= -fsanitize=address -fno-omit-frame-pointer -fPIC -g -I./ -L./ -std=c++11
NUM_MULTH ?= 8

#PyVer	?= 2.7
#PyVer	?= 3.4
PyVer ?= $(shell python3 --version 2>&1 | cut -d" " -f2 | cut -d. -f1-2 )

DIST_NAME ?= RH7
SWIG ?= swig
PyLib ?= $(PyVer)
PyMaj ?= $(shell echo $(PyVer) | cut -d. -f1)

INITFILE = __init__.py

ifeq ($(PyMaj),3)
	INITFILE = __init3__.py
ifeq ($(DIST_NAME),RH7)
	PyLib := $(PyVer)m
endif
ifeq ($(DIST_NAME),Ubuntu16)
	PyLib := $(PyVer)m
endif
	PyInc ?= /usr/include/python$(PyLib)
endif

PyInc ?= /usr/include/python$(PyVer)

#ifeq ($(DIST_NAME),Ubuntu)
#	CXX_OPT := $(CXX_OPT) -I/usr/include/hdf5/serial # For Ubuntu 16.04
#endif

CXX_OPT := -DPyMaj=$(PyMaj) -I$(PyInc) ${CXX_OPT}
SWIG_OPT := -DPyMaj=$(PyMaj)

PKG_SOVER ?=
PREFIX ?= $(MANYO_PATH)
PY_PREFIX ?= $(PREFIX)
DESTDIR ?=
MANYO_REV ?= "0"

ifeq ($(PREFIX),$(PY_PREFIX))
	INCDIR=$(PREFIX)/include
	LIBDIR=$(PREFIX)/lib
else
	INCDIR=$(PREFIX)/include/Manyo
	LIBDIR=$(PY_PREFIX)
endif

CXX_OPT := -L$(PREFIX)/lib -I$(PREFIX)/include $(CXX_OPT)

include Makefile.obj

all:	$(OBJS) libManyo.so _Manyo.so

_Manyo.so:	Manyo_wrap.o $(OBJS) libManyo.so
	$(CXX) $(CXX_OPT) -o $@ Manyo_wrap.o \
	-fopenmp -shared -lpython$(PyLib) \
	-pthread -lutil -ldl -L. -lManyo -lNeXus -lgsl \
	-lgslcblas -lboost_serialization \
	-lboost_filesystem -lboost_system -DMULTH=$(NUM_MULTH)

ifdef PKG_SOVER
libManyo.so:	libManyo.so.$(PKG_SOVER)
	ln -s libManyo.so.$(PKG_SOVER) libManyo.so

libManyo.so.$(PKG_SOVER):	$(OBJS)
	$(CXX) $(CXX_OPT) $(OBJS) -o $@ -fopenmp -shared -Wl,-soname=libManyo.so.$(PKG_SOVER)  -lNeXus \
	-lgsl -lgslcblas -lboost_serialization -lboost_filesystem \
	-lboost_system -lpython$(PyLib) -pthread -lutil -ldl -DMULTH=$(NUM_MULTH)
else
libManyo.so:	$(OBJS)
	$(CXX) $(CXX_OPT) $(OBJS) -o $@ -fopenmp -shared  -lNeXus \
	-lgsl -lgslcblas -lboost_serialization -lboost_filesystem \
	-lboost_system -lpython$(PyLib) -pthread -lutil -ldl -DMULTH=$(NUM_MULTH)
endif

Manyo_wrap.o:	Manyo_wrap.cxx
	$(CXX) $(CXX_OPT) -c -fPIC Manyo_wrap.cxx \
	-DPYTHONSERVERPORT=8888 -DJQPORT=8890 -fopenmp -DMULTH=$(NUM_MULTH)


Manyo.py Manyo_wrap.cxx:	Manyo.i PythonCode.i Manyo3.i Manyo2.i
	$(SWIG) $(SWIG_OPT) -c++ -python -o Manyo_wrap.cxx Manyo$(PyMaj).i

install:	_Manyo.so libManyo.so Manyo.py
	mkdir -p $(DESTDIR)$(PREFIX)
	mkdir -p $(DESTDIR)$(PREFIX)/lib
	mkdir -p $(DESTDIR)$(PREFIX)/share/Manyo
	mkdir -p $(DESTDIR)$(INCDIR)
	mkdir -p $(DESTDIR)$(PY_PREFIX)/Manyo
	mkdir -p $(DESTDIR)$(PREFIX)/share/Manyo/sample
	mkdir -p $(DESTDIR)$(PREFIX)/share/Manyo/sample/core
	mkdir -p $(DESTDIR)$(PREFIX)/share/Manyo/sample/core/MyPackage
	mkdir -p $(DESTDIR)$(PREFIX)/bin
	cp *.cc *.hh *.i $(DESTDIR)$(INCDIR)
	cp sample/ManyoCpp $(DESTDIR)$(PREFIX)/bin
	cp sample/*.py $(DESTDIR)$(PREFIX)/share/Manyo/sample
	cp sample/CreateNewPackage $(DESTDIR)$(PREFIX)/bin
	cp -r MyPackage/*  $(DESTDIR)$(PREFIX)/share/Manyo/sample/core/MyPackage
	cp ../UnitTest/*.py ../UnitTest/test20160425_r268.txt $(DESTDIR)$(PREFIX)/share/Manyo/sample
	cp ../UnitTest/UnitTest.HistOperations ../UnitTest/test20160425heavy_r268.txt $(DESTDIR)$(PREFIX)/share/Manyo/sample
	cp ../UnitTest/ModuleTestHistOperationsLight.py $(DESTDIR)$(PREFIX)/share/Manyo/sample
	cp -d libManyo.so* $(DESTDIR)/$(LIBDIR)
	cp Manyo.py $(DESTDIR)$(PY_PREFIX)/Manyo/core.py
	cp $(INITFILE) $(DESTDIR)$(PY_PREFIX)/Manyo/__init__.py
	echo '__version__ = "0.4.'$(MANYO_REV)'"' >> $(DESTDIR)$(PY_PREFIX)/Manyo/__init__.py
	cp _Manyo.so $(DESTDIR)$(PY_PREFIX)/Manyo
	rm -f $(DESTDIR)$(PY_PREFIX)/Manyo/*.pyc

clean:
	-rm -rf a.out _Manyo.so Manyo_wrap.o Manyo_wrap.cxx \
	libManyo.so libManyo.so.* $(OBJS) SerialPythonServer \
	sample/SerialPythonServerMain.o SerialPythonServerMain.o \
	Manyo.py Manyo.pyc
	-rm -rf html latex xml interfaces

man:
	./CreateManual

.cc.o:
	$(CXX) $(CXX_OPT) -DMULTH=$(NUM_MULTH) -c $<


include CC_Files_Dependence

