diff options
author | Giancarlo Dessi <slack@giand.it> | 2024-03-11 07:07:35 +0700 |
---|---|---|
committer | Willy Sudiarto Raharjo <willysr@slackbuilds.org> | 2024-03-11 07:14:21 +0700 |
commit | 2c8ac8b55b79ef2f11694c4024fc2bb451d1444a (patch) | |
tree | cb7e170d9a81a0441c1ea5ac5c8381a44fe26873 /libraries | |
parent | 90aae2f5fc11fe0ecf0d381958107c9911c38783 (diff) |
libraries/libsvm: Added (SVM library).
Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'libraries')
-rw-r--r-- | libraries/libsvm/Makefile.patch | 93 | ||||
-rw-r--r-- | libraries/libsvm/README | 13 | ||||
-rw-r--r-- | libraries/libsvm/doinst.sh | 13 | ||||
-rw-r--r-- | libraries/libsvm/libsvm.SlackBuild | 137 | ||||
-rw-r--r-- | libraries/libsvm/libsvm.info | 10 | ||||
-rw-r--r-- | libraries/libsvm/libsvm.svm-toy-qt5.patch | 64 | ||||
-rw-r--r-- | libraries/libsvm/slack-desc | 19 | ||||
-rw-r--r-- | libraries/libsvm/svm-toy.png | bin | 0 -> 13482 bytes |
8 files changed, 349 insertions, 0 deletions
diff --git a/libraries/libsvm/Makefile.patch b/libraries/libsvm/Makefile.patch new file mode 100644 index 0000000000000..ec0257723f038 --- /dev/null +++ b/libraries/libsvm/Makefile.patch @@ -0,0 +1,93 @@ +--- ./Makefile 2023-07-08 16:08:14.000000000 +0200 ++++ ./Makefile.fix 2024-03-10 09:21:50.249371988 +0100 +@@ -1,7 +1,13 @@ + CXX ?= g++ + CFLAGS = -Wall -Wconversion -O3 -fPIC + SHVER = 3 ++export SHVER + OS = $(shell uname) ++DOT_LIBS = . ++LIBS = -L${DOT_LIBS} -lsvm ++export LIBSVM_VER ++PREFIXDIR ?= /usr ++export PREFIXDIR + ifeq ($(OS),Darwin) + SHARED_LIB_FLAG = -dynamiclib -Wl,-install_name,libsvm.so.$(SHVER) + else +@@ -9,20 +16,69 @@ + endif + + # Uncomment the following lines to enable parallelization with OpenMP +-# CFLAGS += -fopenmp +-# SHARED_LIB_FLAG += -fopenmp ++CFLAGS += -fopenmp ++SHARED_LIB_FLAG += -fopenmp + +-all: svm-train svm-predict svm-scale ++LIBDIR ?= ${PREFIXDIR}/lib ++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-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 + $(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/qt/svm-toy-qt ++ ${MAKE} -C python clean ++ ${MAKE} -C java clean ++svm-python: ++ ${MAKE} -C python ++ ++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 ++# install package svm-toy ++ 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 diff --git a/libraries/libsvm/README b/libraries/libsvm/README new file mode 100644 index 0000000000000..ccab298e53746 --- /dev/null +++ b/libraries/libsvm/README @@ -0,0 +1,13 @@ +LIBSVM is an integrated machine learning software for Support Vector +Machines (SVM). +This library solves C-SVM classification, nu-SVM classification, +one-class-SVM, epsilon-SVM regression, and nu-SVM regression. It also +provides an automatic model selection tool for C-SVM classification. + +The script build and install by default also Python bindings to LIBSVM. +if you are not interested you can disable this option launching the +slackbuild script as following: + + PYTHON=no ./libsvm.SlackBuild + +Dependency python3-scipy is not required if you disable this option. diff --git a/libraries/libsvm/doinst.sh b/libraries/libsvm/doinst.sh new file mode 100644 index 0000000000000..aea0f894eb32b --- /dev/null +++ b/libraries/libsvm/doinst.sh @@ -0,0 +1,13 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi + +if [ -x /usr/bin/update-mime-database ]; then + /usr/bin/update-mime-database usr/share/mime >/dev/null 2>&1 +fi + +if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then + if [ -x /usr/bin/gtk-update-icon-cache ]; then + /usr/bin/gtk-update-icon-cache -f usr/share/icons/hicolor >/dev/null 2>&1 + fi +fi diff --git a/libraries/libsvm/libsvm.SlackBuild b/libraries/libsvm/libsvm.SlackBuild new file mode 100644 index 0000000000000..af98763419b23 --- /dev/null +++ b/libraries/libsvm/libsvm.SlackBuild @@ -0,0 +1,137 @@ +#!/bin/bash + +# Slackware build script for libsvm + +# Copyright 2024 Giancarlo Dessi, Cagliari, IT +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=libsvm +VERSION=${VERSION:-3.32} +BUILD=${BUILD:-1} +TAG=${TAG:-_SBo} +PKGTYPE=${PKGTYPE:-tgz} +SRCVER=${VERSION/./} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + LIBDIRSUFFIX="64" +else + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$SRCVER +tar xvf $CWD/$PRGNAM-$SRCVER.tar.gz +cd $PRGNAM-$SRCVER +cp -a $CWD/svm-toy.png . +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +# Patches extracted and adapted from https://src.fedoraproject.org/rpms/libsvm/tree/f38 +# Thanks to Fedora Packages maintainers +patch -p1 < $CWD/libsvm.svm-toy-qt5.patch +patch -p1 < $CWD/Makefile.patch + +# Fix shared library path for 64bit architecture +if [ "$LIBDIRSUFFIX" = "64" ]; then + sed -i Makefile -e "s/LIBDIR}/LIBDIR}64/g" +fi + +make +make install DESTDIR=$PKG + +# Build and install Python bindings +if [ "${PYTHON:-yes}" = "yes" ]; then + cd python + python3 setup.py install --root=$PKG + cd .. +fi + +rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la + +# Symlink to shared library might be useful +cd $PKG/usr/lib${LIBDIRSUFFIX} +ln -s libsvm.so.3 libsvm.so +cd $TMP/$PRGNAM-$SRCVER + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +#Install the application icon and desktop entry +mkdir -p $PKG/usr/share/icons/hicolor/48x48/apps +cp -a svm-toy.png $PKG/usr/share/icons/hicolor/48x48/apps/svm-toy.png + +mkdir -p $PKG/usr/share/applications +cat << EOF > $PKG/usr/share/applications/svm-toy-qt.desktop +[Desktop Entry] +Type=Application +Name=svm-toy-qt +GenericName=svm-toy QT version +Comment=A simple application to demonstrate libsvm +Exec=svm-toy-qt +Icon=/usr/share/icons/hicolor/48x48/apps/svm-toy.png +Terminal=false +Categories=Education;Science;Math;DataVisualization;Qt +StartupNotify=true + +EOF + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a \ + COPYRIGHT FAQ.html README \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/libraries/libsvm/libsvm.info b/libraries/libsvm/libsvm.info new file mode 100644 index 0000000000000..92eb6fa97dd81 --- /dev/null +++ b/libraries/libsvm/libsvm.info @@ -0,0 +1,10 @@ +PRGNAM="libsvm" +VERSION="3.32" +HOMEPAGE="https://www.csie.ntu.edu.tw/~cjlin/libsvm/" +DOWNLOAD="https://github.com/cjlin1/libsvm/archive/v332/libsvm-332.tar.gz" +MD5SUM="266cc1a17fe7fe9411a3191de6a35c1f" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="python3-scipy" +MAINTAINER="Giancarlo Dessi" +EMAIL="slack@giand.it" diff --git a/libraries/libsvm/libsvm.svm-toy-qt5.patch b/libraries/libsvm/libsvm.svm-toy-qt5.patch new file mode 100644 index 0000000000000..69e1e3c35b8ab --- /dev/null +++ b/libraries/libsvm/libsvm.svm-toy-qt5.patch @@ -0,0 +1,64 @@ +--- ./svm-toy/qt/Makefile ++++ ./svm-toy/qt/Makefile +@@ -1,13 +1,14 @@ + # use ``export QT_SELECT=qt5'' in a command window for using qt5 + # may need to adjust the path of header files + CXX? = g++ +-INCLUDE = /usr/include/x86_64-linux-gnu/qt5 +-CFLAGS = -Wall -O3 -I$(INCLUDE) -I$(INCLUDE)/QtWidgets -I$(INCLUDE)/QtGui -I$(INCLUDE)/QtCore -fPIC -std=c++11 +-LIB = -lQt5Widgets -lQt5Gui -lQt5Core +-MOC = /usr/bin/moc ++INCLUDE = /usr/include/qt5 ++CPP_STD ?= c++11 ++CFLAGS = ${RPM_CFLAGS} -I$(INCLUDE) -I$(INCLUDE)/QtWidgets -I$(INCLUDE)/QtGui -I$(INCLUDE)/QtCore -fPIC -std=${CPP_STD} ++LIB = -fopenmp -lQt5Widgets -lQt5Gui -lQt5Core ++MOC ?= /usr/bin/moc-qt5 + + svm-toy: svm-toy.cpp svm-toy.moc ../../svm.o +- $(CXX) $(CFLAGS) svm-toy.cpp ../../svm.o -o svm-toy $(LIB) ++ $(CXX) $(CFLAGS) svm-toy.cpp ../../svm.o -o svm-toy-qt $(LIB) + + svm-toy.moc: svm-toy.cpp + $(MOC) svm-toy.cpp -o svm-toy.moc +@@ -16,4 +17,4 @@ svm-toy.moc: svm-toy.cpp + make -C ../.. svm.o + + clean: +- rm -f *~ svm-toy svm-toy.moc ../../svm.o ++ rm -f *~ svm-toy-qt svm-toy.moc ../../svm.o + +--- ./svm-toy/qt/svm-toy.cpp ++++ ./svm-toy/qt/svm-toy.cpp +@@ -326,12 +326,12 @@ private slots: + double x,y; + if(sscanf(buf,"%d%*d:%lf%*d:%lf",&v,&x,&y)==3) + { +- point p = {x,y,v}; ++ point p = {x,y,(signed char) v}; + point_list.push_back(p); + } + else if(sscanf(buf,"%lf%*d:%lf",&y,&x)==2) + { +- point p = {x,y,current_value}; ++ point p = {x,y,(signed char) current_value}; + point_list.push_back(p); + } + else +@@ -375,7 +375,7 @@ SvmToyWindow::SvmToyWindow() + SLOT(button_run_clicked())); + + // don't blank the window before repainting +- setAttribute(Qt::WA_NoBackground); ++ setAttribute(Qt::WA_OpaquePaintEvent); + + icon1 = QPixmap(4,4); + icon2 = QPixmap(4,4); +@@ -413,7 +413,7 @@ SvmToyWindow::~SvmToyWindow() + + void SvmToyWindow::mousePressEvent( QMouseEvent* event ) + { +- point p = {(double)event->x()/XLEN, (double)event->y()/YLEN, current_value}; ++ point p = {(double)event->x()/XLEN, (double)event->y()/YLEN,(signed char) current_value}; + point_list.push_back(p); + draw_point(p); + } diff --git a/libraries/libsvm/slack-desc b/libraries/libsvm/slack-desc new file mode 100644 index 0000000000000..0b08010184184 --- /dev/null +++ b/libraries/libsvm/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +libsvm: libsvm (library for Support Vector Machines) +libsvm: +libsvm: LIBSVM is a simple, easy-to-use, and efficient machine learning +libsvm: software for SVM (Support-Vector Machines) classification and +libsvm: regression. +libsvm: +libsvm: Home page: https://www.csie.ntu.edu.tw/~cjlin/libsvm/ +libsvm: +libsvm: +libsvm: +libsvm: diff --git a/libraries/libsvm/svm-toy.png b/libraries/libsvm/svm-toy.png Binary files differnew file mode 100644 index 0000000000000..5e65444cb7540 --- /dev/null +++ b/libraries/libsvm/svm-toy.png |