From f7acaea272ab319a388c812ffd49519502448d55 Mon Sep 17 00:00:00 2001 From: Ding-Yi Chen Date: Jul 20 2016 05:27:36 +0000 Subject: - Upstream update to 3.21 - Fixes Bug 1277450 - libsvm(-java) remove versioned jars from {_javadir} --- diff --git a/.gitignore b/.gitignore index f223af3..c5ed10e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ libsvm-3.91.tar.gz /libsvm-svm-toy-gtk.desktop /libsvm-svm-toy-qt.desktop /libsvm-3.20.tar.gz +/libsvm-3.21.tar.gz diff --git a/libsvm-3.17.pom b/libsvm-3.17.pom index 511b1b2..7b7977b 100644 --- a/libsvm-3.17.pom +++ b/libsvm-3.17.pom @@ -3,7 +3,7 @@ 4.0.0 tw.edu.ntu.csie libsvm - 3.20 + 3.17 jar LIBSVM A Library for Support Vector Machines diff --git a/libsvm-3.20.javaDir.patch b/libsvm-3.20.javaDir.patch deleted file mode 100644 index ed7cf4b..0000000 --- a/libsvm-3.20.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.20.packageMain.patch b/libsvm-3.20.packageMain.patch deleted file mode 100644 index dee23cd..0000000 --- a/libsvm-3.20.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.20.pythonDir.patch b/libsvm-3.20.pythonDir.patch deleted file mode 100644 index ff0991d..0000000 --- a/libsvm-3.20.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.20.svm-toy.patch b/libsvm-3.20.svm-toy.patch deleted file mode 100644 index d2a9274..0000000 --- a/libsvm-3.20.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.20.toolsDir.patch b/libsvm-3.20.toolsDir.patch deleted file mode 100644 index a303895..0000000 --- a/libsvm-3.20.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.javaDir.patch b/libsvm.javaDir.patch new file mode 100644 index 0000000..ed7cf4b --- /dev/null +++ b/libsvm.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.packageMain.patch b/libsvm.packageMain.patch new file mode 100644 index 0000000..dee23cd --- /dev/null +++ b/libsvm.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.pythonDir.patch b/libsvm.pythonDir.patch new file mode 100644 index 0000000..ff0991d --- /dev/null +++ b/libsvm.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.spec b/libsvm.spec index bf33982..28a7613 100644 --- a/libsvm.spec +++ b/libsvm.spec @@ -1,15 +1,15 @@ -%global shver 2 +%define shver 2 %{!?pyver: %global pyver %(python -c 'import sys; print(sys.version[0:3])')} -%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")} -%global libdir_libsvm %{_libdir}/libsvm -%global libsvm_python_dir %{python_sitearch}/libsvm +%{!?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 %global pom_file_name JPP.%{maven_group_id}-%{name}.pom Name: libsvm -Version: 3.20 -Release: 8%{?dist} +Version: 3.21 +Release: 1%{?dist} Summary: A Library for Support Vector Machines Group: Development/Libraries @@ -22,39 +22,39 @@ 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 -Patch3: %{name}-%{version}.svm-toy.patch -Patch4: %{name}-%{version}.toolsDir.patch +Patch0: %{name}.packageMain.patch +Patch1: %{name}.pythonDir.patch +Patch2: %{name}.javaDir.patch +Patch3: %{name}.svm-toy.patch +Patch4: %{name}.toolsDir.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRequires: grep %if 0%{?rhel} != 0 && 0%{?rhel} <= 5 -%global moc_path %{_libdir}/qt4/bin/moc -%global with_vendor "fedora" +%define moc_path %{_libdir}/qt4/bin/moc +%define with_vendor "fedora" %else -%global moc_path %{_bindir}/moc-qt4 +%define moc_path %{_bindir}/moc-qt4 %endif # RHEL6 does not have enable_add_maven_depmap %if 0%{?rhel} != 0 && 0%{?rhel} <= 6 -%global enable_add_maven_depmap FALSE +%define enable_add_maven_depmap FALSE %else -%global enable_add_maven_depmap TRUE +%define enable_add_maven_depmap TRUE %endif %ifnarch ppc ppc64 -%global no_java FALSE +%define no_java FALSE %if 0%{?rhel} <= 6 -%global java_dependency java -%else -%global java_dependency java-headless +%define java_dependency java +%else +%define java_dependency java-headless %endif %else -%global no_java NO_JAVA -%global enable_add_maven_depmap FALSE +%define no_java NO_JAVA +%define enable_add_maven_depmap FALSE Obsoletes: libsvm-java < 2.88-1 %endif @@ -200,16 +200,18 @@ desktop-file-install --delete-original \ %{buildroot}/%{_datadir}/applications/%{name}-svm-toy-qt.desktop %endif +# Python # Fix Bug 646154 - libsvm-python's pth is not set correctly echo 'libsvm' > %{buildroot}/%{python_sitearch}/libsvm.pth - +for p in %{buildroot}%{libsvm_python_dir}/*.py;do + sed -i -e 's|#!/usr/bin/env python|#!%{__python2}|' $p +done # 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 +mv %{buildroot}/%{_javadir}/%{name}.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} @@ -247,6 +249,7 @@ rm -rf %{buildroot} %files +%defattr(-,root,root,-) %doc COPYRIGHT FAQ.html ChangeLog guide.pdf %{_bindir}/svm-predict %{_bindir}/svm-scale @@ -256,11 +259,13 @@ rm -rf %{buildroot} %{_libdir}/%{name}.so.%{shver} %files devel +%defattr(-,root,root,-) %doc README %{_includedir}/%{name}/ %{_libdir}/%{name}.so %files python +%defattr(-,root,root,-) %doc python/README-Python tools/README-Tools %{libsvm_python_dir} %{_bindir}/svm-*.py @@ -272,9 +277,9 @@ rm -rf %{buildroot} %else %files java %endif +%defattr(-,root,root,-) %doc java/README-Java java/test_applet.html %{_javadir}/%{name}.jar -%{_javadir}/%{maven_group_id}/%{name}-%{version}.jar %if "%{enable_add_maven_depmap}" == "FALSE" %{_javadir}/%{maven_group_id}/%{name}.jar %{_mavenpomdir}/%{pom_file_name} @@ -282,29 +287,23 @@ rm -rf %{buildroot} %endif %files svm-toy-gtk +%defattr(-,root,root,-) %doc svm-toy/gtk/README %{_bindir}/svm-toy-gtk %{_datadir}/icons/hicolor/48x48/apps/%{name}-svm-toy-gtk-48.png %{_datadir}/applications/*%{name}-svm-toy-gtk.desktop %files svm-toy-qt +%defattr(-,root,root,-) %doc svm-toy/qt/README %{_bindir}/svm-toy-qt %{_datadir}/icons/hicolor/48x48/apps/%{name}-svm-toy-qt-48.png %{_datadir}/applications/*%{name}-svm-toy-qt.desktop - %changelog -* Tue Jul 19 2016 Fedora Release Engineering - 3.20-8 -- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages - -* Thu Feb 04 2016 Fedora Release Engineering - 3.20-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Fri Dec 25 2015 Björn Esser - 3.20-6 -- Replaced %%define with %%global -- dropped %%defattr -- clean trailing whitespaces +* Wed Jul 20 2016 Ding-Yi Chen - 3.21-1 +- Upstream update to 3.21 +- Fixes Bug 1277450 - libsvm(-java) remove versioned jars from {_javadir} * Wed Jun 17 2015 Fedora Release Engineering - 3.20-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild @@ -339,7 +338,7 @@ rm -rf %{buildroot} * Tue Apr 22 2014 Ding-Yi Chen - 3.18-1 - Upstream update to 3.18 - svm.cpp and svm-scale.c: check return values of fscanf -- matlab interface: Makefile no longer handles octave +- matlab interface: Makefile no longer handles octave because make.m should be used * Fri Mar 28 2014 Michael Simacek - 3.17-4 diff --git a/libsvm.svm-toy.patch b/libsvm.svm-toy.patch new file mode 100644 index 0000000..4fc0982 --- /dev/null +++ b/libsvm.svm-toy.patch @@ -0,0 +1,67 @@ +diff -up ./svm-toy/gtk/Makefile.svm-toy ./svm-toy/gtk/Makefile +--- ./svm-toy/gtk/Makefile.svm-toy 2015-12-14 23:49:17.000000000 +1000 ++++ ./svm-toy/gtk/Makefile 2016-07-20 11:56:30.157119649 +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 2016-07-20 11:56:30.157119649 +1000 ++++ ./svm-toy/qt/Makefile 2016-07-20 13:40:21.876341574 +1000 +@@ -1,17 +1,25 @@ + CXX? = g++ ++-CFLAGS = -Wall -O3 -I$(INCLUDE) -I$(INCLUDE)/QtGui -lQtGui ++-MOC = /usr/bin/moc-qt4 + INCLUDE = /usr/include/qt4 +-CFLAGS = -Wall -O3 -I$(INCLUDE) -I$(INCLUDE)/QtGui -I$(INCLUDE)/QtCore ++SHVER?=2 ++CFLAGS = -Wall -O3 `pkg-config --cflags --libs QtGui` + LIB = -lQtGui -lQtCore +-MOC = /usr/bin/moc-qt4 ++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 $(LIB) ++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 diff --git a/libsvm.toolsDir.patch b/libsvm.toolsDir.patch new file mode 100644 index 0000000..a303895 --- /dev/null +++ b/libsvm.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/log b/log index 85ef1bb..c6074b0 100644 --- a/log +++ b/log @@ -277,3 +277,9 @@ i subroutines to get SVs 3.20: 2014/11/15 matlab interface: fix a bug in libsvmwrite.c introduced in 3.19 (cannot run on windows) + +3.21: 2015/12/14 + pre-built windows exe files changed from 32 to 64 bit + matlab interface: + now use #include "../svm.h" + fix some minor issues in make.m of matlab interface \ No newline at end of file diff --git a/sources b/sources index 2aa72d2..46bd5da 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -b1543809993e2653dd2787f62c3c390a guide.pdf -5f088e5f89da1c65b642300c9c5ea772 libsvm-3.20.tar.gz +e7392f325efd1c6ddacd8e2c8bb023d1 guide.pdf +30d2a0a8043e0f66cb7903b3ce45b3bf libsvm-3.21.tar.gz