summaryrefslogtreecommitdiffstats
path: root/libraries
diff options
context:
space:
mode:
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
commit2c8ac8b55b79ef2f11694c4024fc2bb451d1444a (patch)
treecb7e170d9a81a0441c1ea5ac5c8381a44fe26873 /libraries
parent90aae2f5fc11fe0ecf0d381958107c9911c38783 (diff)
downloadslackbuilds-2c8ac8b55b79ef2f11694c4024fc2bb451d1444a.tar.gz
slackbuilds-2c8ac8b55b79ef2f11694c4024fc2bb451d1444a.tar.xz
libraries/libsvm: Added (SVM library).
Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'libraries')
-rw-r--r--libraries/libsvm/Makefile.patch93
-rw-r--r--libraries/libsvm/README13
-rw-r--r--libraries/libsvm/doinst.sh13
-rw-r--r--libraries/libsvm/libsvm.SlackBuild137
-rw-r--r--libraries/libsvm/libsvm.info10
-rw-r--r--libraries/libsvm/libsvm.svm-toy-qt5.patch64
-rw-r--r--libraries/libsvm/slack-desc19
-rw-r--r--libraries/libsvm/svm-toy.pngbin0 -> 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 0000000000..ec0257723f
--- /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 0000000000..ccab298e53
--- /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 0000000000..aea0f894eb
--- /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 0000000000..af98763419
--- /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 0000000000..92eb6fa97d
--- /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 0000000000..69e1e3c35b
--- /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 0000000000..0b08010184
--- /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
new file mode 100644
index 0000000000..5e65444cb7
--- /dev/null
+++ b/libraries/libsvm/svm-toy.png
Binary files differ