1. Split libsvm-java out of libsvm package

2. Make libsvm.so
epel8
Ding-Yi Chen 18 years ago
parent a5205db2cb
commit 6f17cf8cf8

@ -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

@ -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 @@
-<APPLET code="svm_toy.class" archive="libsvm.jar" width=300 height=350></APPLET>
+<html>
+<applet code="svm_toy.class" archive="libsvm.jar" width=300 height=350></applet>
+</html>
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
+
+
+

@ -1,6 +1,6 @@
Name: libsvm Name: libsvm
Version: 2.84 Version: 2.84
Release: 4%{?dist} Release: 5%{?dist}
Summary: A Library for Support Vector Machines Summary: A Library for Support Vector Machines
Group: Development/Libraries 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 #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: ChangeLog
#Source1: http://www.csie.ntu.edu.tw/~cjlin/libsvm/log #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) BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: glibc-devel dos2unix BuildRequires: glibc-devel dos2unix
@ -45,6 +45,19 @@ Python tools and interfaces for libsvm.
Install this package if you want to develop Install this package if you want to develop
programs with libsvm in Python. 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 %prep
%setup -q %setup -q
%patch0 -p0 -b .bak %patch0 -p0 -b .bak
@ -58,13 +71,14 @@ make all DESTDIR=%{_builddir} LIBDIR=%{_libdir}
dos2unix -o %{_builddir}/%{name}-%{version}/FAQ.html dos2unix -o %{_builddir}/%{name}-%{version}/FAQ.html
mv %{_builddir}/%{name}-%{version}/python/README %{_builddir}/%{name}-%{version}/python/README-Python mv %{_builddir}/%{name}-%{version}/python/README %{_builddir}/%{name}-%{version}/python/README-Python
mv %{_builddir}/%{name}-%{version}/tools/README %{_builddir}/%{name}-%{version}/tools/README-Tools mv %{_builddir}/%{name}-%{version}/tools/README %{_builddir}/%{name}-%{version}/tools/README-Tools
cp %{_builddir}/%{name}-%{version}/README %{_builddir}/%{name}-%{version}/java/README-Java
%install %install
rm -rf $RPM_BUILD_ROOT rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT LIBDIR=%{_libdir} make install DESTDIR=$RPM_BUILD_ROOT LIBDIR=%{_libdir}
%clean %clean
rm -rf $RPM_BUILD_ROOT rm -rf $RPM_BUILD_ROOT
@ -86,8 +100,17 @@ rm -rf $RPM_BUILD_ROOT
%doc python/README-Python tools/README-Tools %doc python/README-Python tools/README-Tools
%{libsvm_python_dir} %{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 %changelog
* Thu Aug 30 2007 Ding-Yi Chen <dchen@redhat.com> - 2.84-5
- Split out libsvm-java
- Add libsvm.so
* Thu Aug 30 2007 Ding-Yi Chen <dchen@redhat.com> - 2.84-4 * Thu Aug 30 2007 Ding-Yi Chen <dchen@redhat.com> - 2.84-4
- Refined description. - Refined description.
- Fix the /tmp/python.ver problem - Fix the /tmp/python.ver problem

Loading…
Cancel
Save