CXXC = g++
CFLAGS = -Wall -O3 
MAKE = make
LIBSVM_VER =2.84
export LIBSVM_VER 

ifndef DESTDIR
INSTDIR=/usr
else
INSTDIR=${DESTDIR}/usr
endif

export INSTDIR

PROCESSOR=$(shell /bin/uname -p)
ifeq "${PROCESSOR}" "x86_64"
X86_64=64
else
X86_64=
endif

ifndef LIBDIR
LIB_INSTDIR=${INSTDIR}/lib${X86_64}
else
LIB_INSTDIR=${INSTDIR}/..${LIBDIR}
endif

export LIB_INSTDIR

all: svm-train svm-predict svm-scale svm-python svm-java svm-lib

svm-lib: svm-share.o
	$(CXXC) -shared -Wl,-soname,libsvm.so \
    -o libsvm.so.${LIBSVM_VER} svm-share.o -lm
svm-share.o: svm.cpp svm.h
	$(CXXC) -g -fPIC $(CFLAGS) -c svm.cpp -o svm-share.o
svm-predict: svm-predict.c svm.o
	$(CXXC) $(CFLAGS) svm-predict.c svm.o -o svm-predict -lm
svm-train: svm-train.c svm.o
	$(CXXC) $(CFLAGS) svm-train.c svm.o -o svm-train -lm
svm-scale: svm-scale.c
	$(CXXC) $(CFLAGS) svm-scale.c -o svm-scale
svm.o: svm.cpp svm.h
	$(CXXC) $(CFLAGS) -c svm.cpp
svm-python:
	${MAKE} -C python
svm-java:
	${MAKE} -C java

install: all
	mkdir -p ${INSTDIR}/bin
	install -m 755 svm-train ${INSTDIR}/bin
	install -m 755 svm-predict ${INSTDIR}/bin
	install -m 755 svm-scale ${INSTDIR}/bin
	mkdir -p ${LIB_INSTDIR}/libsvm
	install -m 644 libsvm.so.2.84 ${LIB_INSTDIR}/libsvm
	cd ${LIB_INSTDIR}/libsvm; ln -s libsvm.so.${LIBSVM_VER} libsvm.so
	ldconfig -n ${LIB_INSTDIR}/libsvm
# install package libsvm-devel
	install -m 644 svm.o ${LIB_INSTDIR}/libsvm
	mkdir -p ${INSTDIR}/include/libsvm
	install -m 644 svm.h ${INSTDIR}/include/libsvm
	mkdir -p ${INSTDIR}/share/libsvm/src/java/libsvm
	install -m 644 *.h ${INSTDIR}/share/libsvm/src
	install -m 644 *.c ${INSTDIR}/share/libsvm/src
	install -m 644 *.cpp ${INSTDIR}/share/libsvm/src
	install -m 644 Makefile ${INSTDIR}/share/libsvm/src
	install -m 644 java/*.java ${INSTDIR}/share/libsvm/src/java
	install -m 644 java/Makefile ${INSTDIR}/share/libsvm/src/java
	install -m 644 java/libsvm/*.java ${INSTDIR}/share/libsvm/src/java/libsvm
	install -m 644 java/libsvm/*.m4 ${INSTDIR}/share/libsvm/src/java/libsvm
#	cp -R java ${INSTDIR}/share/libsvm/src
#	cp -R svm-toy ${INSTDIR}/share/libsvm/src
#	cp -R tools ${INSTDIR}/share/libsvm/src
#	cp -R windows ${INSTDIR}/share/libsvm/src
	mkdir -p ${INSTDIR}/share/libsvm/examples
	install -m 644 heart_scale ${INSTDIR}/share/libsvm/examples
# install package libsvm-python
	${MAKE} -C python install
	${MAKE} -C java install

uninstall:
	rm -f ${INSTDIR}/bin/svm-train
	rm -f ${INSTDIR}/bin/svm-predict
	rm -f ${INSTDIR}/bin/svm-scale
	rm -fr ${INSTDIR}/libsvm/examples
	rm -f ${INSTDIR}/include/libsvm/svm.h
	rm -f ${LIB_INSTDIR}/libsvm/svm.o
	rm -fr ${INSTDIR}/libsvm/src
	rm -fr ${INSTDIR}/libsvm
	${MAKE} -C python uninstall
	${MAKE} -C java uninstall

clean:
	rm -f *~ svm.o svm-train svm-predict svm-scale
	${MAKE} -C python clean
	${MAKE} -C java clean

