diff --git a/.gitignore b/.gitignore index ce11a88..1ad2fca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ guide.pdf libsvm-2.91.tar.gz +/guide.pdf +/libsvm-3.0.tar.gz diff --git a/libsvm-2.91.patch b/libsvm-2.91.patch deleted file mode 100644 index 9867ae9..0000000 --- a/libsvm-2.91.patch +++ /dev/null @@ -1,379 +0,0 @@ -diff -up ./java/Makefile.orig ./java/Makefile ---- ./java/Makefile.orig 2009-02-18 10:41:04.000000000 +1000 -+++ ./java/Makefile 2010-04-07 11:28:04.000000000 +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.orig ./java/test_applet.html ---- ./java/test_applet.html.orig 2003-07-12 14:07:32.000000000 +1000 -+++ ./java/test_applet.html 2010-04-07 11:28:04.000000000 +1000 -@@ -1 +1,3 @@ -- -+ -+ -+ -diff -up ./Makefile.orig ./Makefile ---- ./Makefile.orig 2010-03-19 00:54:02.000000000 +1000 -+++ ./Makefile 2010-04-07 11:28:04.000000000 +1000 -@@ -1,11 +1,39 @@ - CXX ?= g++ --CFLAGS = -Wall -Wconversion -O3 -fPIC -+CFLAGS = ${RPM_CFLAGS} -Wall -Wconversion -O3 -fPIC - SHVER = 1 -+MAKE = make -+DOT_LIBS=.libs -+LIBS= -L${DOT_LIBS} -lsvm -+export LIBSVM_VER -+ -+ifndef DESTDIR -+INSTDIR=/usr -+else -+INSTDIR=${DESTDIR}/usr -+endif - --all: svm-train svm-predict svm-scale -+export INSTDIR -+ -+IS_64=$(shell /bin/uname -i | awk '/64/ {print 64}') -+ -+ifndef LIBDIR -+LIB_INSTDIR=${INSTDIR}/lib${IS_64} -+else -+LIB_INSTDIR=${INSTDIR}/..${LIBDIR} -+endif -+ -+ifndef LIBDIR -+LIBDIR=/usr/lib${IS_64} -+endif -+ -+export LIBDIR -+export LIB_INSTDIR -+ -+all: lib svm-train svm-predict svm-scale svm-python svm-java svm-toy-gtk svm-toy-qt - - lib: svm.o -- $(CXX) -shared -dynamiclib svm.o -o libsvm.so.$(SHVER) -+ $(CXX) -shared -Wl,-soname,libsvm.so.$(SHVER) svm.o -o libsvm.so.$(SHVER) -+ ln -sf libsvm.so.$(SHVER) libsvm.so - - svm-predict: svm-predict.c svm.o - $(CXX) $(CFLAGS) svm-predict.c svm.o -o svm-predict -lm -@@ -16,4 +44,65 @@ svm-scale: svm-scale.c - 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 ${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} -+ install -m 755 libsvm.so.$(SHVER) ${LIB_INSTDIR} -+# install package libsvm-devel -+ 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 -+ifneq ("${NO_JAVA}","NO_JAVA") -+ 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 -+# 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 ${INSTDIR}/bin -+ install -m 755 svm-toy/qt/svm-toy-qt ${INSTDIR}/bin -+# install examples -+ mkdir -p ${INSTDIR}/share/libsvm/examples -+ install -m 644 heart_scale ${INSTDIR}/share/libsvm/examples -+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 -+ifneq ("${NO_JAVA}","NO_JAVA") -+ ${MAKE} -C java uninstall -+endif -+ rm -f ${INSTDIR}/bin/svm-toy-gtk -+ rm -f ${INSTDIR}/bin/svm-toy-qt -diff -up ./python/Makefile.orig ./python/Makefile ---- ./python/Makefile.orig 2010-03-19 01:57:28.000000000 +1000 -+++ ./python/Makefile 2010-04-07 11:28:04.000000000 +1000 -@@ -1,4 +1,15 @@ --all = lib -+PYTHON_PATH ?= python${PYTHON_VERSION}/site-packages/libsvm -+PYTHON_TARGETDIR=${LIB_INSTDIR}/${PYTHON_PATH} -+ -+all: lib - - lib: ../svm.cpp ../svm.h - cd ..; make lib; cd - -+ -+install: all -+ mkdir -p ${PYTHON_TARGETDIR} -+ install -m 755 *.py ${PYTHON_TARGETDIR} -+ install -m 755 ../tools/*.py ${PYTHON_TARGETDIR} -+ -+uninstall: -+ rm -fr ${LIBDIR}/${PYTHON_PATH} -diff -up ./python_old/Makefile.orig ./python_old/Makefile ---- ./python_old/Makefile.orig 2009-09-16 23:37:45.000000000 +1000 -+++ ./python_old/Makefile 2010-04-07 11:28:04.000000000 +1000 -@@ -2,9 +2,11 @@ CXX ?= g++ - SWIG ?= swig - - #Windows: see ../README ../Makefile.win --PYTHON_INCLUDEDIR ?= /usr/include/python2.5 -+PYTHON_INCLUDEDIR ?= /usr/include/python${PYTHON_VERSION} -+PYTHON_TARGETDIR=${LIB_INSTDIR}/python${PYTHON_VERSION}/site-packages/libsvm - - CFLAGS = -O3 -I$(PYTHON_INCLUDEDIR) -I.. -+ - LDFLAGS = -shared - # Mac OS - # LDFLAGS = -framework Python -bundle -@@ -28,3 +30,16 @@ clean: - - cleaner: clean - rm -f svmc_wrap.c -+ -+install: all -+ mkdir -p ${PYTHON_TARGETDIR} -+ install -m 755 cross_validation.py ${PYTHON_TARGETDIR} -+ install -m 644 svm.py ${PYTHON_TARGETDIR} -+ install -m 755 svm_test.py ${PYTHON_TARGETDIR} -+ install -m 755 test_cross_validation.py ${PYTHON_TARGETDIR} -+ install -m 644 *.i ${PYTHON_TARGETDIR} -+ install -m 755 *.so ${PYTHON_TARGETDIR} -+ install -m 755 ../tools/*.py ${PYTHON_TARGETDIR} -+ -+uninstall: -+ rm -fr ${LIBDIR}/python${PYTHON_VERSION}/site-packages/libsvm -diff -up ./svm-toy/gtk/callbacks.cpp.orig ./svm-toy/gtk/callbacks.cpp ---- ./svm-toy/gtk/callbacks.cpp.orig 2006-03-04 17:40:12.000000000 +1000 -+++ ./svm-toy/gtk/callbacks.cpp 2010-04-07 11:28:04.000000000 +1000 -@@ -2,6 +2,7 @@ - #include - #include - #include -+#include - #include "callbacks.h" - #include "interface.h" - #include "../../svm.h" -diff -up ./svm-toy/gtk/Makefile.orig ./svm-toy/gtk/Makefile ---- ./svm-toy/gtk/Makefile.orig 2007-10-14 16:29:12.000000000 +1000 -+++ ./svm-toy/gtk/Makefile 2010-04-07 11:28:04.000000000 +1000 -@@ -2,21 +2,27 @@ CC? = gcc - CXX? = g++ - CFLAGS = -Wall -O3 -g `gtk-config --cflags` - LIBS = `gtk-config --libs` -+COPT = -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) -+ -+all: svm-toy-gtk -+ -+svm-toy-gtk: main.o interface.o callbacks.o -+ $(CXX) $(COPT) main.o interface.o callbacks.o ${LIBS} -o svm-toy-gtk - - main.o: main.c -- $(CC) $(CFLAGS) -c main.c -+ $(CC) $(COPT) -c main.c - - interface.o: interface.c interface.h -- $(CC) $(CFLAGS) -c interface.c -+ $(CC) $(COPT) -c interface.c - - callbacks.o: callbacks.cpp callbacks.h -- $(CXX) $(CFLAGS) -c callbacks.cpp -+ $(CXX) $(COPT) -c callbacks.cpp - --../../svm.o: -- cd ../..; make svm.o -+#../../svm.o: -+# cd ../..; make svm.o - - clean: -- rm -f *~ callbacks.o svm-toy main.o interface.o callbacks.o ../../svm.o -+ rm -f *~ callbacks.o svm-toy-gtk main.o interface.o callbacks.o -diff -up ./svm-toy/qt/Makefile.orig ./svm-toy/qt/Makefile ---- ./svm-toy/qt/Makefile.orig 2008-12-19 16:42:05.000000000 +1000 -+++ ./svm-toy/qt/Makefile 2010-04-07 11:28:04.000000000 +1000 -@@ -1,17 +1,21 @@ - CXX? = g++ --CFLAGS = -Wall -O3 -I$(INCLUDE) -I$(INCLUDE)/QtGui -lQtGui -+CFLAGS = -Wall -O3 -+FLAGS:=${CFLAGS} `pkg-config --cflags --libs QtGui` -+LOCAL_LIBDIR=../../ -+LIBS= -L${LOCAL_LIBDIR} -lsvm -+ - INCLUDE = /usr/include/qt4 --MOC = /usr/bin/moc-qt4 - --svm-toy: svm-toy.cpp svm-toy.moc ../../svm.o -- $(CXX) $(CFLAGS) svm-toy.cpp ../../svm.o -o svm-toy -+MOC=${MOC_PATH} -+ -+all: svm-toy-qt -+ -+svm-toy-qt: svm-toy.cpp svm-toy.moc -+ $(CXX) $(FLAGS) svm-toy.cpp ${LIBS} -o svm-toy-qt - - svm-toy.moc: svm-toy.cpp - $(MOC) svm-toy.cpp -o svm-toy.moc - --../../svm.o: -- cd ../..; make svm.o -- - clean: -- rm -f *~ svm-toy svm-toy.moc ../../svm.o -+ rm -f *~ svm-toy-qt svm-toy.moc ../../svm.o - -diff -up ./tools/easy.py.orig ./tools/easy.py ---- ./tools/easy.py.orig 2009-05-14 15:09:29.000000000 +1000 -+++ ./tools/easy.py 2010-04-07 11:28:04.000000000 +1000 -@@ -2,6 +2,7 @@ - - import sys - import os -+from distutils.sysconfig import get_python_lib - from subprocess import * - - if len(sys.argv) <= 1: -@@ -12,10 +13,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 = get_python_lib(1)+"/libsvm/grid.py" - gnuplot_exe = "/usr/bin/gnuplot" - else: - # example for windows -diff -up ./tools/grid.py.orig ./tools/grid.py ---- ./tools/grid.py.orig 2009-11-20 22:29:46.000000000 +1000 -+++ ./tools/grid.py 2010-04-07 14:14:21.000000000 +1000 -@@ -17,7 +17,7 @@ else: - - is_win32 = (sys.platform == 'win32') - if not is_win32: -- svmtrain_exe = "../svm-train" -+ svmtrain_exe = "/usr/bin/svm-train" - gnuplot_exe = "/usr/bin/gnuplot" - else: - # example for windows -@@ -158,10 +158,10 @@ def redraw(db,best_param,tofile=False): - gnuplot.write(("set label \"C = %s gamma = %s\"" - " at screen 0.5,0.8 center\n" % (2**best_log2c, 2**best_log2g)).encode()) - gnuplot.write("splot \"-\" with lines\n".encode()) -- - - -- -+ -+ - db.sort(key = lambda x:(x[0], -x[1])) - - prevc = db[0][0] -@@ -222,9 +222,9 @@ class Worker(Thread): - if rate is None: raise "get no rate" - except: - # we failed, let others do that and we just quit -- -+ - traceback.print_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2]) -- -+ - self.job_queue.put((cexp,gexp)) - print('worker %s quit.' % self.name) - break -@@ -331,7 +331,6 @@ def main(): - - result_file = open(out_filename, 'w') - -- - db = [] - best_rate = -1 - best_c1,best_g1 = None,None diff --git a/libsvm-3.0.javaDir.patch b/libsvm-3.0.javaDir.patch new file mode 100644 index 0000000..056374b --- /dev/null +++ b/libsvm-3.0.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.0.packageMain.patch b/libsvm-3.0.packageMain.patch new file mode 100644 index 0000000..fb6a009 --- /dev/null +++ b/libsvm-3.0.packageMain.patch @@ -0,0 +1,114 @@ +diff -up ./Makefile.packageMain ./Makefile +--- ./Makefile.packageMain 2010-09-12 22:11:10.000000000 +1000 ++++ ./Makefile 2010-11-08 11:04:38.423570586 +1000 +@@ -1,11 +1,40 @@ + CXX ?= g++ +-CFLAGS = -Wall -Wconversion -O3 -fPIC ++CFLAGS = ${RPM_CFLAGS} -Wall -Wconversion -O3 -fPIC + SHVER = 2 ++MAKE = make ++DOT_LIBS=.libs ++LIBS= -L${DOT_LIBS} -lsvm ++export LIBSVM_VER ++ ++ifndef DESTDIR ++ INSTDIR=/usr ++else ++ INSTDIR=${DESTDIR}/usr ++endif ++ ++export INSTDIR ++ ++IS_64=$(shell /bin/uname -i | awk '/64/ {print 64}') ++ ++ifndef LIBDIR ++ LIB_INSTDIR=${INSTDIR}/lib${IS_64} ++else ++ LIB_INSTDIR=${INSTDIR}/..${LIBDIR} ++endif ++ ++ifndef LIBDIR ++ LIBDIR=/usr/lib${IS_64} ++endif ++ ++export LIBDIR ++export LIB_INSTDIR ++ ++all: lib svm-train svm-predict svm-scale svm-python svm-java svm-toy-gtk svm-toy-qt + +-all: svm-train svm-predict svm-scale + + lib: svm.o +- $(CXX) -shared -dynamiclib svm.o -o libsvm.so.$(SHVER) ++ $(CXX) -shared -Wl,-soname,libsvm.so.$(SHVER) svm.o -o libsvm.so.$(SHVER) ++ ln -sf libsvm.so.$(SHVER) libsvm.so + + svm-predict: svm-predict.c svm.o + $(CXX) $(CFLAGS) svm-predict.c svm.o -o svm-predict -lm +@@ -16,4 +45,65 @@ svm-scale: svm-scale.c + 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 ${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} ++ install -m 755 libsvm.so.$(SHVER) ${LIB_INSTDIR} ++# install package libsvm-devel ++ 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 ++ifneq ("${NO_JAVA}","NO_JAVA") ++ 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 ++# 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 ${INSTDIR}/bin ++ install -m 755 svm-toy/qt/svm-toy-qt ${INSTDIR}/bin ++# install examples ++ mkdir -p ${INSTDIR}/share/libsvm/examples ++ install -m 644 heart_scale ${INSTDIR}/share/libsvm/examples ++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 ++ifneq ("${NO_JAVA}","NO_JAVA") ++ ${MAKE} -C java uninstall ++endif ++ rm -f ${INSTDIR}/bin/svm-toy-gtk ++ rm -f ${INSTDIR}/bin/svm-toy-qt diff --git a/libsvm-3.0.pythonDir.patch b/libsvm-3.0.pythonDir.patch new file mode 100644 index 0000000..2471a06 --- /dev/null +++ b/libsvm-3.0.pythonDir.patch @@ -0,0 +1,22 @@ +diff -up ./python/Makefile.pythonDir ./python/Makefile +--- ./python/Makefile.pythonDir 2010-06-16 14:04:46.000000000 +1000 ++++ ./python/Makefile 2010-11-08 11:07:55.950510378 +1000 +@@ -1,4 +1,16 @@ +-all = lib ++PYTHON_PATH ?= python${PYTHON_VERSION}/site-packages/libsvm ++PYTHON_TARGETDIR=${LIB_INSTDIR}/${PYTHON_PATH} + +-lib: ++all: lib ++ ++lib: ../svm.cpp ../svm.h + cd ..; make lib; cd - ++ ++install: all ++ mkdir -p ${PYTHON_TARGETDIR} ++ install -m 755 *.py ${PYTHON_TARGETDIR} ++ install -m 755 ../tools/*.py ${PYTHON_TARGETDIR} ++ ++uninstall: ++ rm -fr ${LIBDIR}/${PYTHON_PATH}all = lib ++ diff --git a/libsvm-3.0.svm-toy.patch b/libsvm-3.0.svm-toy.patch new file mode 100644 index 0000000..5faade5 --- /dev/null +++ b/libsvm-3.0.svm-toy.patch @@ -0,0 +1,70 @@ +diff -up ./svm-toy/gtk/callbacks.cpp.svm-toy ./svm-toy/gtk/callbacks.cpp +--- ./svm-toy/gtk/callbacks.cpp.svm-toy 2010-09-12 22:11:10.000000000 +1000 ++++ ./svm-toy/gtk/callbacks.cpp 2010-11-08 12:04:22.564509303 +1000 +@@ -3,6 +3,7 @@ + #include + #include + #include ++#include + #include "callbacks.h" + #include "interface.h" + #include "../../svm.h" +diff -up ./svm-toy/gtk/Makefile.svm-toy ./svm-toy/gtk/Makefile +--- ./svm-toy/gtk/Makefile.svm-toy 2010-09-12 22:11:10.000000000 +1000 ++++ ./svm-toy/gtk/Makefile 2010-11-08 12:05:58.925509978 +1000 +@@ -1,10 +1,11 @@ + CC? = gcc + CXX? = g++ +-CFLAGS = -Wall -O3 -g `pkg-config --libs gtk+-2.0` +-LIBS = `pkg-config --libs gtk+-2.0` ++CFLAGS = -Wall -O3 -g `pkg-config --cflags --libs gtk+-2.0` ++LOCAL_LIBDIR=../../ ++LIBS = `pkg-config --libs gtk+-2.0` -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 ++ $(CXX) $(CFLAGS) main.o interface.o callbacks.o $(LIBS) -o $@ + + main.o: main.c + $(CC) $(CFLAGS) -c main.c +@@ -15,8 +16,5 @@ interface.o: interface.c interface.h + callbacks.o: callbacks.cpp callbacks.h + $(CXX) $(CFLAGS) -c callbacks.cpp + +-../../svm.o: +- cd ../..; make 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 +diff -up ./svm-toy/qt/Makefile.svm-toy ./svm-toy/qt/Makefile +--- ./svm-toy/qt/Makefile.svm-toy 2008-12-19 16:42:05.000000000 +1000 ++++ ./svm-toy/qt/Makefile 2010-11-08 12:05:43.978510797 +1000 +@@ -1,17 +1,18 @@ + CXX? = g++ +-CFLAGS = -Wall -O3 -I$(INCLUDE) -I$(INCLUDE)/QtGui -lQtGui ++CFLAGS = -Wall -O3 -I$(INCLUDE) `pkg-config --cflags --libs QtGui` + INCLUDE = /usr/include/qt4 +-MOC = /usr/bin/moc-qt4 ++MOC=${MOC_PATH} ++LOCAL_LIBDIR=../../ ++LIBS = `pkg-config --libs gtk+-2.0` -L${LOCAL_LIBDIR} -lsvm + +-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 ++ $(CXX) $(CFLAGS) svm-toy.cpp ${LIBS} -o $@ + + svm-toy.moc: svm-toy.cpp + $(MOC) svm-toy.cpp -o svm-toy.moc + +-../../svm.o: +- cd ../..; make svm.o +- + clean: +- rm -f *~ svm-toy svm-toy.moc ../../svm.o ++ rm -f *~ svm-toy svm-toy.moc + diff --git a/libsvm-3.0.toolsDir.patch b/libsvm-3.0.toolsDir.patch new file mode 100644 index 0000000..1d3d69f --- /dev/null +++ b/libsvm-3.0.toolsDir.patch @@ -0,0 +1,30 @@ +diff -up ./tools/easy.py.toolsDir ./tools/easy.py +--- ./tools/easy.py.toolsDir 2010-11-08 11:42:36.754570359 +1000 ++++ ./tools/easy.py 2010-11-08 11:53:23.724570788 +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/grid.py" + gnuplot_exe = "/usr/bin/gnuplot" + else: + # example for windows +diff -up ./tools/grid.py.toolsDir ./tools/grid.py +--- ./tools/grid.py.toolsDir 2010-11-08 11:42:36.756570467 +1000 ++++ ./tools/grid.py 2010-11-08 11:52:59.144511925 +1000 +@@ -17,7 +17,7 @@ else: + + is_win32 = (sys.platform == 'win32') + if not is_win32: +- svmtrain_exe = "../svm-train" ++ svmtrain_exe = "/usr/bin/svm-train" + gnuplot_exe = "/usr/bin/gnuplot" + else: + # example for windows diff --git a/libsvm.spec b/libsvm.spec index c2072fe..7f4cc8d 100644 --- a/libsvm.spec +++ b/libsvm.spec @@ -1,19 +1,23 @@ Name: libsvm -Version: 2.91 -Release: 2%{?dist} +Version: 3.0 +Release: 1%{?dist} Summary: A Library for Support Vector Machines Group: Development/Libraries License: BSD URL: http://www.csie.ntu.edu.tw/~cjlin/libsvm/ -Source0: %{name}-2.91.tar.gz +Source0: %{name}-%{version}.tar.gz #Source0: http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm.cgi?+http://www.csie.ntu.edu.tw/~cjlin/%{name}+tar.gz Source1: http://www.csie.ntu.edu.tw/~cjlin/libsvm/log 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 -Patch0: %{name}-%{version}.patch +Patch0: %{name}-%{version}.packageMain.patch +Patch1: %{name}-%{version}.pythonDir.patch +Patch2: %{name}-%{version}.javaDir.patch +Patch3: %{name}-%{version}.svm-toy.patch +Patch4: %{name}-%{version}.toolsDir.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root %{!?pyver: %define pyver %(python -c 'import sys; print(sys.version[0:3])')} @@ -33,7 +37,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root %define no_java FALSE %else %define no_java NO_JAVA -Obsoletes: libsvm-java +Obsoletes: libsvm-java < 2.88-1 %endif %description @@ -83,7 +87,7 @@ programs with libsvm in Java. %endif %package svm-toy-gtk -Summary: GTK version of svm-toy (libsvm demostration program) +Summary: GTK version of svm-toy (libsvm demonstration program) Group: Development/Libraries BuildRequires: gtk2-devel BuildRequires: desktop-file-utils @@ -91,11 +95,11 @@ Requires: gtk2 Requires: %{name} = %{version}-%{release} %description svm-toy-gtk -svm-toy is a libsvm demostration program which has a gtk-GUI to +svm-toy is a libsvm demonstration program which has a gtk-GUI to display the derived separating hyperplane. %package svm-toy-qt -Summary: QT version of svm-toy (libsvm demostration program) +Summary: QT version of svm-toy (libsvm demonstration program) Group: Development/Libraries BuildRequires: desktop-file-utils BuildRequires: pkgconfig @@ -105,12 +109,16 @@ Requires: qt4 Requires: %{name} = %{version}-%{release} %description svm-toy-qt -svm-toy is a libsvm demostration program which has a qt-GUI to +svm-toy is a libsvm demonstration program which has a qt-GUI to display the derived separating hyperplane. %prep %setup -q -%patch0 -p0 -b .orig +%patch0 -p0 -b .packageMain +%patch1 -p0 -b .pythonDir +%patch2 -p0 -b .javaDir +%patch3 -p0 -b .svm-toy +%patch4 -p0 -b .toolsDir cp %{SOURCE1} ChangeLog cp %{SOURCE2} . cp %{SOURCE3} . @@ -185,7 +193,7 @@ rm -rf $RPM_BUILD_ROOT %{_bindir}/svm-train %dir %{_datadir}/%{name} %{_datadir}/%{name}/examples -%{_libdir}/%{name}.so.1 +%{_libdir}/%{name}.so.2 %files devel @@ -223,6 +231,15 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Mon Nov 08 2010 Ding-Yi Chen - 3.0-1 +- Fixed the spelling errors of svm-toy-gtk and svm-toy-qt +- Upstream update: + * Move model structure to svm.h + * Two functions for freeing a model (content or the whole model) + * QD from Qfloat to double (better precision because SSE on 64-bit machines less accurate than i387 on 32-bit + * exit status for checkdata.py + * old python interface (swig) is removed + * Wed Jul 21 2010 David Malcolm - 2.91-2 - Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild diff --git a/log b/log index 607ab9d..9d41631 100644 --- a/log +++ b/log @@ -178,10 +178,15 @@ file updated. Java: able to load model from a BufferedReader directly fix grid.py so -log2c can be run under python 2.6 or after +3.0: 2010/09/13 + Move model structure to svm.h + Two functions for freeing a model (content or the whole model) + QD from Qfloat to double (better precision because SSE on 64-bit machines less accurate than i387 on 32-bit + exit status for checkdata.py + old python interface (swig) is removed ------------------ Future plan: ?.?: - old python interface is removed - + merge matlab interface to core libsvm update make.m of matlab interface to use max(...) \ No newline at end of file diff --git a/sources b/sources index d04a0f0..f04e60f 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ aae7a8f7e357e86e1c893b706bb02a63 guide.pdf -aec07b9142ce585c95854ed379538154 libsvm-2.91.tar.gz +016e29668aae8aa6eaeb125c9e23d834 libsvm-3.0.tar.gz