diff --git a/libsvm-2.84-4.patch b/libsvm-2.84-4.patch deleted file mode 100644 index 895770a..0000000 --- a/libsvm-2.84-4.patch +++ /dev/null @@ -1,151 +0,0 @@ -diff -up ./Makefile.orig ./Makefile ---- ./Makefile.orig 2007-08-30 15:29:42.000000000 +1000 -+++ ./Makefile 2007-08-30 15:30:25.000000000 +1000 -@@ -1,7 +1,31 @@ - CXXC = g++ - CFLAGS = -Wall -O3 -+MAKE = make - --all: svm-train svm-predict svm-scale -+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-predict: svm-predict.c svm.o - $(CXXC) $(CFLAGS) svm-predict.c svm.o -o svm-predict -lm -@@ -11,5 +35,45 @@ 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 -+ -+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 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 -+ 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 -+ 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 -+ -+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 -+ - clean: - rm -f *~ svm.o svm-train svm-predict svm-scale -+ ${MAKE} -C python clean -+ -diff -up ./python/Makefile.orig ./python/Makefile ---- ./python/Makefile.orig 2007-08-30 15:29:49.000000000 +1000 -+++ ./python/Makefile 2007-08-30 16:03:46.000000000 +1000 -@@ -2,7 +2,14 @@ CC = g++ - SWIG ?= swig - - #Windows: see ../README ../Makefile.win --PYTHON_INCLUDEDIR ?= /usr/include/python2.4 -+PYTHON_TEMP:=${shell mktemp} -+PYTHON_VERSION:=${shell python -V 2> ${PYTHON_TEMP} ; cat ${PYTHON_TEMP} | awk 'BEGIN {FS= "[ .]"} {printf("%s.%s",$$2,$$3)}'; rm -f ${PYTHON_TEMP}} -+ifndef PYTHON_INCLUDEDIR -+ -+PYTHON_INCLUDEDIR?= /usr/include/python${PYTHON_VERSION} -+ -+endif -+PYTHON_TARGETDIR=${LIB_INSTDIR}/python${PYTHON_VERSION}/site-packages/libsvm - - CFLAGS = -O3 -I$(PYTHON_INCLUDEDIR) -I.. - LDFLAGS = -shared -@@ -28,3 +35,19 @@ clean: - - moreclean: 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 ./tools/grid.py.orig ./tools/grid.py ---- ./tools/grid.py.orig 2007-08-30 15:30:17.000000000 +1000 -+++ ./tools/grid.py 2007-08-30 15:30:25.000000000 +1000 -@@ -11,7 +11,7 @@ from string import find, split, join, at - - 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 -up ./tools/easy.py.orig ./tools/easy.py ---- ./tools/easy.py.orig 2007-08-30 15:30:04.000000000 +1000 -+++ ./tools/easy.py 2007-08-30 15:30:25.000000000 +1000 -@@ -11,10 +11,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 = sys.argv[0].replace("easy.py","grid.py") - gnuplot_exe = "/usr/bin/gnuplot" - else: - # example for windows diff --git a/libsvm-2.84-5.patch b/libsvm-2.84-5.patch new file mode 100644 index 0000000..be92108 --- /dev/null +++ b/libsvm-2.84-5.patch @@ -0,0 +1,239 @@ +diff -up ./Makefile.orig ./Makefile +--- ./Makefile.orig 2007-09-25 10:07:29.000000000 +1000 ++++ ./Makefile 2007-09-25 14:30:10.000000000 +1000 +@@ -1,8 +1,39 @@ + CXXC = g++ + CFLAGS = -Wall -O3 ++MAKE = make ++LIBSVM_VER =2.84 ++export LIBSVM_VER + +-all: svm-train svm-predict svm-scale ++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 +@@ -11,5 +42,53 @@ 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 ++ 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 ++ 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 ++ +diff -up ./java/libsvm/svm_model.java.orig ./java/libsvm/svm_model.java +--- ./java/libsvm/svm_model.java.orig 2007-09-26 10:19:43.000000000 +1000 ++++ ./java/libsvm/svm_model.java 2007-09-26 10:27:36.000000000 +1000 +@@ -4,6 +4,7 @@ + package libsvm; + public class svm_model implements java.io.Serializable + { ++ static final long serialVersionUID = 2709444323471798245L; + svm_parameter param; // parameter + int nr_class; // number of classes, = 2 in regression/one class svm + int l; // total #SV +diff -up ./java/libsvm/svm_node.java.orig ./java/libsvm/svm_node.java +--- ./java/libsvm/svm_node.java.orig 2007-09-26 10:19:51.000000000 +1000 ++++ ./java/libsvm/svm_node.java 2007-09-26 10:27:25.000000000 +1000 +@@ -1,6 +1,7 @@ + package libsvm; + public class svm_node implements java.io.Serializable + { ++ static final long serialVersionUID = 2709444323471798245L; + public int index; + public double value; + } +diff -up ./java/libsvm/svm_problem.java.orig ./java/libsvm/svm_problem.java +--- ./java/libsvm/svm_problem.java.orig 2007-09-26 10:20:42.000000000 +1000 ++++ ./java/libsvm/svm_problem.java 2007-09-26 10:26:05.000000000 +1000 +@@ -1,6 +1,7 @@ + package libsvm; + public class svm_problem implements java.io.Serializable + { ++ static final long serialVersionUID = -4451389443706847272L; + public int l; + public double[] y; + public svm_node[][] x; +diff -up ./java/libsvm/svm_parameter.java.orig ./java/libsvm/svm_parameter.java +--- ./java/libsvm/svm_parameter.java.orig 2007-09-26 10:20:23.000000000 +1000 ++++ ./java/libsvm/svm_parameter.java 2007-09-26 10:25:14.000000000 +1000 +@@ -1,6 +1,7 @@ + package libsvm; + public class svm_parameter implements Cloneable,java.io.Serializable + { ++ static final long serialVersionUID = 2709444323471798245L; + /* svm_type */ + public static final int C_SVC = 0; + public static final int NU_SVC = 1; +diff -up ./java/libsvm/svm.m4.orig ./java/libsvm/svm.m4 +diff -up ./java/Makefile.orig ./java/Makefile +--- ./java/Makefile.orig 2007-09-25 11:10:21.000000000 +1000 ++++ ./java/Makefile 2007-09-26 12:42:50.000000000 +1000 +@@ -1,15 +1,17 @@ + .SUFFIXES: .class .java +-FILES = libsvm/svm.class libsvm/svm_model.class libsvm/svm_node.class \ +- libsvm/svm_parameter.class libsvm/svm_problem.class \ ++FILES = libsvm/svm_node.class libsvm/svm_parameter.class \ ++ libsvm/svm_model.class libsvm/svm_problem.class libsvm/svm.class\ + svm_train.class svm_predict.class svm_toy.class + +-#JAVAC = jikes +-#JAVAC_FLAGS = -target 1.1 -source 1.3 +-JAVAC = javac +-JAVAC_FLAGS = ++JAVA_TARGETDIR=${LIB_INSTDIR}/java/libsvm ++JAVAC = ecj ++#JAVAC_FLAGS = -target 1.3 -source 1.3 ++CLASSPATH = . ++#JAVAC_FLAGS = --classpath=${CLASSPATH} ++JAVAC_FLAGS = -classpath ${CLASSPATH} + + all: $(FILES) +- jar cvf libsvm.jar *.class libsvm/*.class ++ gjar cvf libsvm.jar *.class libsvm/*.class + + .java.class: + $(JAVAC) $(JAVAC_FLAGS) $< +@@ -17,8 +19,20 @@ all: $(FILES) + libsvm/svm.java: libsvm/svm.m4 + m4 libsvm/svm.m4 > libsvm/svm.java + ++javadoc: ++ javadoc -d docs *.java libsvm/*.java ++ ++install: ++ mkdir -p ${JAVA_TARGETDIR} ++ install -m 644 libsvm.jar ${JAVA_TARGETDIR} ++ install -m 644 test_applet.html ${JAVA_TARGETDIR} ++# cp -R docs ${JAVA_TARGETDIR} ++uninstall: ++ rm -fr ${JAVA_TARGETDIR} ++ + 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 2007-09-25 11:08:29.000000000 +1000 ++++ ./java/test_applet.html 2007-09-25 11:42:29.000000000 +1000 +@@ -1 +1,3 @@ +- ++ ++ ++ +diff -up ./python/Makefile.orig ./python/Makefile +--- ./python/Makefile.orig 2007-09-25 10:07:34.000000000 +1000 ++++ ./python/Makefile 2007-09-25 11:10:43.000000000 +1000 +@@ -2,7 +2,14 @@ CC = g++ + SWIG ?= swig + + #Windows: see ../README ../Makefile.win +-PYTHON_INCLUDEDIR ?= /usr/include/python2.4 ++PYTHON_TEMP:=${shell mktemp} ++PYTHON_VERSION:=${shell python -V 2> ${PYTHON_TEMP} ; cat ${PYTHON_TEMP} | awk 'BEGIN {FS= "[ .]"} {printf("%s.%s",$$2,$$3)}'; rm -f ${PYTHON_TEMP}} ++ifndef PYTHON_INCLUDEDIR ++ ++PYTHON_INCLUDEDIR?= /usr/include/python${PYTHON_VERSION} ++ ++endif ++PYTHON_TARGETDIR=${LIB_INSTDIR}/python${PYTHON_VERSION}/site-packages/libsvm + + CFLAGS = -O3 -I$(PYTHON_INCLUDEDIR) -I.. + LDFLAGS = -shared +@@ -28,3 +35,19 @@ clean: + + moreclean: 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 --git a/libsvm.spec b/libsvm.spec index e32609a..50ef755 100644 --- a/libsvm.spec +++ b/libsvm.spec @@ -1,6 +1,6 @@ Name: libsvm Version: 2.84 -Release: 4%{?dist} +Release: 5%{?dist} Summary: A Library for Support Vector Machines Group: Development/Libraries @@ -10,7 +10,7 @@ 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: ChangeLog #Source1: http://www.csie.ntu.edu.tw/~cjlin/libsvm/log -Patch0: libsvm-2.84-4.patch +Patch0: libsvm-2.84-5.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: glibc-devel dos2unix @@ -45,6 +45,19 @@ Python tools and interfaces for libsvm. Install this package if you want to develop programs with libsvm in Python. +%package java +Summary: Java tools and interfaces for libsvm. +Group: Development/Libraries +BuildRequires: eclipse-ecj >= 3, libgcj >= 4 +Requires: eclipse-ecj >= 3 +Requires: %{name} = %{version}-%{release} + +%description java +Java tools and interfaces for libsvm. +Install this package if you want to develop +programs with libsvm in Java. + + %prep %setup -q %patch0 -p0 -b .bak @@ -58,13 +71,14 @@ make all DESTDIR=%{_builddir} LIBDIR=%{_libdir} dos2unix -o %{_builddir}/%{name}-%{version}/FAQ.html mv %{_builddir}/%{name}-%{version}/python/README %{_builddir}/%{name}-%{version}/python/README-Python mv %{_builddir}/%{name}-%{version}/tools/README %{_builddir}/%{name}-%{version}/tools/README-Tools +cp %{_builddir}/%{name}-%{version}/README %{_builddir}/%{name}-%{version}/java/README-Java + %install rm -rf $RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT LIBDIR=%{_libdir} - %clean rm -rf $RPM_BUILD_ROOT @@ -86,8 +100,17 @@ rm -rf $RPM_BUILD_ROOT %doc python/README-Python tools/README-Tools %{libsvm_python_dir} +%files java +%doc java/README-Java +#%{_libdir}/java/libsvm/docs +%{_libdir}/java/libsvm/libsvm.jar +%{_libdir}/java/libsvm/test_applet.html %changelog +* Thu Aug 30 2007 Ding-Yi Chen - 2.84-5 +- Split out libsvm-java +- Add libsvm.so + * Thu Aug 30 2007 Ding-Yi Chen - 2.84-4 - Refined description. - Fix the /tmp/python.ver problem