diff --git a/.gitignore b/.gitignore index 288995a..f223af3 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ libsvm-3.91.tar.gz /LibSVM-svm-toy-48.png /libsvm-svm-toy-gtk.desktop /libsvm-svm-toy-qt.desktop +/libsvm-3.20.tar.gz diff --git a/libsvm-3.17.pom b/libsvm-3.17.pom new file mode 100644 index 0000000..511b1b2 --- /dev/null +++ b/libsvm-3.17.pom @@ -0,0 +1,36 @@ + + 4.0.0 + tw.edu.ntu.csie + libsvm + 3.20 + jar + LIBSVM + A Library for Support Vector Machines + http://www.csie.ntu.edu.tw/~cjlin/libsvm/ + + + BSD 3-Clause License + http://www.csie.ntu.edu.tw/~cjlin/libsvm/COPYRIGHT + + + + http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm.cgi?+http://www.csie.ntu.edu.tw/~cjlin/libsvm+tar.gz + http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm.cgi?+http://www.csie.ntu.edu.tw/~cjlin/libsvm+tar.gz + + + + chih-jen.lin + Chih-Jen Lin + cjlin@csie.ntu.edu.tw + + + + 1.5 + 1.5 + UTF-8 + + + java + + diff --git a/libsvm-3.18.javaDir.patch b/libsvm-3.18.javaDir.patch deleted file mode 100644 index ed7cf4b..0000000 --- a/libsvm-3.18.javaDir.patch +++ /dev/null @@ -1,59 +0,0 @@ -diff -up ./java/Makefile.javaDir ./java/Makefile ---- ./java/Makefile.javaDir 2009-02-18 10:41:04.000000000 +1000 -+++ ./java/Makefile 2010-11-08 10:59:11.229518442 +1000 -@@ -4,13 +4,21 @@ FILES = libsvm/svm.class libsvm/svm_mode - libsvm/svm_print_interface.class \ - svm_train.class svm_predict.class svm_toy.class svm_scale.class - -+JAVA_DOC_DIR=${INSTDIR}/share/javadoc/libsvm-${LIBSVM_VER} -+CLASSPATH = . - #JAVAC = jikes --JAVAC_FLAGS = -target 1.5 -source 1.5 -+JAVAC_FLAGS = -target 1.5 -source 1.5 -classpath ${CLASSPATH} -+ifndef JAVAC - JAVAC = javac -+endif - # JAVAC_FLAGS = - -+ifndef JAR -+JAR=jar -+endif -+ - all: $(FILES) -- jar cvf libsvm.jar *.class libsvm/*.class -+ ${JAR} cvf libsvm.jar *.class libsvm/*.class - - .java.class: - $(JAVAC) $(JAVAC_FLAGS) $< -@@ -18,8 +26,23 @@ all: $(FILES) - libsvm/svm.java: libsvm/svm.m4 - m4 libsvm/svm.m4 > libsvm/svm.java - -+javadoc: docs/index.html -+ -+docs/index.html: $(FILES) -+ javadoc -d docs *.java libsvm/*.java -+ -+install: -+ mkdir -p ${JAVA_TARGET_DIR} -+ install -m 644 libsvm.jar ${JAVA_TARGET_DIR} -+# mkdir -p ${JAVA_DOC_DIR} -+# cd docs; cp -R * ${JAVA_DOC_DIR} -+uninstall: -+ rm -fr ${JAVA_TARGETDIR} -+# rm -fr ${JAVA_DOC_DIR} -+ - clean: - rm -f libsvm/*.class *.class *.jar libsvm/*~ *~ libsvm/svm.java -+ rm -rf docs - - dist: clean all - rm *.class libsvm/*.class -diff -up ./java/test_applet.html.javaDir ./java/test_applet.html ---- ./java/test_applet.html.javaDir 2003-07-12 14:07:32.000000000 +1000 -+++ ./java/test_applet.html 2010-11-08 10:59:11.229518442 +1000 -@@ -1 +1,3 @@ -- -+ -+ -+ diff --git a/libsvm-3.18.packageMain.patch b/libsvm-3.18.packageMain.patch deleted file mode 100644 index dee23cd..0000000 --- a/libsvm-3.18.packageMain.patch +++ /dev/null @@ -1,128 +0,0 @@ -diff -up ./Makefile.packageMain ./Makefile ---- ./Makefile.packageMain 2013-03-31 17:06:44.000000000 +1000 -+++ ./Makefile 2013-04-13 22:59:43.796601417 +1000 -@@ -1,11 +1,45 @@ - CXX ?= g++ --CFLAGS = -Wall -Wconversion -O3 -fPIC -+CFLAGS = ${RPM_CFLAGS} -Wall -Wconversion -O3 -fPIC - SHVER = 2 -+export SHVER - OS = $(shell uname) -+MAKE = make -+DOT_LIBS=. -+LIBS= -L${DOT_LIBS} -lsvm -+export LIBSVM_VER -+IS_64:=$(shell /bin/uname -i | awk '/64/ {print 64}') -+PREFIXDIR?= /usr -+export PREFIXDIR - --all: svm-train svm-predict svm-scale -+LIBDIR?=${PREFIXDIR}/lib${IS_64} -+export LIBDIR - --lib: svm.o -+DATADIR?=${PREFIXDIR}/share -+export DATADIR -+ -+BINDIR?=${PREFIXDIR}/bin -+export BINDIR -+ -+INCLUDEDIR_INSTALL:=${DESTDIR}/${PREFIXDIR}/include -+export INCLUDEDIR_INSTALL -+ -+LIBDIR_INSTALL:=${DESTDIR}/${LIBDIR} -+export LIBDIR_INSTALL -+ -+DATADIR_INSTALL:=${DESTDIR}/${DATADIR} -+export DATA_INSTALL -+ -+BINDIR_INSTALL:=${DESTDIR}/${BINDIR} -+export BINDIR_INSTALL -+ -+all: lib svm-train svm-predict svm-scale svm-python svm-java svm-toy-gtk svm-toy-qt -+ -+lib: libsvm.so.$(SHVER) libsvm.so -+ -+libsvm.so: libsvm.so.$(SHVER) -+ ln -sf libsvm.so.$(SHVER) libsvm.so -+ -+libsvm.so.$(SHVER): svm.o - if [ "$(OS)" = "Darwin" ]; then \ - SHARED_LIB_FLAG="-dynamiclib -Wl,-install_name,libsvm.so.$(SHVER)"; \ - else \ -@@ -14,12 +48,72 @@ lib: svm.o - $(CXX) $${SHARED_LIB_FLAG} svm.o -o libsvm.so.$(SHVER) - - svm-predict: svm-predict.c svm.o -- $(CXX) $(CFLAGS) svm-predict.c svm.o -o svm-predict -lm -+ $(CXX) $(CFLAGS) svm-predict.c $(LIBS) -o svm-predict -lm - svm-train: svm-train.c svm.o -- $(CXX) $(CFLAGS) svm-train.c svm.o -o svm-train -lm -+ $(CXX) $(CFLAGS) svm-train.c $(LIBS) -o svm-train -lm - svm-scale: svm-scale.c - $(CXX) $(CFLAGS) svm-scale.c -o svm-scale - svm.o: svm.cpp svm.h - $(CXX) $(CFLAGS) -c svm.cpp - clean: -- rm -f *~ svm.o svm-train svm-predict svm-scale libsvm.so.$(SHVER) -+ rm -f *~ svm.o svm-train svm-predict svm-scale svm-toy/gtk/svm-toy-gtk svm-toy/qt/svm-toy-qt -+ ${MAKE} -C python clean -+ ${MAKE} -C java clean -+svm-python: -+ ${MAKE} -C python -+ -+svm-java: -+ifneq ("${NO_JAVA}","NO_JAVA") -+ ${MAKE} -C java -+endif -+svm-toy-gtk: -+ ${MAKE} -C svm-toy/gtk -+ -+svm-toy-qt: -+ ${MAKE} -C svm-toy/qt -+ -+install: all -+ mkdir -p ${BINDIR_INSTALL} -+ install -m 755 svm-train ${BINDIR_INSTALL} -+ install -m 755 svm-predict ${BINDIR_INSTALL} -+ install -m 755 svm-scale ${BINDIR_INSTALL} -+ mkdir -p ${LIBDIR_INSTALL} -+ install -m 755 libsvm.so.$(SHVER) ${LIBDIR_INSTALL} -+# install package libsvm-devel -+ mkdir -p ${INCLUDEDIR_INSTALL}/libsvm -+ install -m 644 svm.h ${INCLUDEDIR_INSTALL}/libsvm -+ mkdir -p ${DATADIR_INSTALL}/libsvm/src/java/libsvm -+ install -m 644 *.h ${DATADIR_INSTALL}/libsvm/src -+ install -m 644 *.c ${DATADIR_INSTALL}/libsvm/src -+ install -m 644 *.cpp ${DATADIR_INSTALL}/libsvm/src -+ install -m 644 Makefile ${DATADIR_INSTALL}/libsvm/src -+ifneq ("${NO_JAVA}","NO_JAVA") -+ install -m 644 java/*.java ${DATADIR_INSTALL}/libsvm/src/java -+ install -m 644 java/Makefile ${DATADIR_INSTALL}/libsvm/src/java -+ install -m 644 java/libsvm/*.java ${DATADIR_INSTALL}/libsvm/src/java/libsvm -+ install -m 644 java/libsvm/*.m4 ${DATADIR_INSTALL}/libsvm/src/java/libsvm -+# install package libsvm-java -+ ${MAKE} -C java install -+endif -+# install package libsvm-python -+ ${MAKE} -C python install -+# install package svm-toy -+ install -m 755 svm-toy/gtk/svm-toy-gtk ${BINDIR_INSTALL} -+ install -m 755 svm-toy/qt/svm-toy-qt ${BINDIR_INSTALL} -+# install examples -+ mkdir -p ${DATADIR_INSTALL}/libsvm/examples -+ install -m 644 heart_scale ${DATADIR_INSTALL}/libsvm/examples -+uninstall: -+ rm -f ${BINDIR_INSTALL}/svm-train -+ rm -f ${BINDIR_INSTALL}/svm-predict -+ rm -f ${BINDIR_INSTALL}/svm-scale -+ rm -fr ${DATADIR_INSTALL}/libsvm -+ rm -f ${INCLUDEDIR_INSTALL}/libsvm/svm.h -+ rm -f ${LIBDIR_INSTALL}/libsvm.so* -+ ${MAKE} -C python uninstall -+ifneq ("${NO_JAVA}","NO_JAVA") -+ ${MAKE} -C java uninstall -+endif -+ rm -f ${BINDIR_INSTALL}/svm-toy-gtk -+ rm -f ${BINDIR_INSTALL}/svm-toy-qt -+ diff --git a/libsvm-3.18.pythonDir.patch b/libsvm-3.18.pythonDir.patch deleted file mode 100644 index ff0991d..0000000 --- a/libsvm-3.18.pythonDir.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff -up ./python/Makefile.pythonDir ./python/Makefile ---- ./python/Makefile.pythonDir 2011-05-10 09:35:15.000000000 +1000 -+++ ./python/Makefile 2011-11-08 09:49:54.280501207 +1000 -@@ -1,4 +1,20 @@ -+PYTHONDIR_NAME ?= python${PYTHON_VERSION}/site-packages/libsvm -+PYTHONDIR?=${LIBDIR}/${PYTHONDIR_NAME} -+PYTHONDIR_INSTALL=${DESTDIR}/${PYTHONDIR} -+SVM_TOOLS:= $(notdir $(wildcard ../tools/*.py)) -+ - all = lib - --lib: -+all: lib -+ -+lib: ../svm.cpp ../svm.h - make -C .. lib -+ -+install: all -+ mkdir -p ${PYTHONDIR_INSTALL} -+ install -m 755 *.py ${PYTHONDIR_INSTALL} -+ install -m 755 ../tools/*.py ${PYTHONDIR_INSTALL} -+ $(foreach toolPy,$(SVM_TOOLS),ln -s ${PYTHONDIR}/$(toolPy) ${BINDIR_INSTALL}/svm-$(toolPy);) -+ -+uninstall: -+ rm -fr ${LIBDIR}/${PYTHON_PATH} $(addprefix ${BINDIR_INSTALL}/svm-,$(SVM_TOOLS)) diff --git a/libsvm-3.18.svm-toy.patch b/libsvm-3.18.svm-toy.patch deleted file mode 100644 index d2a9274..0000000 --- a/libsvm-3.18.svm-toy.patch +++ /dev/null @@ -1,66 +0,0 @@ -diff -up ./svm-toy/gtk/Makefile.svm-toy ./svm-toy/gtk/Makefile ---- ./svm-toy/gtk/Makefile.svm-toy 2011-05-11 12:15:45.000000000 +1000 -+++ ./svm-toy/gtk/Makefile 2012-04-04 17:02:28.366615284 +1000 -@@ -1,10 +1,12 @@ - CC? = gcc - CXX? = g++ --CFLAGS = -Wall -O3 -g `pkg-config --cflags gtk+-2.0` --LIBS = `pkg-config --libs gtk+-2.0` -+CFLAGS = -Wall -O3 -g `pkg-config --cflags --libs gtk+-2.0` -+LOCAL_LIBDIR=../.. -+LIBS = -L${LOCAL_LIBDIR} -lsvm - --svm-toy: main.o interface.o callbacks.o ../../svm.o -- $(CXX) $(CFLAGS) main.o interface.o callbacks.o ../../svm.o -o svm-toy $(LIBS) -+ -+svm-toy-gtk: main.o interface.o callbacks.o ${LOCAL_LIBDIR}/svm.o -+ $(CXX) $(CFLAGS) main.o interface.o callbacks.o $(LIBS) -o $@ - - main.o: main.c - $(CC) $(CFLAGS) -c main.c -@@ -15,8 +17,8 @@ interface.o: interface.c interface.h - callbacks.o: callbacks.cpp callbacks.h - $(CXX) $(CFLAGS) -c callbacks.cpp - --../../svm.o: ../../svm.cpp ../../svm.h -- make -C ../.. svm.o -+${LOCAL_LIBDIR}/svm.o: ${LOCAL_LIBDIR}/svm.cpp ${LOCAL_LIBDIR}/svm.h -+ make -C ${LOCAL_LIBDIR} svm.o - - clean: -- rm -f *~ callbacks.o svm-toy main.o interface.o callbacks.o ../../svm.o -+ rm -f *~ callbacks.o svm-toy main.o interface.o callbacks.o ${LOCAL_LIBDIR}/svm.o -diff -up ./svm-toy/qt/Makefile.svm-toy ./svm-toy/qt/Makefile ---- ./svm-toy/qt/Makefile.svm-toy 2011-05-11 12:15:45.000000000 +1000 -+++ ./svm-toy/qt/Makefile 2012-04-04 17:02:28.366615284 +1000 -@@ -1,17 +1,22 @@ - CXX? = g++ --CFLAGS = -Wall -O3 -I$(INCLUDE) -I$(INCLUDE)/QtGui -lQtGui --INCLUDE = /usr/include/qt4 --MOC = /usr/bin/moc-qt4 -+SHVER?=2 -+CFLAGS = -Wall -O3 `pkg-config --cflags --libs QtGui` -+MOC=${MOC_PATH} -+LOCAL_LIBDIR=../.. -+LIBS = -L${LOCAL_LIBDIR} -lsvm -+LIBSVM_SO_SHVER=${LOCAL_LIBDIR}/libsvm.so.$(SHVER) - --svm-toy: svm-toy.cpp svm-toy.moc ../../svm.o -- $(CXX) $(CFLAGS) svm-toy.cpp ../../svm.o -o svm-toy -+all: svm-toy-qt -+ -+svm-toy-qt: svm-toy.cpp svm-toy.moc $(LIBSVM_SO_SHVER) -+ $(CXX) $(CFLAGS) svm-toy.cpp ${LIBS} -o $@ - - svm-toy.moc: svm-toy.cpp - $(MOC) svm-toy.cpp -o svm-toy.moc - --../../svm.o: ../../svm.cpp ../../svm.h -- make -C ../.. svm.o -+$(LIBSVM_SO_SHVER): ${LOCAL_LIBDIR}/svm.cpp ${LOCAL_LIBDIR}/svm.h -+ make -C ${LOCAL_LIBDIR} lib - - clean: -- rm -f *~ svm-toy svm-toy.moc ../../svm.o -+ rm -f *~ svm-toy svm-toy.moc $(LIBSVM_SO_SHVER) - diff --git a/libsvm-3.18.toolsDir.patch b/libsvm-3.18.toolsDir.patch deleted file mode 100644 index a303895..0000000 --- a/libsvm-3.18.toolsDir.patch +++ /dev/null @@ -1,52 +0,0 @@ -diff -up ./tools/easy.py.toolsDir ./tools/easy.py ---- ./tools/easy.py.toolsDir 2013-03-31 17:06:49.000000000 +1000 -+++ ./tools/easy.py 2013-04-13 23:17:53.399526910 +1000 -@@ -12,10 +12,10 @@ if len(sys.argv) <= 1: - - is_win32 = (sys.platform == 'win32') - if not is_win32: -- svmscale_exe = "../svm-scale" -- svmtrain_exe = "../svm-train" -- svmpredict_exe = "../svm-predict" -- grid_py = "./grid.py" -+ svmscale_exe = "/usr/bin/svm-scale" -+ svmtrain_exe = "/usr/bin/svm-train" -+ svmpredict_exe = "/usr/bin/svm-predict" -+ grid_py = "/usr/bin/svm-grid.py" - gnuplot_exe = "/usr/bin/gnuplot" - else: - # example for windows -@@ -47,7 +47,7 @@ if len(sys.argv) > 2: - - cmd = '{0} -s "{1}" "{2}" > "{3}"'.format(svmscale_exe, range_file, train_pathname, scaled_file) - print('Scaling training data...') --Popen(cmd, shell = True, stdout = PIPE).communicate() -+Popen(cmd, shell = True, stdout = PIPE).communicate() - - cmd = '{0} -svmtrain "{1}" -gnuplot "{2}" "{3}"'.format(grid_py, svmtrain_exe, gnuplot_exe, scaled_file) - print('Cross validation...') -@@ -70,10 +70,10 @@ print('Output model: {0}'.format(model_f - if len(sys.argv) > 2: - cmd = '{0} -r "{1}" "{2}" > "{3}"'.format(svmscale_exe, range_file, test_pathname, scaled_test_file) - print('Scaling testing data...') -- Popen(cmd, shell = True, stdout = PIPE).communicate() -+ Popen(cmd, shell = True, stdout = PIPE).communicate() - - cmd = '{0} "{1}" "{2}" "{3}"'.format(svmpredict_exe, scaled_test_file, model_file, predict_test_file) - print('Testing...') -- Popen(cmd, shell = True).communicate() -+ Popen(cmd, shell = True).communicate() - - print('Output prediction: {0}'.format(predict_test_file)) -diff -up ./tools/grid.py.toolsDir ./tools/grid.py ---- ./tools/grid.py.toolsDir 2013-03-31 17:06:50.000000000 +1000 -+++ ./tools/grid.py 2013-04-13 23:18:53.964522769 +1000 -@@ -18,7 +18,7 @@ class GridOption: - def __init__(self, dataset_pathname, options): - dirname = os.path.dirname(__file__) - if sys.platform != 'win32': -- self.svmtrain_pathname = os.path.join(dirname, '../svm-train') -+ self.svmtrain_pathname = '/usr/bin/svm-train' - self.gnuplot_pathname = '/usr/bin/gnuplot' - else: - # example for windows diff --git a/libsvm-3.20.javaDir.patch b/libsvm-3.20.javaDir.patch new file mode 100644 index 0000000..ed7cf4b --- /dev/null +++ b/libsvm-3.20.javaDir.patch @@ -0,0 +1,59 @@ +diff -up ./java/Makefile.javaDir ./java/Makefile +--- ./java/Makefile.javaDir 2009-02-18 10:41:04.000000000 +1000 ++++ ./java/Makefile 2010-11-08 10:59:11.229518442 +1000 +@@ -4,13 +4,21 @@ FILES = libsvm/svm.class libsvm/svm_mode + libsvm/svm_print_interface.class \ + svm_train.class svm_predict.class svm_toy.class svm_scale.class + ++JAVA_DOC_DIR=${INSTDIR}/share/javadoc/libsvm-${LIBSVM_VER} ++CLASSPATH = . + #JAVAC = jikes +-JAVAC_FLAGS = -target 1.5 -source 1.5 ++JAVAC_FLAGS = -target 1.5 -source 1.5 -classpath ${CLASSPATH} ++ifndef JAVAC + JAVAC = javac ++endif + # JAVAC_FLAGS = + ++ifndef JAR ++JAR=jar ++endif ++ + all: $(FILES) +- jar cvf libsvm.jar *.class libsvm/*.class ++ ${JAR} cvf libsvm.jar *.class libsvm/*.class + + .java.class: + $(JAVAC) $(JAVAC_FLAGS) $< +@@ -18,8 +26,23 @@ all: $(FILES) + libsvm/svm.java: libsvm/svm.m4 + m4 libsvm/svm.m4 > libsvm/svm.java + ++javadoc: docs/index.html ++ ++docs/index.html: $(FILES) ++ javadoc -d docs *.java libsvm/*.java ++ ++install: ++ mkdir -p ${JAVA_TARGET_DIR} ++ install -m 644 libsvm.jar ${JAVA_TARGET_DIR} ++# mkdir -p ${JAVA_DOC_DIR} ++# cd docs; cp -R * ${JAVA_DOC_DIR} ++uninstall: ++ rm -fr ${JAVA_TARGETDIR} ++# rm -fr ${JAVA_DOC_DIR} ++ + clean: + rm -f libsvm/*.class *.class *.jar libsvm/*~ *~ libsvm/svm.java ++ rm -rf docs + + dist: clean all + rm *.class libsvm/*.class +diff -up ./java/test_applet.html.javaDir ./java/test_applet.html +--- ./java/test_applet.html.javaDir 2003-07-12 14:07:32.000000000 +1000 ++++ ./java/test_applet.html 2010-11-08 10:59:11.229518442 +1000 +@@ -1 +1,3 @@ +- ++ ++ ++ diff --git a/libsvm-3.20.packageMain.patch b/libsvm-3.20.packageMain.patch new file mode 100644 index 0000000..dee23cd --- /dev/null +++ b/libsvm-3.20.packageMain.patch @@ -0,0 +1,128 @@ +diff -up ./Makefile.packageMain ./Makefile +--- ./Makefile.packageMain 2013-03-31 17:06:44.000000000 +1000 ++++ ./Makefile 2013-04-13 22:59:43.796601417 +1000 +@@ -1,11 +1,45 @@ + CXX ?= g++ +-CFLAGS = -Wall -Wconversion -O3 -fPIC ++CFLAGS = ${RPM_CFLAGS} -Wall -Wconversion -O3 -fPIC + SHVER = 2 ++export SHVER + OS = $(shell uname) ++MAKE = make ++DOT_LIBS=. ++LIBS= -L${DOT_LIBS} -lsvm ++export LIBSVM_VER ++IS_64:=$(shell /bin/uname -i | awk '/64/ {print 64}') ++PREFIXDIR?= /usr ++export PREFIXDIR + +-all: svm-train svm-predict svm-scale ++LIBDIR?=${PREFIXDIR}/lib${IS_64} ++export LIBDIR + +-lib: svm.o ++DATADIR?=${PREFIXDIR}/share ++export DATADIR ++ ++BINDIR?=${PREFIXDIR}/bin ++export BINDIR ++ ++INCLUDEDIR_INSTALL:=${DESTDIR}/${PREFIXDIR}/include ++export INCLUDEDIR_INSTALL ++ ++LIBDIR_INSTALL:=${DESTDIR}/${LIBDIR} ++export LIBDIR_INSTALL ++ ++DATADIR_INSTALL:=${DESTDIR}/${DATADIR} ++export DATA_INSTALL ++ ++BINDIR_INSTALL:=${DESTDIR}/${BINDIR} ++export BINDIR_INSTALL ++ ++all: lib svm-train svm-predict svm-scale svm-python svm-java svm-toy-gtk svm-toy-qt ++ ++lib: libsvm.so.$(SHVER) libsvm.so ++ ++libsvm.so: libsvm.so.$(SHVER) ++ ln -sf libsvm.so.$(SHVER) libsvm.so ++ ++libsvm.so.$(SHVER): svm.o + if [ "$(OS)" = "Darwin" ]; then \ + SHARED_LIB_FLAG="-dynamiclib -Wl,-install_name,libsvm.so.$(SHVER)"; \ + else \ +@@ -14,12 +48,72 @@ lib: svm.o + $(CXX) $${SHARED_LIB_FLAG} svm.o -o libsvm.so.$(SHVER) + + svm-predict: svm-predict.c svm.o +- $(CXX) $(CFLAGS) svm-predict.c svm.o -o svm-predict -lm ++ $(CXX) $(CFLAGS) svm-predict.c $(LIBS) -o svm-predict -lm + svm-train: svm-train.c svm.o +- $(CXX) $(CFLAGS) svm-train.c svm.o -o svm-train -lm ++ $(CXX) $(CFLAGS) svm-train.c $(LIBS) -o svm-train -lm + svm-scale: svm-scale.c + $(CXX) $(CFLAGS) svm-scale.c -o svm-scale + svm.o: svm.cpp svm.h + $(CXX) $(CFLAGS) -c svm.cpp + clean: +- rm -f *~ svm.o svm-train svm-predict svm-scale libsvm.so.$(SHVER) ++ rm -f *~ svm.o svm-train svm-predict svm-scale svm-toy/gtk/svm-toy-gtk svm-toy/qt/svm-toy-qt ++ ${MAKE} -C python clean ++ ${MAKE} -C java clean ++svm-python: ++ ${MAKE} -C python ++ ++svm-java: ++ifneq ("${NO_JAVA}","NO_JAVA") ++ ${MAKE} -C java ++endif ++svm-toy-gtk: ++ ${MAKE} -C svm-toy/gtk ++ ++svm-toy-qt: ++ ${MAKE} -C svm-toy/qt ++ ++install: all ++ mkdir -p ${BINDIR_INSTALL} ++ install -m 755 svm-train ${BINDIR_INSTALL} ++ install -m 755 svm-predict ${BINDIR_INSTALL} ++ install -m 755 svm-scale ${BINDIR_INSTALL} ++ mkdir -p ${LIBDIR_INSTALL} ++ install -m 755 libsvm.so.$(SHVER) ${LIBDIR_INSTALL} ++# install package libsvm-devel ++ mkdir -p ${INCLUDEDIR_INSTALL}/libsvm ++ install -m 644 svm.h ${INCLUDEDIR_INSTALL}/libsvm ++ mkdir -p ${DATADIR_INSTALL}/libsvm/src/java/libsvm ++ install -m 644 *.h ${DATADIR_INSTALL}/libsvm/src ++ install -m 644 *.c ${DATADIR_INSTALL}/libsvm/src ++ install -m 644 *.cpp ${DATADIR_INSTALL}/libsvm/src ++ install -m 644 Makefile ${DATADIR_INSTALL}/libsvm/src ++ifneq ("${NO_JAVA}","NO_JAVA") ++ install -m 644 java/*.java ${DATADIR_INSTALL}/libsvm/src/java ++ install -m 644 java/Makefile ${DATADIR_INSTALL}/libsvm/src/java ++ install -m 644 java/libsvm/*.java ${DATADIR_INSTALL}/libsvm/src/java/libsvm ++ install -m 644 java/libsvm/*.m4 ${DATADIR_INSTALL}/libsvm/src/java/libsvm ++# install package libsvm-java ++ ${MAKE} -C java install ++endif ++# install package libsvm-python ++ ${MAKE} -C python install ++# install package svm-toy ++ install -m 755 svm-toy/gtk/svm-toy-gtk ${BINDIR_INSTALL} ++ install -m 755 svm-toy/qt/svm-toy-qt ${BINDIR_INSTALL} ++# install examples ++ mkdir -p ${DATADIR_INSTALL}/libsvm/examples ++ install -m 644 heart_scale ${DATADIR_INSTALL}/libsvm/examples ++uninstall: ++ rm -f ${BINDIR_INSTALL}/svm-train ++ rm -f ${BINDIR_INSTALL}/svm-predict ++ rm -f ${BINDIR_INSTALL}/svm-scale ++ rm -fr ${DATADIR_INSTALL}/libsvm ++ rm -f ${INCLUDEDIR_INSTALL}/libsvm/svm.h ++ rm -f ${LIBDIR_INSTALL}/libsvm.so* ++ ${MAKE} -C python uninstall ++ifneq ("${NO_JAVA}","NO_JAVA") ++ ${MAKE} -C java uninstall ++endif ++ rm -f ${BINDIR_INSTALL}/svm-toy-gtk ++ rm -f ${BINDIR_INSTALL}/svm-toy-qt ++ diff --git a/libsvm-3.20.pythonDir.patch b/libsvm-3.20.pythonDir.patch new file mode 100644 index 0000000..ff0991d --- /dev/null +++ b/libsvm-3.20.pythonDir.patch @@ -0,0 +1,25 @@ +diff -up ./python/Makefile.pythonDir ./python/Makefile +--- ./python/Makefile.pythonDir 2011-05-10 09:35:15.000000000 +1000 ++++ ./python/Makefile 2011-11-08 09:49:54.280501207 +1000 +@@ -1,4 +1,20 @@ ++PYTHONDIR_NAME ?= python${PYTHON_VERSION}/site-packages/libsvm ++PYTHONDIR?=${LIBDIR}/${PYTHONDIR_NAME} ++PYTHONDIR_INSTALL=${DESTDIR}/${PYTHONDIR} ++SVM_TOOLS:= $(notdir $(wildcard ../tools/*.py)) ++ + all = lib + +-lib: ++all: lib ++ ++lib: ../svm.cpp ../svm.h + make -C .. lib ++ ++install: all ++ mkdir -p ${PYTHONDIR_INSTALL} ++ install -m 755 *.py ${PYTHONDIR_INSTALL} ++ install -m 755 ../tools/*.py ${PYTHONDIR_INSTALL} ++ $(foreach toolPy,$(SVM_TOOLS),ln -s ${PYTHONDIR}/$(toolPy) ${BINDIR_INSTALL}/svm-$(toolPy);) ++ ++uninstall: ++ rm -fr ${LIBDIR}/${PYTHON_PATH} $(addprefix ${BINDIR_INSTALL}/svm-,$(SVM_TOOLS)) diff --git a/libsvm-3.20.svm-toy.patch b/libsvm-3.20.svm-toy.patch new file mode 100644 index 0000000..d2a9274 --- /dev/null +++ b/libsvm-3.20.svm-toy.patch @@ -0,0 +1,66 @@ +diff -up ./svm-toy/gtk/Makefile.svm-toy ./svm-toy/gtk/Makefile +--- ./svm-toy/gtk/Makefile.svm-toy 2011-05-11 12:15:45.000000000 +1000 ++++ ./svm-toy/gtk/Makefile 2012-04-04 17:02:28.366615284 +1000 +@@ -1,10 +1,12 @@ + CC? = gcc + CXX? = g++ +-CFLAGS = -Wall -O3 -g `pkg-config --cflags gtk+-2.0` +-LIBS = `pkg-config --libs gtk+-2.0` ++CFLAGS = -Wall -O3 -g `pkg-config --cflags --libs gtk+-2.0` ++LOCAL_LIBDIR=../.. ++LIBS = -L${LOCAL_LIBDIR} -lsvm + +-svm-toy: main.o interface.o callbacks.o ../../svm.o +- $(CXX) $(CFLAGS) main.o interface.o callbacks.o ../../svm.o -o svm-toy $(LIBS) ++ ++svm-toy-gtk: main.o interface.o callbacks.o ${LOCAL_LIBDIR}/svm.o ++ $(CXX) $(CFLAGS) main.o interface.o callbacks.o $(LIBS) -o $@ + + main.o: main.c + $(CC) $(CFLAGS) -c main.c +@@ -15,8 +17,8 @@ interface.o: interface.c interface.h + callbacks.o: callbacks.cpp callbacks.h + $(CXX) $(CFLAGS) -c callbacks.cpp + +-../../svm.o: ../../svm.cpp ../../svm.h +- make -C ../.. svm.o ++${LOCAL_LIBDIR}/svm.o: ${LOCAL_LIBDIR}/svm.cpp ${LOCAL_LIBDIR}/svm.h ++ make -C ${LOCAL_LIBDIR} svm.o + + clean: +- rm -f *~ callbacks.o svm-toy main.o interface.o callbacks.o ../../svm.o ++ rm -f *~ callbacks.o svm-toy main.o interface.o callbacks.o ${LOCAL_LIBDIR}/svm.o +diff -up ./svm-toy/qt/Makefile.svm-toy ./svm-toy/qt/Makefile +--- ./svm-toy/qt/Makefile.svm-toy 2011-05-11 12:15:45.000000000 +1000 ++++ ./svm-toy/qt/Makefile 2012-04-04 17:02:28.366615284 +1000 +@@ -1,17 +1,22 @@ + CXX? = g++ +-CFLAGS = -Wall -O3 -I$(INCLUDE) -I$(INCLUDE)/QtGui -lQtGui +-INCLUDE = /usr/include/qt4 +-MOC = /usr/bin/moc-qt4 ++SHVER?=2 ++CFLAGS = -Wall -O3 `pkg-config --cflags --libs QtGui` ++MOC=${MOC_PATH} ++LOCAL_LIBDIR=../.. ++LIBS = -L${LOCAL_LIBDIR} -lsvm ++LIBSVM_SO_SHVER=${LOCAL_LIBDIR}/libsvm.so.$(SHVER) + +-svm-toy: svm-toy.cpp svm-toy.moc ../../svm.o +- $(CXX) $(CFLAGS) svm-toy.cpp ../../svm.o -o svm-toy ++all: svm-toy-qt ++ ++svm-toy-qt: svm-toy.cpp svm-toy.moc $(LIBSVM_SO_SHVER) ++ $(CXX) $(CFLAGS) svm-toy.cpp ${LIBS} -o $@ + + svm-toy.moc: svm-toy.cpp + $(MOC) svm-toy.cpp -o svm-toy.moc + +-../../svm.o: ../../svm.cpp ../../svm.h +- make -C ../.. svm.o ++$(LIBSVM_SO_SHVER): ${LOCAL_LIBDIR}/svm.cpp ${LOCAL_LIBDIR}/svm.h ++ make -C ${LOCAL_LIBDIR} lib + + clean: +- rm -f *~ svm-toy svm-toy.moc ../../svm.o ++ rm -f *~ svm-toy svm-toy.moc $(LIBSVM_SO_SHVER) + diff --git a/libsvm-3.20.toolsDir.patch b/libsvm-3.20.toolsDir.patch new file mode 100644 index 0000000..a303895 --- /dev/null +++ b/libsvm-3.20.toolsDir.patch @@ -0,0 +1,52 @@ +diff -up ./tools/easy.py.toolsDir ./tools/easy.py +--- ./tools/easy.py.toolsDir 2013-03-31 17:06:49.000000000 +1000 ++++ ./tools/easy.py 2013-04-13 23:17:53.399526910 +1000 +@@ -12,10 +12,10 @@ if len(sys.argv) <= 1: + + is_win32 = (sys.platform == 'win32') + if not is_win32: +- svmscale_exe = "../svm-scale" +- svmtrain_exe = "../svm-train" +- svmpredict_exe = "../svm-predict" +- grid_py = "./grid.py" ++ svmscale_exe = "/usr/bin/svm-scale" ++ svmtrain_exe = "/usr/bin/svm-train" ++ svmpredict_exe = "/usr/bin/svm-predict" ++ grid_py = "/usr/bin/svm-grid.py" + gnuplot_exe = "/usr/bin/gnuplot" + else: + # example for windows +@@ -47,7 +47,7 @@ if len(sys.argv) > 2: + + cmd = '{0} -s "{1}" "{2}" > "{3}"'.format(svmscale_exe, range_file, train_pathname, scaled_file) + print('Scaling training data...') +-Popen(cmd, shell = True, stdout = PIPE).communicate() ++Popen(cmd, shell = True, stdout = PIPE).communicate() + + cmd = '{0} -svmtrain "{1}" -gnuplot "{2}" "{3}"'.format(grid_py, svmtrain_exe, gnuplot_exe, scaled_file) + print('Cross validation...') +@@ -70,10 +70,10 @@ print('Output model: {0}'.format(model_f + if len(sys.argv) > 2: + cmd = '{0} -r "{1}" "{2}" > "{3}"'.format(svmscale_exe, range_file, test_pathname, scaled_test_file) + print('Scaling testing data...') +- Popen(cmd, shell = True, stdout = PIPE).communicate() ++ Popen(cmd, shell = True, stdout = PIPE).communicate() + + cmd = '{0} "{1}" "{2}" "{3}"'.format(svmpredict_exe, scaled_test_file, model_file, predict_test_file) + print('Testing...') +- Popen(cmd, shell = True).communicate() ++ Popen(cmd, shell = True).communicate() + + print('Output prediction: {0}'.format(predict_test_file)) +diff -up ./tools/grid.py.toolsDir ./tools/grid.py +--- ./tools/grid.py.toolsDir 2013-03-31 17:06:50.000000000 +1000 ++++ ./tools/grid.py 2013-04-13 23:18:53.964522769 +1000 +@@ -18,7 +18,7 @@ class GridOption: + def __init__(self, dataset_pathname, options): + dirname = os.path.dirname(__file__) + if sys.platform != 'win32': +- self.svmtrain_pathname = os.path.join(dirname, '../svm-train') ++ self.svmtrain_pathname = '/usr/bin/svm-train' + self.gnuplot_pathname = '/usr/bin/gnuplot' + else: + # example for windows diff --git a/libsvm.spec b/libsvm.spec index 602ed7d..e1996c1 100644 --- a/libsvm.spec +++ b/libsvm.spec @@ -3,10 +3,12 @@ %{!?python_sitearch: %define python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")} %define libdir_libsvm %{_libdir}/libsvm %define libsvm_python_dir %{python_sitearch}/libsvm +%global maven_group_id tw.edu.ntu.csie +%global pom_file_version 3.17 Name: libsvm -Version: 3.18 -Release: 6%{?dist} +Version: 3.20 +Release: 1%{?dist} Summary: A Library for Support Vector Machines Group: Development/Libraries @@ -18,6 +20,7 @@ Source2: http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf Source3: libsvm-svm-toy-gtk.desktop Source4: libsvm-svm-toy-qt.desktop Source5: LibSVM-svm-toy-48.png +Source6: http://central.maven.org/maven2/tw/edu/ntu/csie/libsvm/%{pom_file_version}/libsvm-%{pom_file_version}.pom Patch0: %{name}-%{version}.packageMain.patch Patch1: %{name}-%{version}.pythonDir.patch Patch2: %{name}-%{version}.javaDir.patch @@ -26,6 +29,7 @@ Patch4: %{name}-%{version}.toolsDir.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRequires: grep +%global pom_file_name "JPP.%{maven_group_id}-%{name}.pom" %if 0%{?rhel} != 0 && 0%{?rhel} <= 5 %define moc_path %{_libdir}/qt4/bin/moc %define with_vendor "fedora" @@ -131,6 +135,23 @@ cp %{SOURCE4} . cp %{SOURCE5} %{name}-svm-toy-gtk-48.png cp %{SOURCE5} %{name}-svm-toy-qt-48.png + +%if "%{no_java}" == "FALSE" +# Update the POM file, which is stuck on version 3.17 +# pom_xpath_set does not work in rpm-4.11.1 +# as it generated something like +# +# +# 3.20 +# +# +# +%{__sed} -e 's/%{pom_file_version}/%{version}/' %{SOURCE6} > %{name}.pom +%{__sed} -i 's|http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm.cgi?+http://www.csie.ntu.edu.tw/~cjlin/libsvm+tar.gz|https://github.com/cjlin1/libsvm|' %{name}.pom +%{__sed} -i 's|http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm.cgi?+http://www.csie.ntu.edu.tw/~cjlin/libsvm+tar.gz|scm:git:https://github.com/cjlin1/libsvm.git|' %{name}.pom + +%endif + %build %{__sed} -i 's/\r//' FAQ.html %{__sed} -i 's/\r//' ChangeLog @@ -142,38 +163,54 @@ cp README svm-toy/gtk cp README svm-toy/qt %install -rm -rf $RPM_BUILD_ROOT -make install DESTDIR=$RPM_BUILD_ROOT LIBDIR=%{_libdir} PYTHON_VERSION="%{pyver}" LIBSVM_VER="%{version}" NO_JAVA="%{no_java}" JAVA_TARGET_DIR="${RPM_BUILD_ROOT}/%{_javadir}" -rm -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/src -mkdir -p $RPM_BUILD_ROOT/%{_datadir}/icons/hicolor/48x48/apps/ -cp %{name}-svm-toy-gtk-48.png $RPM_BUILD_ROOT/%{_datadir}/icons/hicolor/48x48/apps/ -cp %{name}-svm-toy-qt-48.png $RPM_BUILD_ROOT/%{_datadir}/icons/hicolor/48x48/apps/ -mkdir -p $RPM_BUILD_ROOT/%{_datadir}/applications -cp %{name}-svm-toy-gtk.desktop $RPM_BUILD_ROOT/%{_datadir}/applications -cp %{name}-svm-toy-qt.desktop $RPM_BUILD_ROOT/%{_datadir}/applications - -%__ln_s %{name}.so.%{shver} $RPM_BUILD_ROOT/%{_libdir}/%{name}.so - +rm -rf %{buildroot} +make install DESTDIR=%{buildroot} LIBDIR=%{_libdir} PYTHON_VERSION="%{pyver}" LIBSVM_VER="%{version}" NO_JAVA="%{no_java}" JAVA_TARGET_DIR="%{buildroot}/%{_javadir}" +rm -rf %{buildroot}%{_datadir}/%{name}/src +mkdir -p %{buildroot}/%{_datadir}/icons/hicolor/48x48/apps/ +cp %{name}-svm-toy-gtk-48.png %{buildroot}/%{_datadir}/icons/hicolor/48x48/apps/ +cp %{name}-svm-toy-qt-48.png %{buildroot}/%{_datadir}/icons/hicolor/48x48/apps/ +mkdir -p %{buildroot}/%{_datadir}/applications +cp %{name}-svm-toy-gtk.desktop %{buildroot}/%{_datadir}/applications +cp %{name}-svm-toy-qt.desktop %{buildroot}/%{_datadir}/applications + +%__ln_s %{name}.so.%{shver} %{buildroot}/%{_libdir}/%{name}.so # [Bug 521194] Python: 'import libsvm' doesn't work +mkdir -p %{buildroot}/%{libsvm_python_dir} echo -e "# This file is not in the original libsvm tarball, but added for convenience of import libsvm.\n\ # This file is released under BSD license, just like the rest of the package.\n"\ - > $RPM_BUILD_ROOT/%{libsvm_python_dir}/__init__.py + > %{buildroot}/%{libsvm_python_dir}/__init__.py %if 0%{?with_vendor:1} desktop-file-install --delete-original --vendor=%{with_vendor} \ - --dir=${RPM_BUILD_ROOT}%{_datadir}/applications \ - ${RPM_BUILD_ROOT}/%{_datadir}/applications/%{name}-svm-toy-gtk.desktop \ - ${RPM_BUILD_ROOT}/%{_datadir}/applications/%{name}-svm-toy-qt.desktop + --dir=%{buildroot}%{_datadir}/applications \ + %{buildroot}/%{_datadir}/applications/%{name}-svm-toy-gtk.desktop \ + %{buildroot}/%{_datadir}/applications/%{name}-svm-toy-qt.desktop %else desktop-file-install --delete-original \ - --dir=${RPM_BUILD_ROOT}%{_datadir}/applications \ - ${RPM_BUILD_ROOT}/%{_datadir}/applications/%{name}-svm-toy-gtk.desktop \ - ${RPM_BUILD_ROOT}/%{_datadir}/applications/%{name}-svm-toy-qt.desktop + --dir=%{buildroot}%{_datadir}/applications \ + %{buildroot}/%{_datadir}/applications/%{name}-svm-toy-gtk.desktop \ + %{buildroot}/%{_datadir}/applications/%{name}-svm-toy-qt.desktop %endif # Fix Bug 646154 - libsvm-python's pth is not set correctly -echo 'libsvm' > $RPM_BUILD_ROOT/%{python_sitearch}/libsvm.pth +echo 'libsvm' > %{buildroot}/%{python_sitearch}/libsvm.pth + + +# Java +%if "%{no_java}" == "FALSE" +## Move jars to correct directory +mkdir -p %{buildroot}/%{_javadir}/%{maven_group_id} +mv %{buildroot}/%{_javadir}/%{name}.jar %{buildroot}/%{_javadir}/%{maven_group_id}/%{name}-%{version}.jar +ln -s %{name}-%{version}.jar %{buildroot}/%{_javadir}/%{maven_group_id}/%{name}.jar +ln -s %{_javadir}/%{maven_group_id}/%{name}.jar %{buildroot}/%{_javadir}/%{name}.jar + +## Install the Java POM +mkdir -p %{buildroot}%{_mavenpomdir} +cp -p %{name}.pom %{buildroot}%{_mavenpomdir}/%{pom_file_name} +%add_maven_depmap %{pom_file_name} %{maven_group_id}/%{name}.jar +%endif + %post -p /sbin/ldconfig @@ -194,7 +231,7 @@ fi %clean -rm -rf $RPM_BUILD_ROOT +rm -rf %{buildroot} %files @@ -221,11 +258,11 @@ rm -rf $RPM_BUILD_ROOT %{python_sitearch}/libsvm.pth %if "%{no_java}" == "FALSE" -%files java +%files java -f .mfiles %defattr(-,root,root,-) %doc java/README-Java java/test_applet.html %{_javadir}/%{name}.jar -#%{_datadir}/javadoc/%{name}-%{version} +%{_javadir}/%{maven_group_id}/%{name}-%{version}.jar %endif %files svm-toy-gtk @@ -244,6 +281,12 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Tue Jan 20 2015 Ding-Yi Chen - 3.20-1 +- Upstream update to 3.20 + +* Fri Dec 19 2014 Jerry James - 3.18-7 +- Install maven POM and depmaps (bz 1175898) + * Sun Aug 17 2014 Fedora Release Engineering - 3.18-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild diff --git a/log b/log index 056a560..4c7d592 100644 --- a/log +++ b/log @@ -212,7 +212,6 @@ i subroutines to get SVs new make.m for unix/mac/windows and for matlab/octave matlab and python: fix a problem that decision values returned by svmpredict is empty if number of classes = 1 -<<<<<<< HEAD 3.12: 2012/04/01 svm-toy: support loading/saving of regression data @@ -259,4 +258,4 @@ i subroutines to get SVs initialize model->sv_indices as null in svm_load_model if nr_fold > # data, change nr_fold to be # data and ro leave-one-out cv matlab interface: - handle the problem where output variables are not specified + handle the problem where output variables are not specified \ No newline at end of file diff --git a/sources b/sources index 4a9b52a..2aa72d2 100644 --- a/sources +++ b/sources @@ -1,6 +1,2 @@ b1543809993e2653dd2787f62c3c390a guide.pdf -bba35e2cf9d14e158009ef8b90fd840a libsvm-3.18.tar.gz -95918671ee5435803a1646e1ad2f3317 log -0bc4868057a7c1c422f91a798f14a562 LibSVM-svm-toy-48.png -398721fc66bb0903d46c685e9a3cba27 libsvm-svm-toy-gtk.desktop -9a518db15afe9224e3a04695c82d7142 libsvm-svm-toy-qt.desktop +5f088e5f89da1c65b642300c9c5ea772 libsvm-3.20.tar.gz