0

Compare commits

...

46 Commits

Author SHA1 Message Date
eleksir
7edbacb772 kvirc: add 5.2.8 2025-10-09 21:50:15 +03:00
eleksir
26722242dc keepassxc: change LDFLAGS 2025-10-04 16:43:18 +03:00
eleksir
210dcebc45 htop: add 3.4.1 2025-10-04 16:41:59 +03:00
eleksir
1b56f4ab44 google-go-lang: bump version 1.24.2 -> 1.25.1 2025-10-04 16:39:09 +03:00
eleksir
e8b0196b15 . 2025-10-04 16:36:49 +03:00
eleksir
824969261a znc: bump version 1.9.0 -> 1.10.1, disable mod_perl, as it's broken 2025-08-02 21:01:44 +03:00
eleksir
e952c09449 pcsc-lite: add 1.9.9 2025-08-01 11:46:53 +03:00
eleksir
9e57bffe86 yubico-piv-tool: add 2.7.2 2025-08-01 11:46:53 +03:00
root
3ca0a7444c opensc: add 0.26.1 2025-08-01 11:46:53 +03:00
eleksir
928bdbfe77 gengetopt: add 2.23 2025-08-01 11:46:53 +03:00
eleksir
5421db052e ccid: add 1.4.36 2025-08-01 11:46:30 +03:00
eleksir
fd04e2bd69 weechat: bump version 4.5.1 -> 4.6.3 2025-06-19 22:10:53 +03:00
eleksir
c047d512c6 kernel: bump version 6.12.7 -> 6.12.33 2025-06-19 22:02:23 +03:00
eleksir
892e0d1c81 SpoofDPI: remove completely as it becomes useless 2025-06-19 15:56:31 +03:00
eleksir
8840bab14b ollama: remove completely as it useless 2025-06-19 15:54:54 +03:00
eleksir
dc4e15353f keepassxc: bump version 2.7.9 -> 2.7.10 2025-06-19 15:53:05 +03:00
eleksir
cec480a492 i3: cherrypick couple changes from upstream 2025-06-19 15:50:19 +03:00
eleksir
ba7d7037ac ollama: add 0.6.6 2025-04-29 04:02:22 +03:00
eleksir
1c4f3585af weechat: bump version 4.2.2 -> 4.5.1 2025-04-29 04:01:56 +03:00
eleksir
b9b11a2f2e google-go-lang: bump version 1.23.6 -> 1.24.2 2025-04-15 01:23:25 +03:00
eleksir
5b12aa880f google-go-lang: bump version 1.23.4 -> 1.23.6 2025-04-06 11:56:50 +03:00
eleksir
108eeaf36d kernel: add 6.12.7 2025-01-06 00:43:31 +03:00
eleksir
8185851a04 psi-plus: fix src link/filename 2025-01-06 00:36:49 +03:00
eleksir
8a76b8766e google-go-lang: bump version 1.22.8 -> 1.23.4 2025-01-02 12:57:07 +03:00
eleksir
a74735a396 i3: bump version 4.23 -> 4.24 2025-01-02 12:56:02 +03:00
eleksir
14fc4fca98 chrony: bump 4.5 -> 4.6.1 2024-11-15 23:32:51 +03:00
eleksir
a54facf3ae dmenu: bump 5.1 -> 5.3 2024-11-15 23:32:05 +03:00
eleksir
cfcba5d60d google-go-lang: bump 1.22.6 -> 1.22.8 2024-11-15 23:31:21 +03:00
eleksir
3b6cab77d5 psi-plus: bump 1.5.1886 -> 1.5.2064 2024-11-15 23:30:12 +03:00
eleksir
ddf3dcbc53 tmux: bump 3.4 -> 3.5a 2024-11-15 23:29:06 +03:00
eleksir
d8eb9c54c4 google-go-lang: bump 1.25.5 -> 1.22.6 2024-10-19 09:33:59 +03:00
eleksir
823f2eaa1a SpoofDPI: fix https-proxy premature connection close 2024-10-03 19:17:23 +03:00
eleksir
43128fc1e9 SpoofDPI: add 0.12.0 2024-09-12 20:41:51 +03:00
eleksir
7a2a389f6c gitea: bump 1.20.4 -> 1.22.1 2024-08-09 00:07:06 +03:00
eleksir
4571cff54a google-go-lang: bump 1.21.8 -> 1.22.5 2024-07-24 22:24:21 +03:00
eleksir
5d173b2061 keepassxc: bump 2.7.8 -> 2.7.9 2024-07-06 23:22:54 +03:00
eleksir
8965577b4d docker: bump 24.0.7 -> 26.1.2 2024-07-06 23:05:53 +03:00
eleksir
84355fddd9 docker-cli: bump 24.0.7 -> 26.1.2 2024-07-06 23:05:53 +03:00
eleksir
391817c375 containerd: bump 1.7.8 -> 1.7.16 2024-07-06 23:05:53 +03:00
eleksir
1660b461a5 runc: bump 1.1.10 -> 1.1.12 2024-07-06 23:05:53 +03:00
eleksir
738eec20be speexdsp: add 1.2.1 2024-07-06 23:05:53 +03:00
eleksir
b2f1ef3da1 speex: add 1.2.1 2024-07-06 23:05:53 +03:00
eleksir
0f9b36b691 pulseaudio: add 17.0 2024-07-06 23:05:53 +03:00
eleksir
b939a91294 alsa-utils: add 1.2.11 2024-07-06 23:05:53 +03:00
eleksir
826eeeb93d alsa-plugins: add 1.2.7.1 2024-07-06 23:05:53 +03:00
eleksir
84b176efe2 alsa-lib: add 1.2.11 2024-07-06 23:05:53 +03:00
125 changed files with 27816 additions and 717 deletions

159
alsa-lib/alsa-lib.SlackBuild Executable file
View File

@@ -0,0 +1,159 @@
#!/bin/bash
# Copyright 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016, 2018, 2019, 2020, 2021 Patrick J. Volkerding, Sebeka, MN, USA
# 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)
PKGNAM=alsa-lib
VERSION=${VERSION:-$(echo alsa-lib-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
BUILD=${BUILD:-1}
NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) export ARCH=i586 ;;
arm*) export ARCH=arm ;;
# Unless $ARCH is already set, use uname -m for all other archs:
*) export ARCH=$( uname -m ) ;;
esac
fi
TMP=${TMP:-/tmp}
PKG=$TMP/package-alsa-lib
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "s390" ]; then
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
# If this package is being built for ALSA (no PulseAudio), use the _alsa $TAG:
if [ ! -r /usr/lib${LIBDIRSUFFIX}/pkgconfig/libpulse.pc ]; then
TAG="_alsa"
fi
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PKGNAM-$VERSION-$ARCH-$BUILD$TAG.txz"
exit 0
fi
rm -rf $PKG
mkdir -p $TMP $PKG
cd $TMP
rm -rf alsa-lib-$VERSION
tar xvf $CWD/alsa-lib-$VERSION.tar.?z || exit 1
cd alsa-lib-$VERSION || exit 1
# Fix file missing in 1.1.6:
if [ ! -r src/conf/smixer.conf ]; then
cp -a $CWD/smixer.conf src/conf
fi
# Untar the configuration files. We'll install them later.
( mkdir ucm-and-topology-configs
cd ucm-and-topology-configs
for file in $CWD/alsa-*conf*tar.lz ; do
tar xvf $file
mv $(basename $file | cut -f 1-3 -d -)-*/* .
rmdir $(basename $file | cut -f 1-3 -d -)-*
mv README.md README-$(echo $(basename $file) | cut -f 1-3 -d -)
done
)
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
-exec chmod 755 {} \+ -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \+
CFLAGS="$SLKCFLAGS" \
./configure \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--enable-mixer-modules \
--enable-topology \
--enable-ucm \
--build=$ARCH-slackware-linux || exit 1
make $NUMJOBS || exit 1
make install DESTDIR=$PKG || exit 1
# Don't ship .la files:
rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la
find $PKG | xargs file | grep -e "executable" -e "shared object" \
| grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
mkdir $PKG/etc
if [ "$TAG" = "_alsa" ]; then
# Ship an empty asound.conf for ALSA-only system:
cp -a $CWD/asound.conf.alsa $PKG/etc/asound.conf.new
else
# Redirect to PulseAudio:
cp -a $CWD/asound.conf.pulse $PKG/etc/asound.conf.new
fi
chmod 644 $PKG/etc/asound.conf.new
chown root:root $PKG/etc/asound.conf.new
# Install ucm and topology configs:
( cd ucm-and-topology-configs ; tar cf - . ) | ( cd $PKG/usr/share/alsa ; tar xf -)
# TODO?
# ( cd src/pcm/ext
# make jack
# make jack-install )
mkdir -p $PKG/usr/doc/alsa-lib-$VERSION
cp -a \
INSTALL MEMORY-LEAK NOTES TODO \
$PKG/usr/doc/alsa-lib-$VERSION
cp -a COPYING $PKG/usr/doc/alsa-lib-$VERSION/COPYING.lib
cp -a aserver/COPYING $PKG/usr/doc/alsa-lib-$VERSION/COPYING.aserver
# If there's a ChangeLog, installing at least part of the recent history
# is useful, but don't let it get totally out of control:
if [ -r ChangeLog ]; then
DOCSDIR=$(echo $PKG/usr/doc/*-$VERSION)
cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog
touch -r ChangeLog $DOCSDIR/ChangeLog
fi
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 $TMP/alsa-lib-$VERSION-$ARCH-$BUILD$TAG.txz

1
alsa-lib/alsa-lib.url Normal file
View File

@@ -0,0 +1 @@
ftp://ftp.alsa-project.org/pub

View File

@@ -0,0 +1 @@
# ALSA system-wide config file

View File

@@ -0,0 +1,4 @@
# ALSA system-wide config file
# By default, redirect to PulseAudio:
pcm.default pulse
ctl.default pulse

14
alsa-lib/doinst.sh Normal file
View File

@@ -0,0 +1,14 @@
config() {
NEW="$1"
OLD="$(dirname $NEW)/$(basename $NEW .new)"
# If there's no config file by that name, mv it over:
if [ ! -r $OLD ]; then
mv $NEW $OLD
elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
# toss the redundant copy
rm $NEW
fi
# Otherwise, we leave the .new copy for the admin to consider...
}
config etc/asound.conf.new

19
alsa-lib/slack-desc Normal file
View File

@@ -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 ':'.
|-----handy-ruler------------------------------------------------------|
alsa-lib: alsa-lib (Advanced Linux Sound Architecture library)
alsa-lib:
alsa-lib: The Advanced Linux Sound Architecture (ALSA) provides audio and MIDI
alsa-lib: functionality to the Linux operating system. This is the ALSA library
alsa-lib: (libasound) which is used by audio applications.
alsa-lib:
alsa-lib: For more information, see http://alsa-project.org
alsa-lib:
alsa-lib:
alsa-lib:
alsa-lib:

13
alsa-lib/smixer.conf Normal file
View File

@@ -0,0 +1,13 @@
_full smixer-python.so
usb {
searchl "USB"
lib smixer-usb.so
}
ac97 {
searchl "AC97a:"
lib smixer-ac97.so
}
hda {
searchl "HDA:"
lib smixer-hda.so
}

View File

@@ -0,0 +1,115 @@
#!/bin/bash
# Copyright 2015, 2018 Patrick J. Volkerding, Sebeka, MN, USA
# 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)
PKGNAM=alsa-plugins
VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
BUILD=${BUILD:-3}
NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
TMP=${TMP:-/tmp}
PKG=$TMP/package-$PKGNAM
# Automatically determine the architecture we're building on:
MARCH=$( uname -m )
if [ -z "$ARCH" ]; then
case "$MARCH" in
i?86) export ARCH=i586 ;;
armv7hl) export ARCH=$MARCH ;;
arm*) export ARCH=arm ;;
# Unless $ARCH is already set, use uname -m for all other archs:
*) export ARCH=$MARCH ;;
esac
fi
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
# If this package is being built for ALSA (no PulseAudio), use the _alsa $TAG:
if [ ! -r /usr/lib${LIBDIRSUFFIX}/pkgconfig/libpulse.pc ]; then
TAG="_alsa"
fi
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PKGNAM-$VERSION-$ARCH-$BUILD$TAG.txz"
exit 0
fi
rm -rf $PKG
mkdir -p $TMP $PKG
cd $TMP
rm -rf $PKGNAM-$VERSION
tar xvf $CWD/$PKGNAM-$VERSION.tar.?z || exit 1
cd $PKGNAM-$VERSION || exit 1
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 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \+
CFLAGS="$SLKCFLAGS -DHAVE_STDINT_H -DUSE_LIBSPEEX" \
CXXFLAGS="$SLKCFLAGS -DHAVE_STDINT_H -DUSE_LIBSPEEX" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
--localstatedir=/var \
--with-speex=lib \
--enable-maemo-plugin \
--mandir=/usr/man \
--docdir=/usr/doc/$PKGNAM-$VERSION \
--build=$ARCH-slackware-linux || exit 1
make $NUMJOBS || make || exit 1
make install-strip DESTDIR=$PKG || exit 1
# Remove symlink that's breaking audio:
rm -f $PKG/etc/alsa/conf.d/98-maemo.conf
mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
cp -a \
doc/*.txt doc/README* \
$PKG/usr/doc/$PKGNAM-$VERSION
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cd $PKG
/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD$TAG.txz

19
alsa-plugins/slack-desc Normal file
View File

@@ -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------------------------------------------------------|
alsa-plugins: alsa-plugins (Advanced Linux Sound Architecture Plugins)
alsa-plugins:
alsa-plugins: The Advanced Linux Sound Architecture (ALSA) provides audio and MIDI
alsa-plugins: functionality to the Linux operating system.
alsa-plugins: This package includes plugins for ALSA.
alsa-plugins:
alsa-plugins: Website: http://www.alsa-project.org
alsa-plugins:
alsa-plugins:
alsa-plugins:
alsa-plugins:

144
alsa-utils/alsa-utils.SlackBuild Executable file
View File

@@ -0,0 +1,144 @@
#!/bin/bash
# Copyright 2008, 2009, 2010, 2011, 2015, 2018 Patrick J. Volkerding, Sebeka, MN, USA
# 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)
PKGNAM=alsa-utils
VERSION=${VERSION:-$(echo alsa-utils-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
BUILD=${BUILD:-1}
NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
TMP=${TMP:-/tmp}
PKG=$TMP/package-alsa-utils
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) export ARCH=i586 ;;
arm*) export ARCH=arm ;;
# Unless $ARCH is already set, use uname -m for all other archs:
*) export ARCH=$( uname -m ) ;;
esac
fi
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
exit 0
fi
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
elif [ "$ARCH" = "s390" ]; then
SLKCFLAGS="-O2"
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
elif [ "$ARCH" = "arm" ]; then
SLKCFLAGS="-O2 -march=armv4 -mtune=xscale"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "armel" ]; then
SLKCFLAGS="-O2 -march=armv4t"
LIBDIRSUFFIX=""
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
rm -rf $PKG
mkdir -p $TMP $PKG
cd $TMP
rm -rf alsa-utils-$VERSION
tar xvf $CWD/alsa-utils-$VERSION.tar.?z || exit 1
cd alsa-utils-$VERSION || exit 1
# Better off just disabling alsaconf...
#zcat $CWD/alsa-utils.alsaconf.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
-exec chmod 755 {} \+ -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \+
CFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--mandir=/usr/man \
--sysconfdir=/etc \
--disable-alsaconf \
--build=$ARCH-slackware-linux || exit 1
make $NUMJOBS || make || exit 1
make install DESTDIR=$PKG || exit 1
mkdir -p $PKG/etc/rc.d
cat $CWD/rc.alsa > $PKG/etc/rc.d/rc.alsa.new
chmod 0644 $PKG/etc/rc.d/rc.alsa.new
cat $CWD/rc.alsa-oss > $PKG/etc/rc.d/rc.alsa-oss.new
chmod 0644 $PKG/etc/rc.d/rc.alsa-oss.new
find $PKG | xargs file | grep -e "executable" -e "shared object" \
| grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
# Compress and if needed symlink the man pages:
if [ -d $PKG/usr/man ]; then
( cd $PKG/usr/man
for manpagedir in $(find . -type d -name "man*") ; do
( cd $manpagedir
for eachpage in $( find . -type l -maxdepth 1) ; do
ln -s $( readlink $eachpage ).gz $eachpage.gz
rm $eachpage
done
gzip -9 *.?
)
done
)
fi
mkdir -p $PKG/usr/doc/alsa-utils-$VERSION
cp -a \
COPYING INSTALL TODO \
seq/aconnect/README.aconnect \
seq/aseqnet/README.aseqnet \
$PKG/usr/doc/alsa-utils-$VERSION
cp -a alsamixer/README $PKG/usr/doc/alsa-utils-$VERSION/README.alsamixer
# If there's a ChangeLog, installing at least part of the recent history
# is useful, but don't let it get totally out of control:
if [ -r ChangeLog ]; then
DOCSDIR=$(echo $PKG/usr/doc/*-$VERSION)
cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog
touch -r ChangeLog $DOCSDIR/ChangeLog
fi
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 $TMP/alsa-utils-$VERSION-$ARCH-$BUILD.txz

View File

@@ -0,0 +1,59 @@
--- ./alsaconf/alsaconf.in.orig 2010-04-16 06:11:06.000000000 -0500
+++ ./alsaconf/alsaconf.in 2010-05-29 21:08:39.000000000 -0500
@@ -50,7 +50,9 @@
}
# Check for GNU/Linux distributions
-if [ -f /etc/SuSE-release ]; then
+if [ -f /etc/slackware-version ]; then
+ distribution="slackware"
+elif [ -f /etc/SuSE-release ]; then
distribution="suse"
suse_version=$(grep 'VERSION = ' /etc/SuSE-release | sed -e s/'VERSION = '//)
elif [ -f /etc/UnitedLinux-release ]; then
@@ -302,10 +304,12 @@
else
if [ "$distribution" = "gentoo" ]; then
cfgfile="/etc/modules.d/alsa"
+elif [ "$distribution" = "slackware" ]; then
+ cfgfile="/etc/modprobe.d/sound.conf"
elif [ "$kernel" = "new" ]; then
cfgfile="/etc/modprobe.conf"
if [ -d /etc/modprobe.d ]; then
- cfgout="/etc/modprobe.d/50-sound.conf"
+ cfgout="/etc/modprobe.d/sound.conf"
cfgoldout="/etc/modprobe.d/sound"
if [ ! -f $cfgout ]; then
modver=$(modprobe -V | sed -e's/^module-init-tools version //')
--- ./alsaconf/alsaconf.8.orig 2010-04-16 06:11:06.000000000 -0500
+++ ./alsaconf/alsaconf.8 2010-05-29 21:07:51.000000000 -0500
@@ -16,8 +16,6 @@
This manual page documents briefly the
.B alsaconf
command.
-This manual page was written for the Debian distribution because the
-original program does not have a manual page.
.PP
\fBAlsaconf\fP is a simple shell script which tries to detect the sound cards
on your system and writes a suitable configuration file for ALSA. It will try
@@ -74,13 +72,6 @@
Set the uid for the ALSA devices (default = 0).
This option is obsolete in the recent ALSA version.
-.SH DEBIAN SPECIFIC
-In Debian, the default gid of the device files is 29 (corresponding to the
-audio group) and the default device mode is 0660.
-
-For the ALSA base package, see also
-.I /usr/share/doc/alsa\-base/
-
.SH SEE ALSO
\fB
alsamixer(1),
@@ -98,5 +89,4 @@
Bernd Kaindl <bk@suse.de> and
Jan Ondrej (SAL) <ondrejj@salstar.sk>
-This manual page was written by Jordi Mallach <jordi@debian.org>,
-for the Debian system (but may be used by others).
+This manual page was written by Jordi Mallach <jordi@debian.org>.

View File

@@ -0,0 +1 @@
ftp://ftp.alsa-project.org/pub

27
alsa-utils/doinst.sh Normal file
View File

@@ -0,0 +1,27 @@
if [ -r etc/asound.state -a ! -r var/lib/alsa/asound.state -a ! -L etc/asound.state ]; then
mv etc/asound.state var/lib/alsa
fi
# Better a dangling symlink than for nobody to know where this went:
rm -f etc/asound.state
( cd etc && ln -sf ../var/lib/alsa/asound.state . )
# Duplicate permissions from any existing rc scripts:
if [ -e etc/rc.d/rc.alsa ]; then
if [ -x etc/rc.d/rc.alsa ]; then
chmod 755 etc/rc.d/rc.alsa.new
else
chmod 644 etc/rc.d/rc.alsa.new
fi
fi
if [ -e etc/rc.d/rc.alsa-oss ]; then
if [ -x etc/rc.d/rc.alsa-oss ]; then
chmod 755 etc/rc.d/rc.alsa-oss.new
else
chmod 644 etc/rc.d/rc.alsa-oss.new
fi
fi
# Move the scripts into place:
mv etc/rc.d/rc.alsa.new etc/rc.d/rc.alsa
mv etc/rc.d/rc.alsa-oss.new etc/rc.d/rc.alsa-oss

87
alsa-utils/rc.alsa Normal file
View File

@@ -0,0 +1,87 @@
#!/bin/sh
# Load the mixer settings and OSS compatibility (if enabled) for ALSA.
# (the Advanced Linux Sound Architecture)
# A function to load the ALSA mixer settings:
load_alsa_mixer() {
if [ -r /var/lib/alsa/asound.state ]; then
echo "Loading ALSA mixer settings: /usr/sbin/alsactl restore"
/usr/sbin/alsactl restore
else
# It's possible a user might not want to set a default sound state.
# In that case, do this: touch /var/lib/alsa/no.asound.state
if [ ! -r /var/lib/alsa/no.asound.state ]; then
echo "Setting default ALSA mixer settings."
# set default mixer volumes for ALSA
# Taken from the alsaconf script.
amixer -s -q <<EOF
set Master 75% unmute
set Master -12dB
set 'Master Mono' 75% unmute
set 'Master Mono' -12dB
set Front 75% unmute
set Front -12dB
set PCM 90% unmute
set PCM 0dB
mixer Synth 90% unmute
mixer Synth 0dB
mixer CD 90% unmute
mixer CD 0dB
# mute mic
set Mic 0% mute
# ESS 1969 chipset has 2 PCM channels
set PCM,1 90% unmute
set PCM,1 0dB
# Trident/YMFPCI/emu10k1
set Wave 100% unmute
set Music 100% unmute
set AC97 100% unmute
# CS4237B chipset:
set 'Master Digital' 75% unmute
# Envy24 chips with analog outs
set DAC 90% unmute
set DAC -12dB
set DAC,0 90% unmute
set DAC,0 -12dB
set DAC,1 90% unmute
set DAC,1 -12dB
# some notebooks use headphone instead of master
set Headphone 75% unmute
set Headphone -12dB
set Playback 100% unmute
# turn off digital switches
set "SB Live Analog/Digital Output Jack" off
set "Audigy Analog/Digital Output Jack" off
EOF
echo "Storing default ALSA mixer settings: /usr/sbin/alsactl store"
/usr/sbin/alsactl store
fi
fi
}
# If udev or something else has loaded the ALSA modules, then
# simply load the mixer settings and make sure the OSS compat
# modules are loaded (if enabled):
if [ -d /proc/asound ]; then
if [ -x /etc/rc.d/rc.alsa-oss ]; then
sh /etc/rc.d/rc.alsa-oss
fi
load_alsa_mixer
else
# If there are ALSA modules defined in /etc/modprobe.d/*, but
# ALSA is not yet loaded, then load the modules now:
DRIVERS=$(modprobe -c | grep -E "^[[:space:]]*alias[[:space:]]+snd-card-[[:digit:]]" | tr -s "[[:blank:]]" " " | cut -d " " -f 3)
if [ ! "$DRIVERS" = "" ]; then
echo "Loading ALSA kernel modules."
for module in $DRIVERS; do
modprobe $module
done
fi
# If ALSA is now up, then load the mixer settings and OSS modules (if enabled):
if [ -d /proc/asound ]; then
if [ -x /etc/rc.d/rc.alsa-oss ]; then
sh /etc/rc.d/rc.alsa-oss
fi
load_alsa_mixer
fi
fi

24
alsa-utils/rc.alsa-oss Normal file
View File

@@ -0,0 +1,24 @@
#!/bin/sh
# Load the ALSA OSS kernel modules to support OSS applications.
# To use this, set this script as executable (chmod 755 rc.alsa-oss)
# and it will be run from the main rc.alsa script. Unless you know
# that something requires OSS support, it is better to leave this
# script disabled. Some applications will try OSS first even though
# they also support ALSA, and will block other applications from
# using audio I/O.
#
# Many programs that use OSS can be run using the aoss wrapper and
# will then use ALSA in a non-blocking way (and will not require
# loading these kernel modules). Consider trying that before enabling
# these modules. (See "man aoss")
if modprobe -c | tr _ - | grep -wq snd-pcm-oss ; then
if ! cat /proc/modules | tr _ - | grep -wq snd-pcm-oss ; then
echo "Loading OSS compatibility modules for ALSA."
# Use -b to enable blacklisting these modules:
modprobe -q -b snd-pcm-oss
modprobe -q -b snd-seq-oss
modprobe -q -b snd-mixer-oss
fi
fi

19
alsa-utils/slack-desc Normal file
View File

@@ -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 ':'.
|-----handy-ruler------------------------------------------------------|
alsa-utils: alsa-utils (Advanced Linux Sound Architecture utilities)
alsa-utils:
alsa-utils: The Advanced Linux Sound Architecture (ALSA) provides audio and MIDI
alsa-utils: functionality to the Linux operating system. This package contains
alsa-utils: command line audio utilities for use with ALSA:
alsa-utils: alsactl (manage soundcard settings)
alsa-utils: arecord/aplay (capture and play audio)
alsa-utils: amixer (adjust mixer settings from the command line)
alsa-utils: alsamixer (an ncurses-based console mixer)
alsa-utils:
alsa-utils: For more information, see http://alsa-project.org

11
ccid/README Normal file
View File

@@ -0,0 +1,11 @@
libccid provides a PC/SC IFD handler implementation for the USB
smart card drivers compliant to the Chip Card Interface Device (CCID)
protocol.
This package is needed to communicate with the CCID smartcard readers
through the PC/SC Lite resource manager (pcscd). It also supports
various Gemplus serial smart card readers.
You will need to edit the pcsc-lite config files to be able to use
serial smart card readers. The INSTALL file in the documentation
directory has all the details.

123
ccid/ccid.SlackBuild Normal file
View File

@@ -0,0 +1,123 @@
#!/bin/bash
# Slackware build script for ccid
# Copyright 2008 Andrew Psaltis <ampsaltis@gmail.com>
# Copyright 2014-2015 LukenShiro, Italy
# 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.
# Modified by Robby Workman <rworkman@slackbuilds.org>
# 11 August 2008 -- Updated to version 1.3.8 (by Andrew Psaltis)
# Modified by Daniel R. <danielrodriguez.es@gmail.com>
# 05 October 2009 -- Updated to version 1.3.11
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=ccid
VERSION=${VERSION:-1.4.36}
BUILD=${BUILD:-1}
TAG=${TAG:-_EXs}
PKGTYPE=${PKGTYPE:-tgz}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
exit 0
fi
TMP=${TMP:-/tmp/$TAG}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
DOCFILES="AUTHORS COPYING INSTALL README.md"
set -e
rm -rf $PKG $TMP/$PRGNAM-$VERSION
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
tar xf $CWD/$PRGNAM-$VERSION.tar.bz2
cd $PRGNAM-$VERSION
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 {} \;
# --enable-udev flag is no longer supported
CFLAGS="$SLKCFLAGS -rdynamic" \
CXXFLAGS="$SLKCFLAGS -rdynamic" \
LDFLAGS="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2 -Wl,-s" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
--localstatedir=/var \
--mandir=/usr/man \
--docdir=/usr/doc/$PRGNAM-$VERSION \
--enable-twinserial \
--enable-static=no \
--enable-composite-as-multislot \
--build=$ARCH-slackware-linux
make -j$(nproc)
make install DESTDIR=$PKG
# Install the udev rules since this is not done automatically.
install -Dpm 0644 src/92_pcscd_ccid.rules $PKG/lib/udev/rules.d/92_pcscd_ccid.rules
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a $DOCFILES $PKG/usr/doc/$PRGNAM-$VERSION
install -Dpm 0644 $CWD/$PRGNAM.SlackBuild $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
find $PKG/usr/doc/$PRGNAM-$VERSION -type f -exec chmod 644 {} \;
install -Dpm 0644 $CWD/slack-desc $PKG/install/slack-desc
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
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE

10
ccid/ccid.info Normal file
View File

@@ -0,0 +1,10 @@
PRGNAM="ccid"
VERSION="1.4.36"
HOMEPAGE="https://ccid.apdu.fr/"
DOWNLOAD="https://ccid.apdu.fr/files/ccid-1.4.36.tar.bz2"
MD5SUM="3108dad76c08648bc253d9286630b0d1"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="pcsc-lite"
MAINTAINER="LukenShiro"
EMAIL="lukenshiro@ngi.it"

19
ccid/slack-desc Normal file
View File

@@ -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------------------------------------------------------|
ccid: ccid (PC/SC driver for USB CCID smart card readers)
ccid:
ccid: libccid provides a PC/SC IFD handler implementation for the USB smart
ccid: card drivers compliant to the Card Chip Interface Device (CCID)
ccid: protocol.
ccid: This package is needed to communicate with the CCID smartcard readers
ccid: through the PC/SC Lite resource manager (pcscd). It also supports
ccid: the GemPC Twin via serial port, and the GemPC PCMCIA and PCI-Express
ccid: cards.
ccid:
ccid: More info at: https://github.com/LudovicRousseau/CCID

View File

@@ -25,7 +25,7 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=chrony
VERSION=${VERSION:-4.5}
VERSION=${VERSION:-4.6.1}
BUILD=${BUILD:-1}
TAG=${TAG:-_EXs}

View File

@@ -1,8 +1,8 @@
PRGNAM="chrony"
VERSION="4.5"
VERSION="4.6.1"
HOMEPAGE="https://chrony-project.org/index.html"
DOWNLOAD="https://chrony-project.org/releases/chrony-4.5.tar.gz"
MD5SUM="fa50d026df54f9919e6a37fae1258c61"
DOWNLOAD="https://chrony-project.org/releases/chrony-4.6.1.tar.gz"
MD5SUM="81a83f54d5f8e1d5fd9afcf8a40c493d"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""

View File

@@ -26,8 +26,8 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=containerd
VERSION=${VERSION:-1.7.8}
GITHASH=${GITHASH:-8e4b0bd}
VERSION=${VERSION:-1.7.16}
GITHASH=${GITHASH:-8303183}
BUILD=${BUILD:-1}
TAG=${TAG:-_EXs}

View File

@@ -1,10 +1,10 @@
PRGNAM="containerd"
VERSION="1.7.8"
VERSION="1.7.16"
HOMEPAGE="https://containerd.io/"
DOWNLOAD="UNSUPPORTED"
MD5SUM=""
DOWNLOAD_x86_64="https://github.com/containerd/containerd/archive/v1.7.8/containerd-1.7.8.tar.gz"
MD5SUM_x86_64="8fdec29052484dd4e11186014dab9f46"
DOWNLOAD_x86_64="https://github.com/containerd/containerd/archive/v1.7.16/containerd-1.7.16.tar.gz"
MD5SUM_x86_64=""
BUILDREQUIRES="google-go-lang"
REQUIRES="runc"
MAINTAINER="Sergei Fedosoff"

View File

@@ -25,7 +25,7 @@
# Modified by Phillip Warner for version >= 4.0
PRGNAM=dmenu
VERSION=${VERSION:-5.1}
VERSION=${VERSION:-5.3}
BUILD=${BUILD:-1}
TAG=${TAG:-_EXs}

View File

@@ -1,8 +1,8 @@
PRGNAM="dmenu"
VERSION="5.1"
VERSION="5.3"
HOMEPAGE="http://tools.suckless.org/dmenu"
DOWNLOAD="http://dl.suckless.org/tools/dmenu-5.1.tar.gz"
MD5SUM="a18dcdaf3bd60e357fa5bb065059f9f6"
DOWNLOAD="http://dl.suckless.org/tools/dmenu-5.3.tar.gz"
MD5SUM="d9c515ea242e412a02c30a09a0752161"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""

View File

@@ -25,8 +25,8 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=docker-cli
VERSION=${VERSION:-24.0.7}
GITHASH=${GITHASH:-afdd53b}
VERSION=${VERSION:-26.1.2}
GITHASH=${GITHASH:-211e74b}
BUILD=${BUILD:-1}
TAG=${TAG:-_EXs}

View File

@@ -1,10 +1,10 @@
PRGNAM="docker-cli"
VERSION="24.0.7"
VERSION="26.1.2"
HOMEPAGE="https://www.docker.com/products/container-runtime"
DOWNLOAD="UNSUPPORTED"
MD5SUM=""
DOWNLOAD_x86_64="https://github.com/docker/cli/archive/v24.0.7/cli-24.0.7.tar.gz"
MD5SUM_x86_64="953bf757e181dec46ee4ac815553f2a6"
DOWNLOAD_x86_64="https://github.com/docker/cli/archive/v26.1.2/cli-26.1.2.tar.gz"
MD5SUM_x86_64="64f33ed93d8ccaa8901497cbf6eadd9c"
BUILDREQUIRES="google-go-lang"
REQUIRES="docker"
MAINTAINER="Sergei Fedosoff"

View File

@@ -26,9 +26,9 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=docker
VERSION=${VERSION:-24.0.7}
VERSION=${VERSION:-26.1.2}
# short hash!
GITHASH=${GITHASH:-311b9ff}
GITHASH=${GITHASH:-ef1912d}
BUILD=${BUILD:-1}
TAG=${TAG:-_EXs}

View File

@@ -1,10 +1,10 @@
PRGNAM="docker"
VERSION="24.0.7"
VERSION="26.1.2"
HOMEPAGE="https://www.docker.com/products/container-runtime"
DOWNLOAD="UNSUPPORTED"
MD5SUM=""
DOWNLOAD_x86_64="https://github.com/moby/moby/archive/v24.0.7/moby-24.0.7.tar.gz"
MD5SUM_x86_64="059ed51462797354f39e630d3d2257ef"
DOWNLOAD_x86_64="https://github.com/moby/moby/archive/v26.1.2/moby-26.1.2.tar.gz"
MD5SUM_x86_64="bce03db33b26c6e92788e1afe4daba38"
REQUIRES="containerd docker-cli tini"
BUILDREQUIRES="google-go-lang"
MAINTAINER="Sergei Fedosoff"

2
gengetopt/README Normal file
View File

@@ -0,0 +1,2 @@
Gengetopt is a tool to write command line option parsing code for C
programs.

View File

@@ -0,0 +1,114 @@
#!/bin/bash
# Slackware build script for gengetopt
# Copyright 2015-2016 Willy Sudiarto Raharjo <willysr@slackbuilds.org>
# Copyright 2025 Sergei Fedosoff <eleksir@gmail.com>
# 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=gengetopt
VERSION=${VERSION:-2.23}
BUILD=${BUILD:-1}
TAG=${TAG:-_EXs}
PKGTYPE=${PKGTYPE:-tgz}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
exit 0
fi
TMP=${TMP:-/tmp/$TAG}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xf $CWD/$PRGNAM-$VERSION.tar.xz
cd $PRGNAM-$VERSION
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 {} \;
export CFLAGS="$SLKCFLAGS -rdynamic"
export CXXFLAGS="$CFLAGS"
export LDFLAGS="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-s "
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
--localstatedir=/var \
--mandir=/usr/man \
--build=$ARCH-slackware-linux
make -j$(nproc)
make install DESTDIR=$PKG
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
mv $PKG/usr/share/info $PKG/usr
rm -f $PKG/usr/info/dir
gzip -9 $PKG/usr/info/*.info*
find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a AUTHORS COPYING INSTALL LICENSE NEWS README THANKS $PKG/usr/doc/$PRGNAM-$VERSION
install -Dpm 0644 $CWD/$PRGNAM.SlackBuild $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
install -Dpm 0644 $CWD/slack-desc $PKG/install/slack-desc
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE

10
gengetopt/gengetopt.info Normal file
View File

@@ -0,0 +1,10 @@
PRGNAM="gengetopt"
VERSION="2.23"
HOMEPAGE="https://www.gnu.org/software/gengetopt"
DOWNLOAD="ftp://ftp.gnu.org/gnu/gengetopt/gengetopt-2.23.tar.xz"
MD5SUM="ea165d618640dbdecb42ae4491337965"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="Willy Sudiarto Raharjo"
EMAIL="willysr@slackbuilds.org"

19
gengetopt/slack-desc Normal file
View File

@@ -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------------------------------------------------------|
gengetopt: gengetopt (Command Line Parser)
gengetopt:
gengetopt: Gengetopt is a tool to write command line option parsing code for
gengetopt: C programs.
gengetopt:
gengetopt:
gengetopt:
gengetopt:
gengetopt: Project URL: https://www.gnu.org/software/gengetopt
gengetopt:
gengetopt:

View File

@@ -23,7 +23,7 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM="gitea"
VERSION="${VERSION:-1.20.4}"
VERSION="${VERSION:-1.22.1}"
BUILD="${BUILD:-1}"
TAG="${TAG:-_EXs}"

View File

@@ -1,8 +1,8 @@
PRGNAM="gitea"
VERSION="1.20.4"
VERSION="1.22.1"
HOMEPAGE="https://github.com/go-gitea/gitea"
DOWNLOAD="https://dl.gitea.com/gitea/1.20.4/gitea-src-1.20.4.tar.gz"
MD5SUM="e4acf5caa7f787545a80d225204a5242"
DOWNLOAD="https://dl.gitea.com/gitea/1.22.1/gitea-src-1.22.1.tar.gz"
MD5SUM="5cabd30d5021be65c241714aa1fdf2fa"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
BUILD_REQUIRES="google-go-lang nodejs"

188
google-go-lang/google-go-lang.SlackBuild Normal file → Executable file
View File

@@ -29,8 +29,14 @@
# SOFTWARE.
PRGNAM=google-go-lang
VERSION=${VERSION:-1.21.8}
BOOTSTRAP_VERSION=1.18.10
VERSION=${VERSION:-1.25.1}
BOOTSTRAP0_VERSION=1.4-bootstrap-20171003
BOOTSTRAP1_VERSION=1.18.10
BOOTSTRAP2_VERSION=1.21.13
BOOTSTRAP3_VERSION=1.22.10
BOOTSTRAP4_VERSION=1.23.8
BOOTSTRAP5_VERSION=1.24.7
BOOTSTRAP6_VERSION=$VERSION
BUILD=${BUILD:-1}
TAG=${TAG:-_EXs}
@@ -62,19 +68,22 @@ else
fi
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
TMP=${TMP:-/tmp/EXs}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
BOOTSTRAP_DIR="${TMP}/bootstrap-go${BOOTSTRAP_VERSION}"
BOOTSTRAP0_DIR="${TMP}/bootstrap-go${BOOTSTRAP0_VERSION}"
BOOTSTRAP1_DIR="${TMP}/bootstrap-go${BOOTSTRAP1_VERSION}"
BOOTSTRAP2_DIR="${TMP}/bootstrap-go${BOOTSTRAP2_VERSION}"
BOOTSTRAP3_DIR="${TMP}/bootstrap-go${BOOTSTRAP3_VERSION}"
BOOTSTRAP4_DIR="${TMP}/bootstrap-go${BOOTSTRAP4_VERSION}"
BOOTSTRAP5_DIR="${TMP}/bootstrap-go${BOOTSTRAP5_VERSION}"
BOOTSTRAP6_DIR="${TMP}/bootstrap-go${BOOTSTRAP6_VERSION}"
set -e
rm -rf $PKG
mkdir -p "$BOOTSTRAP_DIR" $PKG/usr/lib${LIBDIRSUFFIX}/go${VERSION} $OUTPUT
cd "$BOOTSTRAP_DIR"
tar xf $CWD/go${BOOTSTRAP_VERSION}.src.tar.gz
cd go
chown -R root:root .
mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/go${VERSION} $OUTPUT
cd $PKG/usr/lib${LIBDIRSUFFIX}/go${VERSION}
tar xf $CWD/go${VERSION}.src.tar.gz
cd go
@@ -85,28 +94,159 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+
# as of >= go1.5, the cross-compiler does not need to be bootstrap, so the
# compiler need only be compiled for the host OS, which it detects
unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED
ORIG_PATH="${PATH}"
export MAKEFLAGS="-j $(nproc)"
echo ""
echo "Building 0-th bootstrap compiler, ${BOOTSTRAP0_VERSION}"
mkdir -p "${BOOTSTRAP0_DIR}"
pushd "${BOOTSTRAP0_DIR}"
tar xf $CWD/go${BOOTSTRAP0_VERSION}.tar.gz
pushd go
chown -R root:root .
unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED
export GOROOT_BOOTSTRAP="/usr" # gcc 5+ is go1.4 API, so we'll bootstrap with it
export GOROOT="$(pwd)"
export GOROOT_FINAL="${BOOTSTRAP1_DIR}/go"
pushd src
LC_ALL=C ./make.bash
$GOROOT/bin/go install std
popd
popd
popd
echo ""
echo "Building 1-st bootstrap compiler, ${BOOTSTRAP1_VERSION}"
mkdir -p "${BOOTSTRAP1_DIR}"
pushd "${BOOTSTRAP1_DIR}"
tar xf $CWD/go${BOOTSTRAP1_VERSION}.src.tar.gz
pushd go
chown -R root:root .
export PATH="${BOOTSTRAP0_DIR}/go/bin:${ORIG_PATH}"
unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED
export GOROOT_BOOTSTRAP="$BOOTSTRAP0_DIR/go"
export GOROOT="$(pwd)"
export GOROOT_FINAL="${BOOTSTRAP1_DIR}/go"
pushd src
LC_ALL=C ./make.bash
$GOROOT/bin/go install -buildmode=exe std
popd
popd
popd
# Time to build 2-nd bootstrap compiler
echo ""
echo "Building 2-nd bootstrap compiler, ${BOOTSTRAP2_VERSION}"
mkdir -p "${BOOTSTRAP2_DIR}"
pushd "$BOOTSTRAP2_DIR"
tar xf "${CWD}/go${BOOTSTRAP2_VERSION}.src.tar.gz"
pushd go
chown -R root:root .
export PATH="${BOOTSTRAP1_DIR}/go/bin:${ORIG_PATH}"
unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED
export GOROOT_BOOTSTRAP="$BOOTSTRAP1_DIR/go"
export GOROOT="$(pwd)"
export GOROOT_FINAL="${BOOTSTRAP2_DIR}/go"
pushd src
LC_ALL=C ./make.bash
$GOROOT/bin/go install -buildmode=exe std
popd
popd
popd
# Time to build 3-rd bootstrap compiler
echo ""
echo "Building 3-rd bootstrap compiler, ${BOOTSTRAP3_VERSION}"
mkdir -p "${BOOTSTRAP3_DIR}"
pushd "$BOOTSTRAP3_DIR"
tar xf "${CWD}/go${BOOTSTRAP3_VERSION}.src.tar.gz"
pushd go
chown -R root:root .
export PATH="${BOOTSTRAP2_DIR}/go/bin:${ORIG_PATH}"
unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED
export GOROOT_BOOTSTRAP="$BOOTSTRAP2_DIR/go"
export GOROOT="$(pwd)"
export GOROOT_FINAL="${BOOTSTRAP3_DIR}/go"
pushd src
LC_ALL=C ./make.bash
$GOROOT/bin/go install -buildmode=exe std
popd
popd
popd
# Time to build 4-th bootstrap compiler
echo ""
echo "Building 4-th bootstrap compiler, ${BOOTSTRAP4_VERSION}"
mkdir -p "${BOOTSTRAP4_DIR}"
pushd "$BOOTSTRAP4_DIR"
tar xf "${CWD}/go${BOOTSTRAP4_VERSION}.src.tar.gz"
pushd go
chown -R root:root .
export PATH="${BOOTSTRAP3_DIR}/go/bin:${ORIG_PATH}"
unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED
export GOROOT_BOOTSTRAP="$BOOTSTRAP3_DIR/go"
export GOROOT="$(pwd)"
export GOROOT_FINAL="${BOOTSTRAP4_DIR}/go"
pushd src
LC_ALL=C ./make.bash
$GOROOT/bin/go install -buildmode=exe std
popd
popd
popd
# Time to build 5-th bootstrap compiler
echo ""
echo "Building 5-th bootstrap compiler, ${BOOTSTRAP5_VERSION}"
mkdir -p "${BOOTSTRAP5_DIR}"
pushd "$BOOTSTRAP5_DIR"
tar xf "${CWD}/go${BOOTSTRAP5_VERSION}.src.tar.gz"
pushd go
chown -R root:root .
export PATH="${BOOTSTRAP4_DIR}/go/bin:${ORIG_PATH}"
unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED
export GOROOT_BOOTSTRAP="$BOOTSTRAP4_DIR/go"
export GOROOT="$(pwd)"
export GOROOT_FINAL="${BOOTSTRAP5_DIR}/go"
pushd src
LC_ALL=C ./make.bash
$GOROOT/bin/go install -buildmode=exe std
popd
popd
popd
# Time to build 6-th bootstrap compiler
echo ""
echo "Building 6-th bootstrap compiler, ${BOOTSTRAP6_VERSION}"
mkdir -p "${BOOTSTRAP6_DIR}"
pushd "$BOOTSTRAP6_DIR"
tar xf "${CWD}/go${BOOTSTRAP6_VERSION}.src.tar.gz"
pushd go
chown -R root:root .
export PATH="${BOOTSTRAP5_DIR}/go/bin:${ORIG_PATH}"
unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED
export GOROOT_BOOTSTRAP="$BOOTSTRAP5_DIR/go"
export GOROOT="$(pwd)"
export GOROOT_FINAL="${BOOTSTRAP6_DIR}/go"
pushd src
LC_ALL=C ./make.bash
$GOROOT/bin/go install -buildmode=exe std
popd
popd
popd
# Now go requires at least 1.17.something api to build, so we have to bootstrap bootstrap compiler
cd "${BOOTSTRAP_DIR}/go"
export GOROOT_BOOTSTRAP="/usr" # gcc 5+ is go1.4 API, so we'll bootstrap with it
export GOROOT="$(pwd)"
export GOROOT_FINAL="${BOOTSTRAP_DIR}/go"
cd src
LC_ALL=C ./make.bash
$GOROOT/bin/go install std
# Time to build target compiler
export PATH="${TMP}/bootstrap-go/go/bin:${PATH}"
echo ""
echo "Building target compiler, ${BOOTSTRAP6_VERSION}"
export PATH="${BOOTSTRAP6_DIR}/go/bin:${PATH}"
cd "$PKG/usr/lib${LIBDIRSUFFIX}/go${VERSION}/go"
unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED
export GOROOT_BOOTSTRAP="$BOOTSTRAP_DIR/go"
export GOROOT_BOOTSTRAP="$BOOTSTRAP6_DIR/go"
export GOROOT="$(pwd)"
export GOROOT_FINAL="/usr/lib${LIBDIRSUFFIX}/go${VERSION}/go"
export GO_LDFLAGS="-s -w"
export GO_GCFLAGS="-trimpath"
export GO_GCFLAGS="-trimpath -buildvcs=false"
cd src
@@ -119,7 +259,7 @@ else
fi
# As of go1.5, golang supports shared libraries, so generate them for use.
$GOROOT/bin/go install -buildmode=shared std
$GOROOT/bin/go install -ldflags="-s -w" -a -gcflags=all=-l -trimpath std
cd ..

View File

@@ -1,8 +1,8 @@
PRGNAM="google-go-lang"
VERSION="1.21.8"
VERSION="1.25.1"
HOMEPAGE="https://go.dev/"
DOWNLOAD="https://go.dev/dl/go1.18.10.src.tar.gz https://go.dev/dl/go1.21.8.src.tar.gz"
MD5SUM="002b4daec72ab396dc023a5ec445a68a 02711c04f9fbe4087ab54805458a2a9d"
DOWNLOAD="https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz https://go.dev/dl/go1.18.10.src.tar.gz https://go.dev/dl/go1.21.13.src.tar.gz https://go.dev/dl/go1.22.10.src.tar.gz https://go.dev/dl/go1.23.8.src.tar.gz https://go.dev/dl/go1.24.7.src.tar.gz https://go.dev/dl/go1.25.1.src.tar.gz"
MD5SUM="dbf727a4b0e365bf88d97cbfde590016 002b4daec72ab396dc023a5ec445a68a 3454362fc56df5020920e43fee2776ab 49b9eb43b62c1bdd9b5af72f61860e2d e72f3d3ecc20466d7721b1892142d900 52eea261435dcd9fe447ce092f156519 86ac635cc05683ae97c77bbeae5bd884"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""

11
haproxy/README Normal file
View File

@@ -0,0 +1,11 @@
HAProxy is a free, very fast and reliable solution offering high
availability, load balancing, and proxying for TCP and HTTP-based
applications. It is particularly suited for very high traffic web sites.
Note that a default configuration file is no longer provided at
/etc/haproxy/haproxy.cfg. See /usr/doc/haproxy-*/examples
for some sample configuration files. The directory also contains
example files for logging.
The script supports optional variables for Lua, PCRE and QUIC.
See README.SLACKWARE for more information.

94
haproxy/README.SLACKWARE Normal file
View File

@@ -0,0 +1,94 @@
--------
Compiling, optional dependencies and variables
--------
This SlackBuild script supports additional variables.
1) Lua support
Lua is an optional dependency. Pass LUA=yes to this script
to enable Lua support.
2) Custom Perl Compatible Regular Expressions
Perl Compatible Regular Expressions version 2 without JIT
support is enabled by default. You can change this by passing
PCRE= to this script.
Currently supported settings are listed in the Makefile.
For example:
* Use PCRE=PCRE2_JIT to use libpcre2 with JIT support.
* Use PCRE=PCRE to use libpcre version 1.
You can also use the variables as they're written in the
Makefile, such as PCRE=USE_PCRE_JIT or PCRE=USE_PCRE=1.
The script will parse them correctly.
3) QUIC support (experimental)
Starting with version 2.6.0, HAProxy supports HTTP/3 over QUIC.
The QUIC support is currently experimental and requires QUICTLS.
OpenSSL package shipped with Slackware 15.0 is not compatible
with QUIC.
Pass QUIC=yes to this script to enable HTTP/3 support.
Check out these links for more information:
* https://github.com/quictls/
* https://www.haproxy.com/blog/announcing-haproxy-2-6/
--------
Logging
--------
If you want to enable logging, please first refer to HAProxy manual
on how to enable logging and how to select which events to log.
HAProxy log forwarding works fine with Slackware's sysklogd.
There are example files located in /usr/doc/haproxy-*/examples
The files are called syslog.example and logrotate.example.
You might want to add something like this to your haproxy.cfg file:
global
log /dev/log local0
Note that rotating logs does not require restarting HAProxy.
Instead, logrotate script should send a HUP signal to syslogger
when rotating. Example script is included in syslog.example.
Rotating has been tested with sysklogd (Slackware default) and
syslog-ng.
--------
Automatic starting/stopping upon system start/shutdown
--------
To start HAProxy automatically when system is booted,
add the following lines to /etc/rc.d/rc.local:
if [ -x /etc/rc.d/rc.haproxy ]; then
/etc/rc.d/rc.haproxy start
fi
To stop HAProxy on system shutdown, add following lines
to /etc/rc.d/rc.local_shutdown
if [ -x /etc/rc.d/rc.haproxy ]; then
/etc/rc.d/rc.haproxy stop
fi
--------
Privileges
--------
Like with the most rc scripts /etc/rc.d/rc.haproxy should be
run as root. You can easily drop process privileges by specifying
another user (and group) in the main configuration file.
Add something like this to haproxy.cfg:
global
user nobody
group nogroup

25
haproxy/doinst.sh Normal file
View File

@@ -0,0 +1,25 @@
config() {
NEW="$1"
OLD="$(dirname $NEW)/$(basename $NEW .new)"
# If there's no config file by that name, mv it over:
if [ ! -r $OLD ]; then
mv $NEW $OLD
elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
# toss the redundant copy
rm $NEW
fi
# Otherwise, we leave the .new copy for the admin to consider...
}
preserve_perms() {
NEW="$1"
OLD="$(dirname $NEW)/$(basename $NEW .new)"
if [ -e $OLD ]; then
cp -a $OLD ${NEW}.incoming
cat $NEW > ${NEW}.incoming
mv ${NEW}.incoming $NEW
fi
config $NEW
}
preserve_perms etc/rc.d/rc.haproxy.new

169
haproxy/haproxy.SlackBuild Normal file
View File

@@ -0,0 +1,169 @@
#!/bin/bash
# Slackware build script for haproxy
# Copyright 2018 T3slider <t3slider@gmail.com>
# All rights reserved.
#
# Copyright 2025 Badchay <badchay@protonmail.com>
# All rights reserved.
#
# Copyright 2025 Sergei Fedosoff <eleksir@gmail.com>
# 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=haproxy
VERSION=${VERSION:-3.2.4}
BUILD=${BUILD:-1}
TAG=${TAG:-_EXs}
PKGTYPE=${PKGTYPE:-tgz}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
exit 0
fi
TMP=${TMP:-/tmp/$TAG}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
# This should work with Slackware-provided kernels, but you may wish to
# use 'generic' instead
TARGET=${TARGET:-linux-glibc}
# Include lua support? (Requires lua)
LUA=${LUA:-no}
# Perl Compatible Regular Expressions version 2 is enabled by default.
# You might want to use libpcre1 and/or JIT-enabled version instead.
PCRE=${PCRE:-PCRE2}
# Include QUIC (HTTP/3) support?
# This requires QUICTLS or wolfSSL.
QUIC=${QUIC:-no}
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
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 {} \;
LUAOPT=""
if [ "$LUA" == "yes" ]; then
LUAOPT="USE_LUA=1"
else
LUAOPT="USE_LUA="
fi
PCREOPT=""
if [ "$PCRE" != "PCRE2" ]; then
PCREOPT=$(echo $PCRE | sed -e 's/USE_//' -e 's/=1//')
else
PCREOPT="PCRE2"
fi
QUICOPT=""
if [ "$QUIC" == "yes" ]; then
LUAOPT="USE_QUIC=1"
else
LUAOPT="USE_QUIC="
fi
make -j$(nproc) \
TARGET=$TARGET \
USE_$PCREOPT=1 \
$QUICOPT \
USE_OPENSSL=1 \
USE_ENGINE=1 \
USE_ZLIB=1 \
USE_NS=1 \
USE_PROMEX=1 \
$LUAOPT \
EXTRA=""
make install \
PREFIX=/usr \
MANDIR=/usr/man \
DOCDIR=/usr/doc/$PRGNAM-$VERSION \
EXTRA="" \
DESTDIR=$PKG
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
find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
install -D -m 0644 $CWD/rc.$PRGNAM $PKG/etc/rc.d/rc.$PRGNAM.new
cp -a CONTRIBUTING LICENSE MAINTAINERS README.md BRANCHES SUBVERS VERDATE VERSION examples \
$PKG/usr/doc/$PRGNAM-$VERSION
# If there's a CHANGELOG, installing at least part of the recent history
# is useful, but don't let it get totally out of control:
if [ -r CHANGELOG ]; then
head -n 1000 CHANGELOG > $PKG/usr/doc/$PRGNAM-$VERSION/CHANGELOG
touch -r CHANGELOG $PKG/usr/doc/$PRGNAM-$VERSION/CHANGELOG
fi
cp $CWD/{syslog.example,logrotate.example} $PKG/usr/doc/$PRGNAM-$VERSION/examples/
mkdir -p $PKG/etc/haproxy
mv $PKG/usr/doc/$PRGNAM-$VERSION/examples/errorfiles $PKG/etc/haproxy/errors
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

10
haproxy/haproxy.info Normal file
View File

@@ -0,0 +1,10 @@
PRGNAM="haproxy"
VERSION="3.2.4"
HOMEPAGE="https://www.haproxy.org/"
DOWNLOAD="https://www.haproxy.org/download/3.2/src/haproxy-3.2.4.tar.gz"
MD5SUM="35a9600a063df8d85fd845dc330cb111"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="Badchay"
EMAIL="badchay@protonmail.com"

View File

@@ -0,0 +1,9 @@
/var/log/haproxy {
notifempty
weekly
missingok
rotate 4
postrotate
/bin/kill -HUP $(cat /run/syslogd.pid 2>/dev/null) 2>/dev/null || true
endscript
}

99
haproxy/rc.haproxy Normal file
View File

@@ -0,0 +1,99 @@
#!/bin/bash
#
# Slackware initialization script for HAProxy.
#
# This script was made by T3slider.
# Slight modifications by Badchay.
#
HAPROXY=/usr/sbin/haproxy
CONFIG=/etc/haproxy/haproxy.cfg
PIDFILE=/run/haproxy.pid
if [[ ! -f $CONFIG && "$1" == "start" ]]; then
echo "No configuration file found. Cannot continue."
echo "The script looks for the configuration file placed in $CONFIG"
exit 1
fi
start() {
if [ -r $PIDFILE ]; then
echo 'HAProxy is already running!'
return
else
echo "Starting HAProxy..."
$HAPROXY -f $CONFIG -D -p $PIDFILE
fi
}
stop() {
if [ ! -r $PIDFILE ]; then
echo 'HAProxy is not running!'
return
fi
echo "Soft-stopping HAProxy..."
kill -USR1 $(cat $PIDFILE)
# Even with the right permissions the PID file will not be removed...
rm -f $PIDFILE
}
force_stop() {
if [ ! -r $PIDFILE ]; then
echo 'HAProxy is not running!'
return
fi
echo "Hard-stopping HAProxy..."
kill $(cat $PIDFILE)
# Even with the right permissions the PID file will not be removed...
rm -f $PIDFILE
}
status() {
if [ ! -r $PIDFILE ]; then
echo "HAProxy is not running."
return
fi
PID=$(cat $PIDFILE)
if [ -z "$PID" ]; then
echo 'PID file is empty! HAProxy does not appear to be running, but there is a stale PID file.'
elif kill -0 $PID; then
echo "HAProxy is running."
else
echo "HAProxy is not running, but there is a stale PID file."
fi
}
checkconfig() {
$HAPROXY -c -q -V -f $CONFIG
}
case "$1" in
'start')
start
;;
'stop')
stop
;;
'force_stop')
force_stop
;;
'restart')
stop
start
;;
'force_restart')
force_stop
start
;;
'status')
status
;;
'checkconfig')
checkconfig
;;
*)
echo "Usage: $0 {start|stop|force_stop|restart|force_restart|status|checkconfig}"
exit 1
;;
esac

19
haproxy/slack-desc Normal file
View File

@@ -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------------------------------------------------------|
haproxy: haproxy (The Reliable, High Performance TCP/HTTP Load Balancer)
haproxy:
haproxy: HAProxy is a free, very fast and reliable reverse-proxy offering high
haproxy: availability, load balancing, and proxying for TCP and HTTP-based
haproxy: applications. It is particularly suited for very high traffic
haproxy: web sites and powers a significant portion of the world's most
haproxy: visited ones.
haproxy:
haproxy:
haproxy: Check out more information on https://www.haproxy.org/
haproxy:

20
haproxy/syslog.example Normal file
View File

@@ -0,0 +1,20 @@
# Note: If you enable local0 logging. You'll probably want to add
# something like local0.none to your /etc/syslogd.conf
#
# Otherwise the logs will be sent to your /var/log/messages file
# as well as the logfile specified below.
#
# An example would be to change the default line
#
# authpriv.none;cron.none;mail.none;news.none -/var/log/messages
# to
# authpriv.none;cron.none;mail.none;news.none;local0.none -/var/log/messages
#
# Move this file to /etc/syslog.d/ with .conf extension
# so syslog will load it automatically.
#
# Also remember to restart sysklogd
# sh /etc/rc.d/rc.syslog restart
#
local0.* -/var/log/haproxy

134
htop/htop.SlackBuild Normal file
View File

@@ -0,0 +1,134 @@
#!/bin/bash
# Copyright 2011, 2016, 2018, 2020, 2025 Patrick J. Volkerding, Sebeka, MN, USA
# 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)
PKGNAM=htop
VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
BUILD=${BUILD:-1}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) export ARCH=i686 ;;
arm*) export ARCH=arm ;;
# Unless $ARCH is already set, use uname -m for all other archs:
*) export ARCH=$( uname -m ) ;;
esac
fi
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
exit 0
fi
NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
if [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=pentium4 -mtune=generic"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -march=x86-64 -mtune=generic -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
TMP=${TMP:-/tmp}
PKG=$TMP/package-$PKGNAM
rm -rf $PKG
mkdir -p $TMP $PKG
cd $TMP
rm -rf $PKGNAM-$VERSION
tar xvf $CWD/$PKGNAM-$VERSION.tar.?z || exit 1
cd $PKGNAM-$VERSION || exit 1
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
-exec chmod 755 {} \+ -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \+
if [ ! -r configure ]; then
if [ -x ./autogen.sh ]; then
NOCONFIGURE=1 ./autogen.sh
else
autoreconf -vif
fi
fi
CFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--sysconfdir=/etc \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--mandir=/usr/man \
--docdir=/usr/doc/$PKGNAM-$VERSION \
--build=$ARCH-slackware-linux || exit 1
make $NUMJOBS || make || exit 1
make install DESTDIR=$PKG || exit 1
find $PKG | xargs file | grep -e "executable" -e "shared object" \
| grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
# Compress and link manpages, if any:
if [ -d $PKG/usr/man ]; then
( cd $PKG/usr/man
for manpagedir in $(find . -type d -name "man*") ; do
( cd $manpagedir
for eachpage in $( find . -type l -maxdepth 1) ; do
ln -s $( readlink $eachpage ).gz $eachpage.gz
rm $eachpage
done
gzip -9 *.?
)
done
)
fi
# Install documentation:
mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
cp -a \
AUTHORS* COPYING* NEWS* README* TODO* \
$PKG/usr/doc/$PKGNAM-$VERSION
# If there's a ChangeLog, installing at least part of the recent history
# is useful, but don't let it get totally out of control:
if [ -r ChangeLog ]; then
DOCSDIR=$(echo $PKG/usr/doc/*-$VERSION)
cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog
touch -r ChangeLog $DOCSDIR/ChangeLog
fi
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cd $PKG
/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz

1
htop/htop.url Normal file
View File

@@ -0,0 +1 @@
https://github.com/htop-dev/htop

19
htop/slack-desc Normal file
View File

@@ -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 ':'.
|-----handy-ruler------------------------------------------------------|
htop: htop (ncurses-based interactive process viewer)
htop:
htop: htop is a free (GPL) ncurses-based process viewer that is similar to
htop: the well-known "top" program, but allows to scroll the list vertically
htop: and horizontally to see all processes and their full command lines.
htop: Tasks related to processes (killing, renicing) can be done without
htop: entering their PIDs.
htop:
htop: htop is developed by Hisham Muhammad.
htop: Homepage: http://hisham.hm/htop/
htop:

View File

@@ -0,0 +1,25 @@
From 2746e0319b03a8a5a02b57a69b1fb47e0a9c22f1 Mon Sep 17 00:00:00 2001
From: Michael Stapelberg <michael@stapelberg.de>
Date: Wed, 6 Nov 2024 19:17:37 +0100
Subject: [PATCH] i3bar: work around weird clang compiler behavior
clang used to not warn (= error, with -Werror) about this line. Oh well.
---
i3bar/src/xcb.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/i3bar/src/xcb.c b/i3bar/src/xcb.c
index 4211123d44..f975826abf 100644
--- a/i3bar/src/xcb.c
+++ b/i3bar/src/xcb.c
@@ -1515,7 +1515,9 @@ static void send_tray_clientmessage(void) {
static void init_tray(void) {
DLOG("Initializing system tray functionality\n");
/* request the tray manager atom for the X11 display we are running on */
- char atomname[strlen("_NET_SYSTEM_TRAY_S") + 11];
+ /* The following line cannot use strlen as that makes compilation fail with
+ * some versions of clang (-Wgnu-folding-constant): */
+ char atomname[18 /* strlen("_NET_SYSTEM_TRAY_S") */ + 11];
snprintf(atomname, strlen("_NET_SYSTEM_TRAY_S") + 11, "_NET_SYSTEM_TRAY_S%d", screen);
xcb_intern_atom_cookie_t tray_cookie;
if (tray_reply == NULL) {

View File

@@ -0,0 +1,30 @@
From 853b0d9161a5f99c8491751590229a449e4076b6 Mon Sep 17 00:00:00 2001
From: Michael Stapelberg <stapelberg@users.noreply.github.com>
Date: Mon, 30 Dec 2024 08:29:29 +0100
Subject: [PATCH] i3bar: fix clang compilation error by using const size_t
(#6349)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Thanks to Shouη (@Shoun2137 on GitHub) for the suggestion.
---
i3bar/src/xcb.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/i3bar/src/xcb.c b/i3bar/src/xcb.c
index f975826abf..146db172e3 100644
--- a/i3bar/src/xcb.c
+++ b/i3bar/src/xcb.c
@@ -1517,8 +1517,9 @@ static void init_tray(void) {
/* request the tray manager atom for the X11 display we are running on */
/* The following line cannot use strlen as that makes compilation fail with
* some versions of clang (-Wgnu-folding-constant): */
- char atomname[18 /* strlen("_NET_SYSTEM_TRAY_S") */ + 11];
- snprintf(atomname, strlen("_NET_SYSTEM_TRAY_S") + 11, "_NET_SYSTEM_TRAY_S%d", screen);
+ const size_t systray_len = strlen("_NET_SYSTEM_TRAY_S") + 11;
+ char atomname[systray_len];
+ snprintf(atomname, systray_len, "_NET_SYSTEM_TRAY_S%d", screen);
xcb_intern_atom_cookie_t tray_cookie;
if (tray_reply == NULL) {
tray_cookie = xcb_intern_atom(xcb_connection, 0, strlen(atomname), atomname);

View File

@@ -1,454 +0,0 @@
From b660d6a902cf44be22c434101dd2a4e6743e26bc Mon Sep 17 00:00:00 2001
From: sethpollen <seth.pollen@gmail.com>
Date: Mon, 22 Jan 2024 13:34:40 -0600
Subject: [PATCH] Add support for _NET_WM_STATE_MAXIMIZED_{HORZ, VERT} (#5840)
If a window occupies the entirety of its workspace vertically and/or horizontally, pass it the _NET_WM_STATE_MAXIMIZED_{HORZ, VERT} atoms. This helps applications like Google Chrome draw the tab bar correctly and handle tab clicks correctly (see https://crbug.com/1495853).
This change is based on work from @yshui in #2380.
---
include/con.h | 16 +++
include/i3-atoms_NET_SUPPORTED.xmacro.h | 2 +
.../changes/2-net-wrm-state-maximized | 1 +
src/con.c | 59 ++++++++++
src/x.c | 41 +++++++
testcases/lib/i3test.pm.in | 15 +--
testcases/t/158-wm_take_focus.t | 7 +-
testcases/t/283-net-wm-state-hidden.t | 23 +---
testcases/t/295-net-wm-state-focused.t | 15 ++-
testcases/t/551-net-wm-state-maximized.t | 104 ++++++++++++++++++
10 files changed, 245 insertions(+), 38 deletions(-)
create mode 100644 release-notes/changes/2-net-wrm-state-maximized
create mode 100644 testcases/t/551-net-wm-state-maximized.t
diff --git a/include/con.h b/include/con.h
index e1bb6813af..52f588b8bc 100644
--- a/include/con.h
+++ b/include/con.h
@@ -83,6 +83,22 @@ bool con_is_split(Con *con);
*/
bool con_is_hidden(Con *con);
+/**
+ * Returns true if the container is maximized in the given orientation.
+ *
+ * If the container is floating or fullscreen, it is not considered maximized.
+ * Otherwise, it is maximized if it doesn't share space with any other
+ * container in the given orientation. For example, if a workspace contains
+ * a single splitv container with three children, none of them are considered
+ * vertically maximized, but they are all considered horizontally maximized.
+ *
+ * Passing "maximized" hints to the application can help it make the right
+ * choices about how to draw its borders. See discussion in
+ * https://github.com/i3/i3/pull/2380.
+ *
+ */
+bool con_is_maximized(Con *con, orientation_t orientation);
+
/**
* Returns whether the container or any of its children is sticky.
*
diff --git a/include/i3-atoms_NET_SUPPORTED.xmacro.h b/include/i3-atoms_NET_SUPPORTED.xmacro.h
index b491da98a6..90d03c20e0 100644
--- a/include/i3-atoms_NET_SUPPORTED.xmacro.h
+++ b/include/i3-atoms_NET_SUPPORTED.xmacro.h
@@ -11,6 +11,8 @@ xmacro(_NET_WM_STATE_DEMANDS_ATTENTION) \
xmacro(_NET_WM_STATE_MODAL) \
xmacro(_NET_WM_STATE_HIDDEN) \
xmacro(_NET_WM_STATE_FOCUSED) \
+xmacro(_NET_WM_STATE_MAXIMIZED_VERT) \
+xmacro(_NET_WM_STATE_MAXIMIZED_HORZ) \
xmacro(_NET_WM_STATE) \
xmacro(_NET_WM_WINDOW_TYPE) \
xmacro(_NET_WM_WINDOW_TYPE_NORMAL) \
diff --git a/release-notes/changes/2-net-wrm-state-maximized b/release-notes/changes/2-net-wrm-state-maximized
new file mode 100644
index 0000000000..1a3268c55d
--- /dev/null
+++ b/release-notes/changes/2-net-wrm-state-maximized
@@ -0,0 +1 @@
+pass _NET_WM_STATE_MAXIMIZED_{HORZ, VERT} to tiled windows
diff --git a/src/con.c b/src/con.c
index 5ecc270073..72f3ad6e22 100644
--- a/src/con.c
+++ b/src/con.c
@@ -419,6 +419,65 @@ bool con_is_hidden(Con *con) {
return false;
}
+/*
+ * Returns true if the container is maximized in the given orientation.
+ *
+ * If the container is floating or fullscreen, it is not considered maximized.
+ * Otherwise, it is maximized if it doesn't share space with any other
+ * container in the given orientation. For example, if a workspace contains
+ * a single splitv container with three children, none of them are considered
+ * vertically maximized, but they are all considered horizontally maximized.
+ *
+ * Passing "maximized" hints to the application can help it make the right
+ * choices about how to draw its borders. See discussion in
+ * https://github.com/i3/i3/pull/2380.
+ */
+bool con_is_maximized(Con *con, orientation_t orientation) {
+ /* Fullscreen containers are not considered maximized. */
+ if (con->fullscreen_mode != CF_NONE) {
+ return false;
+ }
+
+ /* Look up the container layout which corresponds to the given
+ * orientation. */
+ layout_t layout;
+ switch (orientation) {
+ case HORIZ:
+ layout = L_SPLITH;
+ break;
+ case VERT:
+ layout = L_SPLITV;
+ break;
+ default:
+ assert(false);
+ }
+
+ /* Go through all parents, stopping once we reach the workspace node. */
+ Con *current = con;
+ while (true) {
+ Con *parent = current->parent;
+ if (parent == NULL || parent->type == CT_WORKSPACE) {
+ /* We are done searching. We found no reason that the container
+ * should not be considered maximized. */
+ return true;
+ }
+
+ if (parent->layout == layout && con_num_children(parent) > 1) {
+ /* The parent has a split in the indicated direction, which
+ * means none of its children are maximized in that direction. */
+ return false;
+ }
+
+ /* Floating containers and their children are not considered
+ * maximized. */
+ if (parent->type == CT_FLOATING_CON) {
+ return false;
+ }
+
+ current = parent;
+ }
+}
+
/*
* Returns whether the container or any of its children is sticky.
*
diff --git a/src/x.c b/src/x.c
index 48105b03b1..a3a6aec516 100644
--- a/src/x.c
+++ b/src/x.c
@@ -41,6 +41,8 @@ typedef struct con_state {
bool unmap_now;
bool child_mapped;
bool is_hidden;
+ bool is_maximized_vert;
+ bool is_maximized_horz;
/* The con for which this state is. */
Con *con;
@@ -816,6 +818,44 @@ static void set_hidden_state(Con *con) {
state->is_hidden = should_be_hidden;
}
+/*
+ * Sets or removes _NET_WM_STATE_MAXIMIZE_{HORZ, VERT} on con
+ *
+ */
+static void set_maximized_state(Con *con) {
+ if (!con->window) {
+ return;
+ }
+
+ con_state *state = state_for_frame(con->frame.id);
+
+ const bool con_maximized_horz = con_is_maximized(con, HORIZ);
+ if (con_maximized_horz != state->is_maximized_horz) {
+ DLOG("setting _NET_WM_STATE_MAXIMIZED_HORZ for con %p(%s) to %d\n", con, con->name, con_maximized_horz);
+
+ if (con_maximized_horz) {
+ xcb_add_property_atom(conn, con->window->id, A__NET_WM_STATE, A__NET_WM_STATE_MAXIMIZED_HORZ);
+ } else {
+ xcb_remove_property_atom(conn, con->window->id, A__NET_WM_STATE, A__NET_WM_STATE_MAXIMIZED_HORZ);
+ }
+
+ state->is_maximized_horz = con_maximized_horz;
+ }
+
+ const bool con_maximized_vert = con_is_maximized(con, VERT);
+ if (con_maximized_vert != state->is_maximized_vert) {
+ DLOG("setting _NET_WM_STATE_MAXIMIZED_VERT for con %p(%s) to %d\n", con, con->name, con_maximized_vert);
+
+ if (con_maximized_vert) {
+ xcb_add_property_atom(conn, con->window->id, A__NET_WM_STATE, A__NET_WM_STATE_MAXIMIZED_VERT);
+ } else {
+ xcb_remove_property_atom(conn, con->window->id, A__NET_WM_STATE, A__NET_WM_STATE_MAXIMIZED_VERT);
+ }
+
+ state->is_maximized_vert = con_maximized_vert;
+ }
+}
+
/*
* Set the container frame shape as the union of the window shape and the
* shape of the frame borders.
@@ -1121,6 +1161,7 @@ void x_push_node(Con *con) {
}
set_hidden_state(con);
+ set_maximized_state(con);
/* Handle all children and floating windows of this node. We recurse
* in focus order to display the focused client in a stack first when
diff --git a/testcases/lib/i3test.pm.in b/testcases/lib/i3test.pm.in
index 6d73afca7a..44d4a3d41b 100644
--- a/testcases/lib/i3test.pm.in
+++ b/testcases/lib/i3test.pm.in
@@ -53,7 +53,7 @@ our @EXPORT = qw(
kill_all_windows
events_for
listen_for_binding
- is_net_wm_state_focused
+ net_wm_state_contains
cmp_tree
);
@@ -1090,18 +1090,19 @@ sub listen_for_binding {
return $command;
}
-=head2 is_net_wm_state_focused
+=head2 net_wm_state_contains
-Returns true if the given window has the _NET_WM_STATE_FOCUSED atom.
+Returns true if the given window has the given _NET_WM_STATE atom.
- ok(is_net_wm_state_focused($window), '_NET_WM_STATE_FOCUSED set');
+ ok(net_wm_state_contains($window, '_NET_WM_STATE_FOCUSED'),
+ '_NET_WM_STATE_FOCUSED set');
=cut
-sub is_net_wm_state_focused {
- my ($window) = @_;
+sub net_wm_state_contains {
+ my ($window, $atom_name) = @_;
sync_with_i3;
- my $atom = $x->atom(name => '_NET_WM_STATE_FOCUSED');
+ my $atom = $x->atom(name => $atom_name);
my $cookie = $x->get_property(
0,
$window->{id},
diff --git a/testcases/t/158-wm_take_focus.t b/testcases/t/158-wm_take_focus.t
index e9a32cd00a..c779365b3e 100644
--- a/testcases/t/158-wm_take_focus.t
+++ b/testcases/t/158-wm_take_focus.t
@@ -55,8 +55,7 @@ subtest 'Window without WM_TAKE_FOCUS', sub {
my $window = open_window;
ok(!recv_take_focus($window), 'did not receive ClientMessage');
- ok(is_net_wm_state_focused($window), '_NET_WM_STATE_FOCUSED set');
-
+ ok(net_wm_state_contains($window, '_NET_WM_STATE_FOCUSED'), '_NET_WM_STATE_FOCUSED set');
my ($nodes) = get_ws_content($ws);
my $con = shift @$nodes;
ok($con->{focused}, 'con is focused');
@@ -92,7 +91,7 @@ subtest 'Window with WM_TAKE_FOCUS and without InputHint', sub {
$window->map;
ok(!recv_take_focus($window), 'did not receive ClientMessage');
- ok(is_net_wm_state_focused($window), '_NET_WM_STATE_FOCUSED set');
+ ok(net_wm_state_contains($window, '_NET_WM_STATE_FOCUSED'), '_NET_WM_STATE_FOCUSED set');
my ($nodes) = get_ws_content($ws);
my $con = shift @$nodes;
@@ -114,7 +113,7 @@ subtest 'Window with WM_TAKE_FOCUS and unspecified InputHint', sub {
my $window = open_window({ protocols => [ $take_focus ] });
ok(!recv_take_focus($window), 'did not receive ClientMessage');
- ok(is_net_wm_state_focused($window), '_NET_WM_STATE_FOCUSED set');
+ ok(net_wm_state_contains($window, '_NET_WM_STATE_FOCUSED'), '_NET_WM_STATE_FOCUSED set');
my ($nodes) = get_ws_content($ws);
my $con = shift @$nodes;
diff --git a/testcases/t/283-net-wm-state-hidden.t b/testcases/t/283-net-wm-state-hidden.t
index d6c7b2f8b7..0738ee0b99 100644
--- a/testcases/t/283-net-wm-state-hidden.t
+++ b/testcases/t/283-net-wm-state-hidden.t
@@ -20,29 +20,8 @@ use i3test;
use X11::XCB qw(:all);
sub is_hidden {
- sync_with_i3;
- my $atom = $x->atom(name => '_NET_WM_STATE_HIDDEN');
-
my ($con) = @_;
- my $cookie = $x->get_property(
- 0,
- $con->{id},
- $x->atom(name => '_NET_WM_STATE')->id,
- GET_PROPERTY_TYPE_ANY,
- 0,
- 4096
- );
-
- my $reply = $x->get_property_reply($cookie->{sequence});
- my $len = $reply->{length};
- return 0 if $len == 0;
-
- my @atoms = unpack("L$len", $reply->{value});
- for (my $i = 0; $i < $len; $i++) {
- return 1 if $atoms[$i] == $atom->id;
- }
-
- return 0;
+ return net_wm_state_contains($con, '_NET_WM_STATE_HIDDEN');
}
my ($tabA, $tabB, $tabC, $subtabA, $subtabB, $windowA, $windowB);
diff --git a/testcases/t/295-net-wm-state-focused.t b/testcases/t/295-net-wm-state-focused.t
index 68283e9c86..1a9b065eeb 100644
--- a/testcases/t/295-net-wm-state-focused.t
+++ b/testcases/t/295-net-wm-state-focused.t
@@ -23,17 +23,22 @@ my ($windowA, $windowB);
fresh_workspace;
$windowA = open_window;
-ok(is_net_wm_state_focused($windowA), 'a newly opened window that is focused should have _NET_WM_STATE_FOCUSED set');
+ok(net_wm_state_contains($windowA, '_NET_WM_STATE_FOCUSED'),
+ 'a newly opened window that is focused should have _NET_WM_STATE_FOCUSED set');
$windowB = open_window;
-ok(!is_net_wm_state_focused($windowA), 'when a another window is focused, the old window should not have _NET_WM_STATE_FOCUSED set');
-ok(is_net_wm_state_focused($windowB), 'a newly opened window that is focused should have _NET_WM_STATE_FOCUSED set');
+ok(!net_wm_state_contains($windowA, '_NET_WM_STATE_FOCUSED'),
+ 'when a another window is focused, the old window should not have _NET_WM_STATE_FOCUSED set');
+ok(net_wm_state_contains($windowB, '_NET_WM_STATE_FOCUSED'),
+ 'a newly opened window that is focused should have _NET_WM_STATE_FOCUSED set');
# See issue #3495.
cmd 'kill';
-ok(is_net_wm_state_focused($windowA), 'when the second window is closed, the first window should have _NET_WM_STATE_FOCUSED set');
+ok(net_wm_state_contains($windowA, '_NET_WM_STATE_FOCUSED'),
+ 'when the second window is closed, the first window should have _NET_WM_STATE_FOCUSED set');
fresh_workspace;
-ok(!is_net_wm_state_focused($windowA), 'when focus moves to the ewmh support window, no window should have _NET_WM_STATE_FOCUSED set');
+ok(!net_wm_state_contains($windowA, '_NET_WM_STATE_FOCUSED'),
+ 'when focus moves to the ewmh support window, no window should have _NET_WM_STATE_FOCUSED set');
done_testing;
diff --git a/testcases/t/551-net-wm-state-maximized.t b/testcases/t/551-net-wm-state-maximized.t
new file mode 100644
index 0000000000..4db03ade57
--- /dev/null
+++ b/testcases/t/551-net-wm-state-maximized.t
@@ -0,0 +1,104 @@
+#!perl
+# vim:ts=4:sw=4:expandtab
+#
+# Please read the following documents before working on tests:
+# • http://build.i3wm.org/docs/testsuite.html
+# (or docs/testsuite)
+#
+# • http://build.i3wm.org/docs/lib-i3test.html
+# (alternatively: perldoc ./testcases/lib/i3test.pm)
+#
+# • http://build.i3wm.org/docs/ipc.html
+# (or docs/ipc)
+#
+# • https://i3wm.org/downloads/modern_perl_a4.pdf
+# (unless you are already familiar with Perl)
+#
+# Tests for setting and removing the _NET_WM_STATE_MAXIMIZED_VERT and
+# _NET_WM_STATE_MAXIMIZED_HORZ atoms.
+use i3test;
+use X11::XCB qw(:all);
+
+sub maximized_vert {
+ my ($window) = @_;
+ return net_wm_state_contains($window, '_NET_WM_STATE_MAXIMIZED_VERT');
+}
+
+sub maximized_horz {
+ my ($window) = @_;
+ return net_wm_state_contains($window, '_NET_WM_STATE_MAXIMIZED_HORZ');
+}
+
+# Returns true if the given window is maximized in both directions.
+sub maximized_both {
+ my ($window) = @_;
+ return maximized_vert($window) && maximized_horz($window);
+}
+
+# Returns true if the given window is maximized in neither direction.
+sub maximized_neither {
+ my ($window) = @_;
+ return !maximized_vert($window) && !maximized_horz($window);
+}
+
+my ($winA, $winB, $winC);
+fresh_workspace;
+
+$winA = open_window;
+ok(maximized_both($winA), 'if there is just one window, it is maximized');
+
+cmd 'fullscreen enable';
+ok(maximized_neither($winA), 'fullscreen windows are not maximized');
+
+cmd 'fullscreen disable';
+ok(maximized_both($winA), 'disabling fullscreen sets maximized to true again');
+
+cmd 'floating enable';
+ok(maximized_neither($winA), 'floating windows are not maximized');
+
+cmd 'floating disable';
+ok(maximized_both($winA), 'disabling floating sets maximized to true again');
+
+# Open a second window.
+$winB = open_window;
+
+# Windows in stacked or tabbed containers are considered maximized.
+cmd 'layout stacking';
+ok(maximized_both($winA) && maximized_both($winB),
+ 'stacking layout maximizes all windows');
+
+cmd 'layout tabbed';
+ok(maximized_both($winA) && maximized_both($winB),
+ 'tabbed layout maximizes all windows');
+
+# Arrange the two windows with a vertical split.
+cmd 'layout splitv';
+ok(!maximized_vert($winA) && !maximized_vert($winB),
+ 'vertical split means children are not maximized vertically');
+ok(maximized_horz($winA) && maximized_horz($winB),
+ 'children may still be maximized horizontally in a vertical split');
+
+# Arrange the two windows with a horizontal split.
+cmd 'layout splith';
+ok(maximized_vert($winA) && maximized_vert($winB),
+ 'children may still be maximized vertically in a horizontal split');
+ok(!maximized_horz($winA) && !maximized_horz($winB),
+ 'horizontal split means children are not maximized horizontally');
+
+# Add a vertical split within the horizontal split, and open a third window.
+cmd 'split vertical';
+$winC = open_window;
+ok(maximized_vert($winA), 'winA still reaches from top to bottom');
+ok(!maximized_vert($winB) && !maximized_vert($winC),
+ 'winB and winC are split vertically, so they are not maximized vertically');
+ok(!maximized_horz($winA) && !maximized_horz($winB) && !maximized_horz($winC),
+ 'horizontal split means children are not maximized horizontally');
+
+# Change the vertical split container to a tabbed container.
+cmd 'layout tabbed';
+ok(maximized_vert($winA) && maximized_vert($winB) && maximized_vert($winC),
+ 'all windows now reach from top to bottom');
+ok(!maximized_horz($winA) && !maximized_horz($winB) && !maximized_horz($winC),
+ 'horizontal split means children are not maximized horizontally');
+
+done_testing;

View File

@@ -0,0 +1,311 @@
From cfa4cf16bea809c7c715a86c428757e577c85254 Mon Sep 17 00:00:00 2001
From: Sergey Vlasov <sigprof@gmail.com>
Date: Tue, 22 Apr 2025 00:26:17 +0300
Subject: [PATCH] Set `_NET_FRAME_EXTENTS` according to the actual decoration
size (#5944)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Inspired by #5384, but instead of just using the border width, this PR
reports the actual frame extents for the window, which may also include
the title bar (for floating windows and tiled windows in plain split
containers, but not for tiled windows in stacked/tabbed containers).
The existing `con_border_style_rect()` function should already handle
all configuration options which can affect the decoration sizes (if it
does not, that would also show up in other places); its result just
needs to be converted into the format used by the `_NET_FRAME_EXTENTS`
property.
This PR fixes #4292 probably in the best way possible (the reported
`_NET_FRAME_EXTENTS` values should always match the actual sizes of
window frame elements which are actually drawn into the X11 frame window
into which the client window is reparented). The only really problematic
case is with the stacked/tabbed containers, for which the title bar is
actually drawn into a completely separate window, therefore the title
bar size cannot be reported in `_NET_FRAME_EXTENTS` (actually I tried to
calculate the size of those decorations and add it to the top decoration
size, but that did not change the behavior of `picom`).
<details><summary>Large screenshots here (3840×2160)</summary>
Example of configuration with `hide_edge_borders smart` — a single
window does not have borders, so only the top frame size is non-zero:
![2024-03-09_21-41](https://github.com/i3/i3/assets/616082/d2f41206-89f8-465f-ba25-1f51075ba680)
but multiple windows have borders:
![2024-03-09_21-44](https://github.com/i3/i3/assets/616082/db7469e6-50eb-4687-83fd-88481691b361)
Changing border width works too (although with `border normal 8` you can
see that the top border overlaps the title text, because on the i3 side
that border does not really exists, and `picom` just draws it over; also
the pixel sizes reported by `xprop` and `xwininfo` are not identical to
what is specified in i3, because I use 168 dpi on this system, therefore
4 px in the i3 config = 7 dpx):
![2024-03-09_21-48](https://github.com/i3/i3/assets/616082/7f64d217-3218-4d03-ba15-3fe33e6161d1)
Handling of tabbed containers is less perfect though. Here is a single
tabbed container with `hide_edge_borders smart`, so it does not really
have a border — note that all frame extents are zero, and the titlebar
is rounded separately (although it could easily be excluded from
rounding, that does not really help much):
![2024-03-09_22-02](https://github.com/i3/i3/assets/616082/c6ea1106-b1d7-43b8-8354-bc6fbf45d87a)
Once the border actually appears, you may notice that the top part of
the `picom` border actually gets drawn over the top part of the window,
partially obscuring the top line in this terminal (`picom` does not mind
that the top frame size is reported as 0):
![2024-03-09_22-04](https://github.com/i3/i3/assets/616082/eb80fc5c-fa52-43f4-857e-94dc713221bf)
Some examples of floating windows (no major problems there):
![2024-03-09_22-09](https://github.com/i3/i3/assets/616082/3336c1cb-ee48-46ae-ab89-061be46bdb31)
Options like `hide_edge_borders both` work too when gaps are removed
(although the resulting behavior with `picom` is probably not very
useful — the rounded border gets drawn only if all of the left, bottom
and right borders are present):
![2024-03-09_22-15](https://github.com/i3/i3/assets/616082/9961db74-7c49-43f0-a90f-e9ab81474038)
The same with `border pixel 8` (note that windows with only the top
border hidden still get the rounded border treatment by `picom`, but the
border overlaps the top part of the window):
![2024-03-09_22-21](https://github.com/i3/i3/assets/616082/dd0a0fc6-701d-4e01-ba96-f3eb5131c95b)
</details>
---------
Signed-off-by: Sergey Vlasov <sigprof@gmail.com>
Co-authored-by: Orestis Floros <orestisflo@gmail.com>
---
.../changes/5-set-_NET_FRAME_EXTENTS | 1 +
src/x.c | 18 ++
testcases/t/323-net-frame-extents.t | 173 ++++++++++++++++++
3 files changed, 192 insertions(+)
create mode 100644 release-notes/changes/5-set-_NET_FRAME_EXTENTS
create mode 100644 testcases/t/323-net-frame-extents.t
diff --git a/release-notes/changes/5-set-_NET_FRAME_EXTENTS b/release-notes/changes/5-set-_NET_FRAME_EXTENTS
new file mode 100644
index 0000000000..0d40253a75
--- /dev/null
+++ b/release-notes/changes/5-set-_NET_FRAME_EXTENTS
@@ -0,0 +1 @@
+Set _NET_FRAME_EXTENTS according to the actual decoration size
diff --git a/src/x.c b/src/x.c
index e28c3d03b2..499c6e2330 100644
--- a/src/x.c
+++ b/src/x.c
@@ -1126,6 +1126,24 @@ void x_push_node(Con *con) {
set_shape_state(con, need_reshape);
+ /* Set _NET_FRAME_EXTENTS according to the actual decoration size. */
+ if (con != NULL && con->window != NULL) {
+ Rect bsr = con_border_style_rect(con);
+ Rect r = {
+ bsr.x, /* left */
+ 0 - bsr.width - bsr.x, /* right */
+ bsr.y, /* top */
+ 0 - bsr.height - bsr.y /* bottom */
+ };
+ xcb_change_property(
+ conn,
+ XCB_PROP_MODE_REPLACE,
+ con->window->id,
+ A__NET_FRAME_EXTENTS,
+ XCB_ATOM_CARDINAL, 32, 4,
+ &r);
+ }
+
/* Map if map state changed, also ensure that the child window
* is changed if we are mapped and there is a new, unmapped child window.
* Unmaps are handled in x_push_node_unmaps(). */
diff --git a/testcases/t/323-net-frame-extents.t b/testcases/t/323-net-frame-extents.t
new file mode 100644
index 0000000000..7098f21d5f
--- /dev/null
+++ b/testcases/t/323-net-frame-extents.t
@@ -0,0 +1,173 @@
+#!perl
+# vim:ts=4:sw=4:expandtab
+#
+# Please read the following documents before working on tests:
+# • https://build.i3wm.org/docs/testsuite.html
+# (or docs/testsuite)
+#
+# • https://build.i3wm.org/docs/lib-i3test.html
+# (alternatively: perldoc ./testcases/lib/i3test.pm)
+#
+# • https://build.i3wm.org/docs/ipc.html
+# (or docs/ipc)
+#
+# • https://i3wm.org/downloads/modern_perl_a4.pdf
+# (unless you are already familiar with Perl)
+#
+# Verify _NET_FRAME_EXTENTS is set correctly
+# Ticket: #4292
+# Bug still in: 4.24-8-g44b67d11
+use i3test i3_autostart => 0;
+use X11::XCB qw(:all);
+
+my $pid = launch_with_config('-default');
+
+sub net_frame_extents {
+ my ($window) = @_;
+
+ my $cookie = $x->get_property(
+ 0,
+ $window->{id},
+ $x->atom(name => '_NET_FRAME_EXTENTS')->id,
+ GET_PROPERTY_TYPE_ANY,
+ 0,
+ 4
+ );
+
+ my $reply = $x->get_property_reply($cookie->{sequence});
+ my $len = $reply->{length};
+ return [] if $len == 0;
+
+ return unpack("L$len", $reply->{value});
+}
+
+sub is_net_frame_extents {
+ my ($window, $expect, $msg) = @_;
+ $msg //= "";
+ $msg = "frame extents $msg";
+ $msg =~ s/\s+$//;
+ my @extents = net_frame_extents($window);
+ is_deeply(\@extents, $expect, "$msg: got: @extents want: @$expect");
+}
+
+subtest 'basic border styles' => sub {
+ my $w = open_window;
+ cmd 'border normal 3';
+ is_net_frame_extents($w, [3, 3, 18, 3], "normal border with 3px width");
+
+ cmd 'border pixel 1';
+ is_net_frame_extents($w, [1, 1, 1, 1], "pixel border with 1px width");
+
+ cmd 'border pixel 5';
+ is_net_frame_extents($w, [5, 5, 5, 5], "pixel border with 5px width");
+
+ open_window;
+ is_net_frame_extents($w, [5, 5, 5, 5], "other window does not affect");
+ cmd 'kill';
+
+ cmd 'border normal 0';
+ is_net_frame_extents($w, [0, 0, 18, 0], "normal border with 0px width");
+
+ cmd 'border none';
+ is_net_frame_extents($w, [0, 0, 0, 0], "no border");
+};
+
+subtest 'multiple windows in different layouts' => sub {
+ fresh_workspace;
+
+ my $w1 = open_window;
+ my $w2 = open_window;
+ my $w3 = open_window;
+
+ cmd 'border normal 2';
+ is_net_frame_extents($w1, [2, 2, 18, 2], "window 1 in splith layout with normal border");
+ is_net_frame_extents($w2, [2, 2, 18, 2], "window 2 in splith layout with normal border");
+ is_net_frame_extents($w3, [2, 2, 18, 2], "window 3 in splith layout with normal border");
+
+ cmd 'layout stacking';
+ is_net_frame_extents($w1, [2, 2, 0, 2], "window 1 in stacking layout");
+ is_net_frame_extents($w2, [2, 2, 0, 2], "window 2 in stacking layout");
+ is_net_frame_extents($w3, [2, 2, 0, 2], "window 3 in stacking layout");
+
+ cmd 'layout tabbed';
+ is_net_frame_extents($w1, [2, 2, 0, 2], "window 1 in tabbed layout");
+ is_net_frame_extents($w2, [2, 2, 0, 2], "window 2 in tabbed layout");
+ is_net_frame_extents($w3, [2, 2, 0, 2], "window 3 in tabbed layout");
+
+ cmd 'layout splitv';
+ is_net_frame_extents($w1, [2, 2, 18, 2], "window 1 in splitv layout");
+ is_net_frame_extents($w2, [2, 2, 18, 2], "window 2 in splitv layout");
+ is_net_frame_extents($w3, [2, 2, 18, 2], "window 3 in splitv layout");
+};
+
+sub launch_with_hide_edge_borders {
+ my ($value) = @_;
+ my $config = <<EOT;
+# i3 config file (v4)
+font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
+hide_edge_borders $value
+EOT
+
+ kill_all_windows;
+ exit_gracefully($pid);
+ $pid = launch_with_config($config);
+}
+
+subtest 'hide_edge_borders' => sub {
+ launch_with_hide_edge_borders('none');
+ my $w = open_window;
+ cmd 'border normal 3';
+ is_net_frame_extents($w, [3, 3, 18, 3], "window with normal borders (hide_edge_borders none)");
+
+ launch_with_hide_edge_borders('vertical');
+ $w = open_window;
+ cmd 'border normal 3';
+ is_net_frame_extents($w, [0, 0, 18, 3], "window with hidden vertical borders");
+
+ launch_with_hide_edge_borders('horizontal');
+ $w = open_window;
+ cmd 'border normal 3';
+ is_net_frame_extents($w, [3, 3, 18, 0], "window with hidden horizontal borders");
+ cmd 'border pixel 3';
+ is_net_frame_extents($w, [3, 3, 0, 0], "window with hidden horizontal borders");
+
+ launch_with_hide_edge_borders('both');
+ $w = open_window;
+ cmd 'border normal 3';
+ is_net_frame_extents($w, [0, 0, 18, 0], "window with all edge borders hidden");
+ cmd 'border pixel 3';
+ is_net_frame_extents($w, [0, 0, 0, 0], "window with all edge borders hidden");
+
+ launch_with_hide_edge_borders('smart');
+ $w = open_window;
+ cmd 'border normal 3';
+ is_net_frame_extents($w, [0, 0, 18, 0], "window with smart borders (single window)");
+ cmd 'border pixel 3';
+ is_net_frame_extents($w, [0, 0, 0, 0], "window with smart borders (single window)");
+
+ my $w2 = open_window;
+ cmd 'border normal 5';
+ is_net_frame_extents($w, [3, 3, 3, 3], "first window with smart borders (multiple windows)");
+ is_net_frame_extents($w2, [5, 5, 18, 5], "second window with smart borders (multiple windows)");
+
+ exit_gracefully($pid);
+ launch_with_config('-default');
+};
+
+subtest 'floating windows' => sub {
+ fresh_workspace;
+ my $w = open_window;
+ cmd 'border normal 4';
+ is_net_frame_extents($w, [4, 4, 18, 4], "tiling window with normal border");
+
+ cmd 'floating enable';
+ is_net_frame_extents($w, [4, 4, 18, 4], "floating window with normal border");
+
+ cmd 'border pixel 2';
+ is_net_frame_extents($w, [2, 2, 2, 2], "floating window with pixel border");
+
+ cmd 'border none';
+ is_net_frame_extents($w, [0, 0, 0, 0], "floating window with no border");
+};
+
+done_testing;

View File

@@ -1,146 +0,0 @@
From f8befe378ab3c9f8d035657ca0247c9b8c242b6b Mon Sep 17 00:00:00 2001
From: Orestis Floros <orestisflo@gmail.com>
Date: Wed, 31 Jan 2024 08:14:32 +0100
Subject: [PATCH] Avoid creating redundant containers when switching between
tabbed/stacked and split layouts (#5469)
Fixes #3001
---
release-notes/changes/3-redundant-containers | 1 +
src/con.c | 25 ++++++
testcases/t/550-split-redundant-containers.t | 82 ++++++++++++++++++++
3 files changed, 108 insertions(+)
create mode 100644 release-notes/changes/3-redundant-containers
create mode 100644 testcases/t/550-split-redundant-containers.t
diff --git a/release-notes/changes/3-redundant-containers b/release-notes/changes/3-redundant-containers
new file mode 100644
index 000000000..cd6ab9f3d
--- /dev/null
+++ b/release-notes/changes/3-redundant-containers
@@ -0,0 +1 @@
+avoid creating redundant containers when switching between tabbed/stacked and split layouts
diff --git a/src/con.c b/src/con.c
index aebc46cf8..917e797a6 100644
--- a/src/con.c
+++ b/src/con.c
@@ -2063,6 +2063,31 @@ void con_set_layout(Con *con, layout_t layout) {
}
}
+ if (con->type != CT_WORKSPACE && con->parent->type != CT_WORKSPACE &&
+ con_num_children(con) == 1 && con_num_children(con->parent) == 1) {
+ /* Special case: Avoid creating redundant containers (#3001):
+ * split h / v (tree_split()) will avoid creating new containers when
+ * the target container is already a single child in L_SPLITH /
+ * L_SPLITV. However, if the layout is tabbed / stacked, a new split is
+ * created. This means, however, that when the user continuously
+ * switches between split h/v and tabbed / stacked, an endless series
+ * of 1-child containers will be created. Since a single level of split
+ * containers on top of tabbed / stacked containers are useful, we want
+ * to avoid this situation here.
+ * Example of past behaviour: S[V[w]] -> S[S[w]] -> S[S[V[w]]] -> …
+ * Example of desired behaviour: S[V[w]] -> S[w] -> S[v[w]] -> …
+ * Therefore, when both the current & parent containers have a single
+ * child, we just close the redundant middle container and proceed with
+ * the parent. */
+ Con *parent = con->parent;
+ Con *child = TAILQ_FIRST(&(con->nodes_head));
+ con_detach(child);
+ con_attach(child, parent, true);
+ parent->last_split_layout = con->last_split_layout;
+ tree_close_internal(con, DONT_KILL_WINDOW, true);
+ con = parent;
+ }
+
if (layout == L_DEFAULT) {
/* Special case: the layout formerly known as "default" (in combination
* with an orientation). Since we switched to splith/splitv layouts,
diff --git a/testcases/t/550-split-redundant-containers.t b/testcases/t/550-split-redundant-containers.t
new file mode 100644
index 000000000..3dfef3995
--- /dev/null
+++ b/testcases/t/550-split-redundant-containers.t
@@ -0,0 +1,82 @@
+#!perl
+# vim:ts=4:sw=4:expandtab
+#
+# Please read the following documents before working on tests:
+# • https://build.i3wm.org/docs/testsuite.html
+# (or docs/testsuite)
+#
+# • https://build.i3wm.org/docs/lib-i3test.html
+# (alternatively: perldoc ./testcases/lib/i3test.pm)
+#
+# • https://build.i3wm.org/docs/ipc.html
+# (or docs/ipc)
+#
+# • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf
+# (unless you are already familiar with Perl)
+#
+# Test that splitting and stacked/tabbed layouts do not create redundant
+# containers.
+# Ticket: #3001
+# Bug still in: 4.22-24-ga5da4d54
+use i3test;
+
+cmp_tree(
+ msg => 'toggling between split h/v',
+ layout_before => 'H[a*]',
+ layout_after => 'V[a*]',
+ cb => sub {
+ cmd 'split v, split h, split v';
+ });
+cmp_tree(
+ msg => 'toggling between tabbed/stacked',
+ layout_before => 'H[a*]',
+ layout_after => 'S[a*]',
+ cb => sub {
+ cmd 'layout tabbed, layout stacked';
+ });
+cmp_tree(
+ msg => 'split h to v and then tabbed',
+ layout_before => 'H[a*]',
+ layout_after => 'T[a*]',
+ cb => sub {
+ cmd 'split v, layout tabbed';
+ });
+cmp_tree(
+ msg => 'repeat tabbed layout',
+ layout_before => 'H[a*]',
+ layout_after => 'T[a*]',
+ cb => sub {
+ cmd 'layout tabbed' for 1..5;
+ });
+cmp_tree(
+ msg => 'split v inside tabbed',
+ layout_before => 'H[a*]',
+ layout_after => 'T[V[a*]]',
+ cb => sub {
+ cmd 'layout tabbed, split v';
+ });
+cmp_tree(
+ msg => 'split v inside tabbed and back to just tabbed',
+ layout_before => 'H[a*]',
+ layout_after => 'T[a*]',
+ cb => sub {
+ cmd 'layout tabbed, split v, layout tabbed';
+ });
+cmp_tree(
+ msg => 'toggle split v inside tabbed',
+ layout_before => 'H[a*]',
+ layout_after => 'T[V[a*]]',
+ cb => sub {
+ cmd 'layout tabbed, split v, layout tabbed, split v';
+ });
+cmp_tree(
+ msg => 'tabbed with 2 nodes inside other tabbed',
+ layout_before => 'T[a*]',
+ layout_after => 'T[T[a b*]]',
+ cb => sub {
+ cmd 'split v';
+ open_window(wm_class => "b", name => "b");
+ cmd 'layout tabbed';
+ });
+
+done_testing;

View File

@@ -28,7 +28,7 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=i3
VERSION=${VERSION:-4.23}
VERSION=${VERSION:-4.24}
BUILD=${BUILD:-2}
TAG=${TAG:-_EXs}
@@ -74,8 +74,9 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+
patch -p1 -i $CWD/f8befe378ab3c9f8d035657ca0247c9b8c242b6b.patch
patch -p1 -i $CWD/b660d6a902cf44be22c434101dd2a4e6743e26bc.patch
patch -p1 --verbose -i ${CWD}/cfa4cf16bea809c7c715a86c428757e577c85254.patch
patch -p1 --verbose -i ${CWD}/2746e0319b03a8a5a02b57a69b1fb47e0a9c22f1.patch
patch -p1 --verbose -i ${CWD}/853b0d9161a5f99c8491751590229a449e4076b6.patch
# Configure, build, and install:
export CFLAGS="-g3 $SLKCFLAGS -flto -rdynamic"
@@ -115,9 +116,7 @@ mkdir -p $PKG/usr/share/apps/kdm/sessions
ln -s /usr/share/xsessions/i3.desktop $PKG/usr/share/apps/kdm/sessions/
# Install an xinitrc script
mkdir -p $PKG/etc/X11/xinit
cat $CWD/xinitrc.i3 > $PKG/etc/X11/xinit/xinitrc.i3
chmod 0755 $PKG/etc/X11/xinit/xinitrc.i3
install -Dpm 0755 $CWD/xinitrc.i3 $PKG/etc/X11/xinit/xinitrc.i3
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/html $PKG/usr/doc/$PRGNAM-$VERSION/txt
cp -a DEPENDS LICENSE RELEASE-NOTES-* $PKG/usr/doc/$PRGNAM-$VERSION
@@ -135,7 +134,6 @@ perl Makefile.PL \
INSTALLVENDORMAN1DIR=/usr/man/man1 \
INSTALLVENDORMAN3DIR=/usr/man/man3
make -j$(nproc)
#make test
make install DESTDIR=$PKG
find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true
@@ -145,16 +143,17 @@ cp -a Changes README MANIFEST $PKG/usr/doc/$PRGNAM-$VERSION/AnyEvent-I3/
# man pages
find $PKG/usr/man -type f -exec gzip -9 {} +
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
for i in $( find $PKG/usr/man -type l ); do
ln -s $( readlink $i ).gz $i.gz
rm $i
done
find $PKG -depth -type d -empty -delete || true
install -Dpm 0644 $CWD/$PRGNAM.SlackBuild $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
install -Dpm 0644 $CWD/slack-desc $PKG/install/slack-desc
install -Dpm 0644 $CWD/doinst.sh $PKG/install/doinst.sh
install -Dpm 0644 $CWD/slack-required $PKG/install/slack-required
install -Dpm 0644 $CWD/slack-desc $PKG/install/slack-desc
install -Dpm 0644 $CWD/doinst.sh $PKG/install/doinst.sh
install -Dpm 0644 $CWD/slack-required $PKG/install/slack-required
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

View File

@@ -1,8 +1,8 @@
PRGNAM="i3"
VERSION="4.23"
VERSION="4.24"
HOMEPAGE="https://www.i3wm.org"
DOWNLOAD="https://i3wm.org/downloads/i3-4.23.tar.xz"
MD5SUM="ea71162d40b403b6098fe833697b747a"
DOWNLOAD="https://i3wm.org/downloads/i3-4.24.tar.xz"
MD5SUM="239a821e091e383fb0e3981eac6f8ae9"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="dmenu libev xcb-util-xrm yajl perl-JSON-XS perl-AnyEvent"

View File

@@ -1,15 +0,0 @@
diff -ruNp i3-4.19/testcases/inject_randr1.5.c i3-4.19.new/testcases/inject_randr1.5.c
--- i3-4.19/testcases/inject_randr1.5.c 2020-11-15 20:23:01.532988500 +0300
+++ i3-4.19.new/testcases/inject_randr1.5.c 2020-11-20 12:23:02.176011604 +0300
@@ -267,9 +267,9 @@ static void read_client_x11_packet_cb(EV
}
} else if (opcode == connstate->randr_major_opcode) {
const uint8_t randr_opcode = ((generic_x11_request_t *)request)->pad0;
- if (randr_opcode == XCB_RANDR_GET_MONITORS) {
+ if (randr_opcode == 42) {
connstate->getmonitors = connstate->sequence;
- } else if (randr_opcode == XCB_RANDR_GET_OUTPUT_INFO) {
+ } else if (randr_opcode == 9) {
connstate->getoutputinfo = connstate->sequence;
}
}

View File

@@ -24,8 +24,8 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=keepassxc
VERSION=${VERSION:-2.7.8}
BUILD=${BUILD:-1}
VERSION=${VERSION:-2.7.10}
BUILD=${BUILD:-2}
TAG=${TAG:-_EXs}
if [ -z "$ARCH" ]; then
@@ -74,8 +74,8 @@ mkdir -p build
cd build
export CFLAGS="$SLKCFLAGS"
export CXXFLAGS="$CFLAGS -fvectorize -fno-rtti"
export LDFLAGS="-ltermcap -flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-s "
cmake \
export LDFLAGS="-ltermcap -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-s -Wl,-O2 "
cmake -GNinja \
-DCMAKE_C_FLAGS:STRING="$CFLAGS" \
-DCMAKE_CXX_FLAGS:STRING="$CFLAGS" \
-DCMAKE_INSTALL_PREFIX=/usr \
@@ -96,8 +96,8 @@ cd build
-DWITH_APP_BUNDLE=OFF \
..
make -j$(nproc)
make install DESTDIR=$PKG
ninja -j$(nproc)
DESTDIR=$PKG ninja install
cd ..
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \

View File

@@ -1,8 +1,8 @@
PRGNAM="keepassxc"
VERSION="2.7.8"
VERSION="2.7.10"
HOMEPAGE="https://github.com/keepassxreboot/keepassxc"
DOWNLOAD="https://github.com/keepassxreboot/keepassxc/releases/download/2.7.8/keepassxc-2.7.8-src.tar.xz"
MD5SUM="5bf705a6277e17b162a4ad2a8fd60dbf"
DOWNLOAD="https://github.com/keepassxreboot/keepassxc/releases/download/2.7.10/keepassxc-2.7.10-src.tar.xz"
MD5SUM="31dfc525fe84bc1985bb011482b8b327"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="argon2 libsodium qrencode qt5 Botan libminizip"

248
kernel/build-all-kernels.sh Executable file
View File

@@ -0,0 +1,248 @@
#!/bin/sh
# Copyright 2018, 2021, 2022, 2023, 2024 Patrick J. Volkerding, Sebeka, Minnesota, USA
# 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.
# This script uses the SlackBuild scripts present here to build a
# complete set of kernel packages for the currently running architecture.
# It needs to be run once on 64-bit (uname -m = x86_64) and once on IA32
# (uname -m = i586 or i686).
# In spite of this being named "build-all-kernels.sh", you don't have to build
# all the packages or all the kernels that there are configs for. Set the
# variables below to tune this for your needs.
cd $(dirname $0) ; CWD=$(pwd)
BUILD=${BUILD:-1}
if [ -z "$VERSION" ]; then
# Get the filename of the newest kernel tarball:
KERNEL_SOURCE_FILE="$(/bin/ls -t linux-*.tar.?z | head -n 1 )"
if echo $KERNEL_SOURCE_FILE | grep -q rc ; then # need to get rc versions a bit differently
VERSION=$(/bin/ls -t linux-*.tar.?z | head -n 1 | rev | cut -f 3- -d . | cut -f 1,2 -d - | rev)
else # normal release version
VERSION=$(/bin/ls -t linux-*.tar.?z | head -n 1 | rev | cut -f 3- -d . | cut -f 1 -d - | rev)
fi
fi
TMP=${TMP:-/tmp}
# If you don't want to build the kernel source package, set this to anything
# other than "yes":
BUILD_KERNEL_SOURCE_PACKAGE=${BUILD_KERNEL_SOURCE_PACKAGE:-yes}
# If you don't want to build the kernel package(s), set this to "no".
# If you only want to build one kernel package, set this to the name of the
# kernel (i.e. "generic").
# To build kernel packages for every available config, set to "yes".
BUILD_KERNEL_PACKAGE=${BUILD_KERNEL_PACKAGE:-yes}
# Build the kernel-headers package?
BUILD_KERNEL_HEADERS_PACKAGE=${BUILD_KERNEL_HEADERS_PACKAGE:-yes}
# Where should we find the kernel config files?
KERNEL_CONFIGDIR=${KERNEL_CONFIGDIR:-./kernel-configs}
# Make KERNEL_CONFIGDIR an absolute path:
KERNEL_CONFIGDIR=$(realpath $KERNEL_CONFIGDIR)
export KERNEL_CONFIGDIR
# By default, install the packages as we build them.
INSTALL_PACKAGES=${INSTALL_PACKAGES:-YES}
# By default, have the kernel package(s) generate an initrd upon installation:
AUTO_GENERATE_INITRD=${AUTO_GENERATE_INITRD:-YES}
export AUTO_GENERATE_INITRD
# By default, update the initrd. But if both INSTALL_PACKAGES and
# AUTO_GENERATE_INITRD are YES, then installing the kernel-generic package
# will generate the initrd, so no need to do this twice.
if [ "$INSTALL_PACKAGES" = "YES" -a "$AUTO_GENERATE_INITRD" = "YES" ]; then
UPDATE_INITRD=${UPDATE_INITRD:-NO}
else
UPDATE_INITRD=${UPDATE_INITRD:-YES}
fi
# Clean kernels before building them. Not doing so quit working some time
# after 4.19.x.
export KERNEL_CLEAN=YES
# Set this to true if you'd like to write the .config back to its source
# after running "make oldconfig". This ensures that the config file is the
# exact one used to build, and is sorted properly.
REGEN_CONFIG=${REGEN_CONFIG:-true}
export REGEN_CONFIG
# We'll figure this out if you build the kernel-source package, otherwise
# you better set it if it'll be needed to match the .config filename.
LOCALVERSION=${LOCALVERSION:-}
# A list of recipes for build may be passed in the $RECIPES variable, otherwise
# we have defaults based on uname -m:
if [ -z "$RECIPES" ]; then
if uname -m | grep -wq x86_64 ; then
RECIPES="x86_64"
elif uname -m | grep -wq i.86 ; then
RECIPES="IA32"
else
echo "Error: no build recipes available for $(uname -m)"
exit 1
fi
fi
# Main build loop:
for recipe in $RECIPES ; do
# Build recipes are defined here. These will select the appropriate .config
# files and package naming scheme, and define the output location.
if [ "$recipe" = "x86_64" ]; then
# Recipe for x86_64:
export CONFIG_SUFFIX=".x64"
OUTPUT=${OUTPUT:-${TMP}/output-x86_64-${VERSION}}
elif [ "$recipe" = "IA32" ]; then
# Recipe for IA32:
export CONFIG_SUFFIX=".ia32"
OUTPUT=${OUTPUT:-${TMP}/output-ia32-${VERSION}}
else
echo "Error: recipe ${recipe} not implemented"
exit 1
fi
mkdir -p $OUTPUT
echo
echo "*************************************************"
echo "* Building kernels for recipe ${recipe}..."
echo "*************************************************"
echo
if [ "$BUILD_KERNEL_SOURCE_PACKAGE" = "yes" ]; then
# Build kernel-source package.
# Does a generic config file exist?
# A generic config is defined here as one that does not use a LOCALVERSION.
# If we don't see that, we'll look for this version plus any LOCALVERSION.
# If that doesn't match, we take the newest config with the proper $CONFIG_SUFFIX.
if [ -r $KERNEL_CONFIGDIR/config-${VERSION}${LOCALVERSION}${CONFIG_SUFFIX} ]; then
KERNEL_CONFIG="config-${VERSION}${LOCALVERSION}${CONFIG_SUFFIX}"
elif [ -r "$(/bin/ls -t $KERNEL_CONFIGDIR/config-${VERSION}*${CONFIG_SUFFIX} 2> /dev/null | head -n 1)" ]; then
KERNEL_CONFIG="$(basename $(/bin/ls $KERNEL_CONFIGDIR/config-${VERSION}*${CONFIG_SUFFIX} 2> /dev/null | head -n 1))"
elif [ -r "$(/bin/ls -t $KERNEL_CONFIGDIR/config-*${CONFIG_SUFFIX} 2> /dev/null | head -n 1)" ]; then
KERNEL_CONFIG="$(basename $(/bin/ls $KERNEL_CONFIGDIR/config-*${CONFIG_SUFFIX} 2> /dev/null | head -n 1))"
else
echo "ERROR: no suitable config file found for ${CONFIG_SUFFIX}"
exit 1
fi
export KERNEL_CONFIG
# Build:
KERNEL_SOURCE_PACKAGE_NAME=$(PRINT_PACKAGE_NAME=YES VERSION=$VERSION BUILD=$BUILD ./kernel-source.SlackBuild)
VERSION=$VERSION BUILD=$BUILD ./kernel-source.SlackBuild
mv ${TMP}/${KERNEL_SOURCE_PACKAGE_NAME} $OUTPUT || exit 1
if [ "${INSTALL_PACKAGES}" = "YES" ]; then
installpkg ${OUTPUT}/${KERNEL_SOURCE_PACKAGE_NAME} || exit 1
fi
else # otherwise, still stage the sources in $TMP/package-kernel-source:
echo "Not building kernel-source package."
sleep 2
ONLY_STAGE_KERNEL_SOURCE=yes VERSION=$VERSION BUILD=$BUILD ./kernel-source.SlackBuild
fi
# Build kernel+modules package(s) for every config file with a matching $CONFIG_SUFFIX:
for configfile in $KERNEL_CONFIGDIR/config-*${CONFIG_SUFFIX} ; do
# Set the LOCALVERSION from this .config:
LOCALVERSION=$(cat $configfile | grep "^CONFIG_LOCALVERSION=" | cut -f 2 -d = | tr -d \")
# Set the name for this kernel.
# If there's no LOCALVERSION, the name is "generic".
# Otherwise, it is the LOCALVERSION minus any leading dash.
if [ -z "$LOCALVERSION" ]; then
KERNEL_NAME=generic
else
KERNEL_NAME=$LOCALVERSION
# If there's a leading dash, remove it:
if [ "$(echo $KERNEL_NAME | cut -b 1)" = "-" ]; then
KERNEL_NAME="$(echo $KERNEL_NAME | cut -b 2-)"
fi
fi
export KERNEL_NAME
# Are we building this kernel?
if [ ! "$BUILD_KERNEL_PACKAGE" = "yes" ]; then
if [ ! "$BUILD_KERNEL_PACKAGE" = "$KERNEL_NAME" ]; then
continue
fi
fi
# We will build in the just-built kernel tree. First, let's put back the
# symlinks:
( cd $TMP/package-kernel-source
sh install/doinst.sh 2> /dev/null
)
# The initial release of any new kernel branch (e.g. 6.14.0) has a quirk -
# The tarball will be labeled linux-6.14.tar.xz, but the kernel's version
# in the Makefile will be 6.14.0. If we are regenerating kernel config
# files, then we need to make sure that we're still using the proper
# version number at this point:
if [ ! -r "$KERNEL_CONFIGDIR/config-${VERSION}${LOCALVERSION}${CONFIG_SUFFIX}" -a -r "$KERNEL_CONFIGDIR/config-${VERSION}.0${LOCALVERSION}${CONFIG_SUFFIX}" ]; then
VERSION=${VERSION}.0
fi
KERNEL_GENERIC_PACKAGE_NAME=$(PRINT_PACKAGE_NAME=YES KERNEL_SOURCE=$TMP/package-kernel-source/usr/src/linux KERNEL_CONFIG=$KERNEL_CONFIGDIR/config-${VERSION}${LOCALVERSION}${CONFIG_SUFFIX} CONFIG_SUFFIX=${CONFIG_SUFFIX} KERNEL_OUTPUT_DIRECTORY=$OUTPUT/kernels/${KERNEL_NAME}.s BUILD=$BUILD ./kernel-generic.SlackBuild)
KERNEL_SOURCE=$TMP/package-kernel-source/usr/src/linux KERNEL_CONFIG=$KERNEL_CONFIGDIR/config-${VERSION}${LOCALVERSION}${CONFIG_SUFFIX} CONFIG_SUFFIX=${CONFIG_SUFFIX} KERNEL_OUTPUT_DIRECTORY=$OUTPUT/kernels/${KERNEL_NAME}.s BUILD=$BUILD ./kernel-generic.SlackBuild
if [ -r ${TMP}/${KERNEL_GENERIC_PACKAGE_NAME} ]; then
mv ${TMP}/${KERNEL_GENERIC_PACKAGE_NAME} $OUTPUT
else
echo "kernel-${KERNEL_NAME} build failed."
exit 1
fi
if [ "${INSTALL_PACKAGES}" = "YES" ]; then
installpkg ${OUTPUT}/${KERNEL_GENERIC_PACKAGE_NAME} || exit 1
fi
done # building kernel+modules package(s).
if [ "$BUILD_KERNEL_HEADERS_PACKAGE" = "yes" ]; then
# Build kernel-headers:
KERNEL_HEADERS_PACKAGE_NAME=$(PRINT_PACKAGE_NAME=YES KERNEL_SOURCE=$TMP/package-kernel-source/usr/src/linux BUILD=$BUILD ./kernel-headers.SlackBuild)
KERNEL_SOURCE=$TMP/package-kernel-source/usr/src/linux BUILD=$BUILD ./kernel-headers.SlackBuild
if [ -r ${TMP}/${KERNEL_HEADERS_PACKAGE_NAME} ]; then
mv ${TMP}/${KERNEL_HEADERS_PACKAGE_NAME} $OUTPUT
else
echo "kernel-headers build failed."
exit 1
fi
if [ "${INSTALL_PACKAGES}" = "YES" ]; then
upgradepkg --reinstall --install-new ${OUTPUT}/${KERNEL_HEADERS_PACKAGE_NAME} || exit 1
fi
fi
# Update initrd:
if [ "${UPDATE_INITRD}" = "YES" ]; then
echo "Updating initrd with geninitrd..."
/usr/sbin/geninitrd
fi
echo
echo "${recipe} kernel packages done!"
echo
done

View File

@@ -0,0 +1,15 @@
# Only run this if we aren't in the installer.
# We'll do these things after the install.
# First we'll check for an old version of setup.01.mkinitrd. If we find one,
# let's skip all this. We could be upgrading from 15.0...
if [ -r var/lib/pkgtools/setup/setup.01.mkinitrd ]; then
if ! grep -wq vmlinuz-generic-smp var/lib/pkgtools/setup/setup.01.mkinitrd 2> /dev/null ; then
if [ -z "$INSIDE_INSTALLER" ]; then
# Generate the initrd and remove orphaned initrds.
# Options (including disabling this) may be found in /etc/default/geninitrd.
if [ -x usr/sbin/geninitrd ]; then
usr/sbin/geninitrd
fi
fi
fi
fi

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

217
kernel/kernel-generic.SlackBuild Executable file
View File

@@ -0,0 +1,217 @@
#!/bin/sh
# Copyright 2018, 2020, 2024 Patrick J. Volkerding, Sebeka, Minnesota, USA
# 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.
# To use this script, point it to a Linux kernel source tree and a .config
# file by setting the appropriate environment variables:
#
# KERNEL_SOURCE=/usr/src/linux KERNEL_CONFIG=./kernel-configs/config-6.9.9-generic.x64 ./kernel-generic.SlackBuild
#
# It can also build the huge (or any other) kernel:
#
# KERNEL_NAME=huge KERNEL_SOURCE=/usr/src/linux KERNEL_CONFIG=./kernel-configs/config-6.9.9.x64 ./kernel-generic.SlackBuild
#
# By default, it will call the package "kernel-generic" and use the source and
# .config already in /usr/src/linux (if possible).
cd $(dirname $0) ; CWD=$(pwd)
KERNEL_NAME=${KERNEL_NAME:-generic}
KERNEL_SOURCE=${KERNEL_SOURCE:-/usr/src/linux}
KERNEL_CONFIG=${KERNEL_CONFIG:-/usr/src/linux/.config}
CONFIG_SUFFIX=${CONFIG_SUFFIX:-}
BUILD=${BUILD:-1}
# The CONFIG_DEBUG_INFO_BTF_MODULES option adds a huge amount of debugging
# data to the modules which we don't actually need. We'll strip debugging
# information from kernel modules by default. If you are building a debug
# kernel and wish to retain this data, export the variable below set to "0".
STRIP_DEBUG=${STRIP_DEBUG:-1}
# Let's export the variable with the name needed by the kernel's Makefiles,
# just for good measure.
if [ "$STRIP_DEBUG" = "1" ]; then
export INSTALL_MOD_STRIP=$STRIP_DEBUG
else
unset STRIP_DEBUG
fi
# Set this to true if you'd like to write the .config back to its source
# after running "make oldconfig". This ensures that the config file is the
# exact one used to build, and is sorted properly.
REGEN_CONFIG=${REGEN_CONFIG:-false}
# By default, have the kernel package(s) generate an initrd upon installation:
AUTO_GENERATE_INITRD=${AUTO_GENERATE_INITRD:-YES}
if [ ! -r "${KERNEL_CONFIG}" ]; then
echo "Error: the KERNEL_CONFIG environment variable needs to be set to the"
echo ".config file to be used to build this kernel. Example:"
echo "KERNEL_NAME=generic KERNEL_SOURCE=/usr/src/linux KERNEL_CONFIG=./kernel-configs/config-6.9.9.x64 ./kernel-generic.SlackBuild"
echo "Tried to look for: ${KERNEL_CONFIG}"
exit 1
fi
if [ ! -d "${KERNEL_SOURCE}" ]; then
echo "Error: kernel source directory ${KERNEL_SOURCE} does not exist."
exit 1
fi
# Get the kernel version from the kernel Makefile:
VERSION=$(grep "^VERSION = " ${KERNEL_SOURCE}/Makefile | rev | cut -f 1 -d ' ' | rev).$(grep "^PATCHLEVEL = " ${KERNEL_SOURCE}/Makefile | rev | cut -f 1 -d ' ' | rev).$(grep "^SUBLEVEL = " ${KERNEL_SOURCE}/Makefile | rev | cut -f 1 -d ' ' | rev)$(grep "^EXTRAVERSION = " ${KERNEL_SOURCE}/Makefile | rev | cut -f 1 -d ' ' | rev)
# Set LOCALVERSION to the value found inside the .config:
LOCALVERSION="$(cat ${KERNEL_SOURCE}/.config 2> /dev/null | grep CONFIG_LOCALVERSION= | cut -f 2 -d = | tr -d \")"
# The default kernel arch is x86 for all 32-bit and 64-bit x86:
if [ -z "${KERNEL_ARCH}" ]; then
case "$(uname -m)" in
i?86) KERNEL_ARCH=x86 ;;
x86_64) KERNEL_ARCH=x86 ;;
# Use uname -m for all other archs:
*) KERNEL_ARCH=$(uname -m) ;;
esac
fi
# If this variable is set to an output directory, we will also put copies of
# System.map.gz, bzImage, and config in there:
KERNEL_OUTPUT_DIRECTORY=${KERNEL_OUTPUT_DIRECTORY:-}
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
# We will need to copy the config and run make olddefconfig and make
# prepare in order to generate kernel/bounds.s, where we can find
# the true $PACKAGE_ARCH. Use olddefconfig (not oldconfig) to prevent
# stalling if user input would be required.
if [ ! "${KERNEL_CONFIG}" = "${KERNEL_SOURCE}/.config" ]; then
cp -a ${KERNEL_CONFIG} ${KERNEL_SOURCE}/.config
fi
cd ${KERNEL_SOURCE}
make olddefconfig 1> /dev/null 2> /dev/null
make prepare 1> /dev/null 2> /dev/null
PACKAGE_ARCH=$(cat kernel/bounds.s | grep -w "\-march=.*" | tr " " "\n" | grep -w "\-march=.*" | cut -f 2 -d = | tr - _)
# Set LOCALVERSION to the value found inside the .config:
LOCALVERSION="$(cat .config 2> /dev/null | grep CONFIG_LOCALVERSION= | cut -f 2 -d = | tr -d \")"
echo "kernel-${KERNEL_NAME}-$(echo ${VERSION} | tr - _)$(echo ${LOCALVERSION} | tr - _)-${PACKAGE_ARCH}-$BUILD.txz"
exit 0
fi
NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
TMP=${TMP:-/tmp}
PKG=$TMP/package-kernel-${KERNEL_NAME}
rm -rf $PKG
mkdir -p $TMP $PKG
# Set the variable $KERNEL_CLEAN to anything to run "make clean" before the
# build. Default is to start compiling in the tree as we found it.
if [ ! -z "${KERNEL_CLEAN}" ]; then
( cd ${KERNEL_SOURCE}
echo "Cleaning kernel source (make clean)..."
make clean
# Make sure header files aren't missing...
make prepare
# Don't package the kernel in the sources:
find . -name "*Image" -exec rm "{}" \+
# No need for these:
rm -f .config.old .version
find . -name "*.cmd" -exec rm -f "{}" \+
rm .*.d
)
fi
# Copy the .config into the kernel source directory (unless it's there already)
if [ ! "${KERNEL_CONFIG}" = "${KERNEL_SOURCE}/.config" ]; then
echo "Copying the .config file to the kernel source tree:"
cp -a --verbose ${KERNEL_CONFIG} ${KERNEL_SOURCE}/.config
fi
( cd ${KERNEL_SOURCE}
echo "Running make oldconfig..."
make oldconfig || exit 1
# Write back the .config if requested:
if [ ! "$REGEN_CONFIG" = "false" ]; then
echo "Rewriting .config as: $KERNEL_CONFIGDIR/config-${VERSION}${LOCALVERSION}${CONFIG_SUFFIX}"
cp -a .config $KERNEL_CONFIGDIR/config-${VERSION}${LOCALVERSION}${CONFIG_SUFFIX}
fi
echo "Running a preliminary make (needed to create modules.builtin.modinfo)..."
make $NUMJOBS || exit 1
echo "Building kernel modules..."
make $NUMJOBS modules || exit 1
echo "Installing kernel modules to $PKG..."
make INSTALL_MOD_PATH=$PKG INSTALL_MOD_STRIP=$STRIP_DEBUG modules_install || exit 1
# Fix build and source symlinks if they are pointing into $TMP:
( cd $PKG/lib/modules/${VERSION}${LOCALVERSION}
for symlink in build source ; do
target=$(readlink $symlink)
if echo $target | grep -q "^$TMP/package-kernel-source/" ; then
rm -f $symlink
ln -sf $(echo $target | sed "s|$TMP/package-kernel-source/|/|g") $symlink
fi
done
)
# Make modules.dep:
depmod -b $PKG -a ${VERSION}${LOCALVERSION}
echo "Building kernel..."
make $NUMJOBS bzImage || make bzImage || exit 1
# Output files to a directory, if requested:
if [ ! -z "${KERNEL_OUTPUT_DIRECTORY}" ]; then
echo "Copying files to ${KERNEL_OUTPUT_DIRECTORY}..."
mkdir -p ${KERNEL_OUTPUT_DIRECTORY}
rm -f ${KERNEL_OUTPUT_DIRECTORY}/*
cp -a --verbose System.map ${KERNEL_OUTPUT_DIRECTORY}
cp -a --verbose .config ${KERNEL_OUTPUT_DIRECTORY}/config
cp -a --verbose arch/${KERNEL_ARCH}/boot/bzImage ${KERNEL_OUTPUT_DIRECTORY}
gzip -9 ${KERNEL_OUTPUT_DIRECTORY}/System.map
fi
echo "Preparing the package in $PKG..."
mkdir -p $PKG/boot
cp -a --verbose System.map $PKG/boot/System.map-${VERSION}${LOCALVERSION}
cp -a --verbose .config $PKG/boot/config-${VERSION}${LOCALVERSION}${CONFIG_SUFFIX}
cp -a --verbose arch/${KERNEL_ARCH}/boot/bzImage $PKG/boot/vmlinuz-${VERSION}${LOCALVERSION}
# Make symlinks:
ln -sf System.map-${VERSION}${LOCALVERSION} $PKG/boot/System.map
ln -sf config-${VERSION}${LOCALVERSION}${CONFIG_SUFFIX} $PKG/boot/config
ln -sf vmlinuz-${VERSION}${LOCALVERSION} $PKG/boot/vmlinuz-${KERNEL_NAME}
ln -sf vmlinuz-${VERSION}${LOCALVERSION} $PKG/boot/vmlinuz
) || exit 1
# Fetch the kernel architecture from the source tree:
cd ${KERNEL_SOURCE}
PACKAGE_ARCH=$(cat kernel/bounds.s | grep -w "\-march=.*" | tr " " "\n" | grep -w "\-march=.*" | cut -f 2 -d = | tr - _)
mkdir $PKG/install
if [ -r $CWD/slack-desc/slack-desc.kernel-${KERNEL_NAME} ]; then
cat $CWD/slack-desc/slack-desc.kernel-${KERNEL_NAME} > $PKG/install/slack-desc
else
cat $CWD/slack-desc/slack-desc.kernel-template | sed "s/%PACKAGE_NAME%/kernel-${KERNEL_NAME}/g" > $PKG/install/slack-desc
fi
if [ "$AUTO_GENERATE_INITRD" = "YES" ]; then
echo "export KERNEL=/boot/vmlinuz-${VERSION}${LOCALVERSION}" > $PKG/install/doinst.sh
echo "export KERNEL_DOINST=true" >> $PKG/install/doinst.sh
cat $CWD/doinst.sh/doinst.sh-kernel >> $PKG/install/doinst.sh
else
touch $PKG/install/doinst.sh
fi
# Make the package:
cd $PKG
/sbin/makepkg -l y -c n --prepend $TMP/kernel-$(echo ${KERNEL_NAME} | tr - _)-$(echo ${VERSION} | tr - _)$(echo ${LOCALVERSION} | tr - _)-${PACKAGE_ARCH}-$BUILD.txz

View File

@@ -0,0 +1,91 @@
#!/bin/sh
# Copyright 2018, 2024 Patrick J. Volkerding, Sebeka, Minnesota, USA
# 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.
# To use this script, point it to a Linux kernel source tree, and it will make
# the kernel-headers package using the .config to get all needed package
# version information:
#
# KERNEL_SOURCE=/usr/src/linux ./kernel-headers.SlackBuild
cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=${PKGNAM:-kernel-headers}
BUILD=${BUILD:-1}
KERNEL_SOURCE=${KERNEL_SOURCE:-/usr/src/linux}
if [ -z "${HEADERS_ARCH}" ]; then
case "$(uname -m)" in
i?86) HEADERS_ARCH=x86 ;;
x86_64) HEADERS_ARCH=x86 ;;
# Use uname -m for all other archs:
*) HEADERS_ARCH=$(uname -m) ;;
esac
fi
if [ ! -d "${KERNEL_SOURCE}" ]; then
echo "Error: kernel source directory ${KERNEL_SOURCE} does not exist."
exit 1
elif [ ! -r ${KERNEL_SOURCE}/.config ]; then
echo "Error: a .config was not found in ${KERNEL_SOURCE}."
exit 1
fi
# Get the kernel version from the kernel Makefile:
VERSION=$(grep "^VERSION = " ${KERNEL_SOURCE}/Makefile | rev | cut -f 1 -d ' ' | rev).$(grep "^PATCHLEVEL = " ${KERNEL_SOURCE}/Makefile | rev | cut -f 1 -d ' ' | rev).$(grep "^SUBLEVEL = " ${KERNEL_SOURCE}/Makefile | rev | cut -f 1 -d ' ' | rev)$(grep "^EXTRAVERSION = " ${KERNEL_SOURCE}/Makefile | rev | cut -f 1 -d ' ' | rev)
# Set LOCALVERSION to the value found inside the .config:
LOCALVERSION="$(cat ${KERNEL_SOURCE}/.config 2> /dev/null | grep CONFIG_LOCALVERSION= | cut -f 2 -d = | tr -d \")"
TMP=${TMP:-/tmp}
PKG=$TMP/package-$PKGNAM
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
# The LOCALVERSION never makes it into the headers, so no point including it:
echo "kernel-headers-$(echo ${VERSION} | tr - _)-${HEADERS_ARCH}-$BUILD.txz"
exit 0
fi
rm -rf $PKG
mkdir -p $TMP $PKG
mkdir -p $PKG/usr
# Generate the kernel headers and clean them up:
( cd ${KERNEL_SOURCE}
echo "Generating headers from the Linux kernel source tree in ${KERNEL_SOURCE}:"
make headers_install ARCH=${HEADERS_ARCH} INSTALL_HDR_PATH=$PKG/usr
cd $PKG/usr/include
# You won't want these files. The ones in libdrm work better.
rm -rf drm
# This next part seems pretty much cosmetic, but since we've been doing this
# for a long time (and others also do), we'll stick with it:
mv asm asm-${HEADERS_ARCH}
ln -sf asm-${HEADERS_ARCH} asm
# Remove unneeded dotfiles:
find . -name ".??*" -exec rm -f {} \+
)
mkdir -p $PKG/install
cat $CWD/slack-desc/slack-desc.kernel-headers > $PKG/install/slack-desc
# Make the package:
cd $PKG
# The LOCALVERSION never makes it into the headers, so no point including it:
/sbin/makepkg -l y -c n $TMP/kernel-headers-$(echo ${VERSION} | tr - _)-${HEADERS_ARCH}-$BUILD.txz

305
kernel/kernel-source.SlackBuild Executable file
View File

@@ -0,0 +1,305 @@
#!/bin/sh
# Copyright 2018, 2020, 2021, 2023, 2024, 2025 Patrick J. Volkerding, Sebeka, Minnesota, USA
# 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)
PKGNAM=${PKGNAM:-kernel-source}
BUILD=${BUILD:-1}
NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
TMP=${TMP:-/tmp}
PKG=$TMP/package-$PKGNAM
# If a $VERSION is not passed to this script, use the newest linux-*.tar.?z
# found in this directory:
VERSION=${VERSION:-$(/bin/ls -t linux-*.tar.?z | head -n 1 | rev | cut -f 3- -d . | rev | cut -f2- -d -)}
if ! /bin/ls linux-*.tar.?z 1> /dev/null 2> /dev/null ; then
echo "Error: kernel source not found. (/bin/ls linux-*.tar.?z)"
else
USINGVER="Using kernel source linux-${VERSION}.tar.?z."
fi
# This function will revert or apply patches that are present here.
# Directories that are currently supported:
# patches-revert-${VERSION} (revert patches from this directory if kernel version matches)
# patches-revert-${ARCH} (revert patches from this directory if $ARCH matches)
# patches-${VERSION} (apply patches from this directory if kernel version matches)
# patches-${ARCH} (apply patches from this directory if $ARCH matches)
# All the applied/reverted patches will be copied to the root of the kernel source tree.
apply_patches() {
# First do patches-revert:
if [ -d $CWD/patches-revert-${VERSION} ]; then
if [ "$1" = "VERBOSE" ]; then
echo "Reverting kernel patches in $CWD/patches-revert-${VERSION} and copying patches to $PKG/usr/src/linux-${VERSION}..."
zcat $CWD/patches-revert-${VERSION}/*.gz | patch -p1 -R --backup --suffix=.orig || exit 1
else
zcat $CWD/patches-revert-${VERSION}/*.gz | patch -p1 -R --backup --suffix=.orig 1> /dev/null 2> /dev/null || exit 1
fi
cp -a $CWD/patches-revert-${VERSION}/*.gz .
fi
if [ -d $CWD/patches-revert-${ARCH} ]; then
if [ "$1" = "VERBOSE" ]; then
echo "Reverting kernel patches in $CWD/patches-revert-${ARCH} and copying patches to $PKG/usr/src/linux-${VERSION}..."
zcat $CWD/patches-revert-${ARCH}/*.gz | patch -p1 -R --backup --suffix=.orig || exit 1
else
zcat $CWD/patches-revert-${ARCH}/*.gz | patch -p1 -R --backup --suffix=.orig 1> /dev/null 2> /dev/null || exit 1
fi
cp -a $CWD/patches-revert-${ARCH}/*.gz .
fi
# Then apply patches:
if [ -d $CWD/patches-${VERSION} ]; then
if [ "$1" = "VERBOSE" ]; then
echo "Applying kernel patches in $CWD/patches-${VERSION} and copying patches to $PKG/usr/src/linux-${VERSION}..."
zcat $CWD/patches-${VERSION}/*.gz | patch -p1 --backup --suffix=.orig || exit 1
else
zcat $CWD/patches-${VERSION}/*.gz | patch -p1 --backup --suffix=.orig 1> /dev/null 2> /dev/null || exit 1
fi
cp -a $CWD/patches-${VERSION}/*.gz .
fi
if [ -d $CWD/patches-${ARCH} ]; then
if [ "$1" = "VERBOSE" ]; then
echo "Applying kernel patches in $CWD/patches-${ARCH} and copying patches to $PKG/usr/src/linux-${VERSION}..."
zcat $CWD/patches-${ARCH}/*.gz | patch -p1 --backup --suffix=.orig || exit 1
else
zcat $CWD/patches-${ARCH}/*.gz | patch -p1 --backup --suffix=.orig 1> /dev/null 2> /dev/null || exit 1
fi
cp -a $CWD/patches-${ARCH}/*.gz .
fi
}
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
# We will have to extract and patch the kernel sources to find out the kernel version:
TEMPDIR=$(mktemp -d)
cd $TEMPDIR
tar xf $CWD/linux-${VERSION}.tar.?z || exit 1
cd linux-*
apply_patches
PACKAGE_VERSION=$(grep "^VERSION = " Makefile | rev | cut -f 1 -d ' ' | rev).$(grep "^PATCHLEVEL = " Makefile | rev | cut -f 1 -d ' ' | rev).$(grep "^SUBLEVEL = " Makefile | rev | cut -f 1 -d ' ' | rev)$(grep "^EXTRAVERSION = " Makefile | rev | cut -f 1 -d ' ' | rev)
cd $CWD
rm -rf $TEMPDIR
# No $LOCALVERSION
echo "kernel-source-$(echo ${PACKAGE_VERSION} | tr - _)-noarch-$BUILD.txz"
exit 0
fi
echo $USINGVER
# If we were not given a KERNEL_NAME, use generic:
KERNEL_NAME=${KERNEL_NAME:-generic}
# By default, we'll try to find a kernel config file. Otherwise, you can pass
# KERNEL_CONFIG=some_kernel_config_file to this script. If KERNEL_CONFIG starts
# with a '/', we'll assume it's a full absolute path to the kernel config file.
# Otherwise we'll look for it in $KERNEL_CONFIGDIR (defined below).
# Where should we find the kernel config files?
KERNEL_CONFIGDIR=${KERNEL_CONFIGDIR:-./kernel-configs}
# Make KERNEL_CONFIGDIR an absolute path:
KERNEL_CONFIGDIR=$(realpath $KERNEL_CONFIGDIR)
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
case "$(uname -m)" in
# Use uname -m for all archs:
*) ARCH=$(uname -m) ;;
esac
fi
# If KERNEL_CONFIG (name of kernel .config file in $KERNEL_CONFIGDIR to use)
# has not been passed to this script, then we will select one. We will prefer
# to use a .config that matches KERNEL_NAME and with a version number exactly
# matching the kernel sources. But if there's no exact version match, we will
# start with the newest .config we can find that's of the appropriate type.
if [ -z "${KERNEL_CONFIG}" ]; then # figure out the best matching .config
if [ "$ARCH" = "x86_64" ]; then
CONFIG_SUFFIX=".x64"
elif [ "$ARCH" = "i586" ]; then
CONFIG_SUFFIX=".ia32"
elif [ "$ARCH" = "i686" ]; then
CONFIG_SUFFIX=".ia32"
fi
if [ -r "$KERNEL_CONFIGDIR/config-${VERSION}${LOCALVERSION}${CONFIG_SUFFIX}" ]; then
# Exact match!
KERNEL_CONFIG="config-${VERSION}${LOCALVERSION}${CONFIG_SUFFIX}"
else # no exact match, so find newest with the same LOCALVERSION:
FIND_MATCH="$(/bin/ls -t $KERNEL_CONFIGDIR/config-*${LOCALVERSION}${CONFIG_SUFFIX} 2> /dev/null | head -n 1)"
if [ -r "${FIND_MATCH}" ]; then
KERNEL_CONFIG="$(basename ${FIND_MATCH})"
unset FIND_MATCH
else
# We'll try to fall back on a defconfig if there's one for this $ARCH:
if [ "$ARCH" = "x86_64" ]; then
echo "WARNING:"
echo "Tried and did not find:"
echo " $KERNEL_CONFIGDIR/config-${VERSION}${LOCALVERSION}${CONFIG_SUFFIX}"
echo "Also could not match this fallback:"
echo " $KERNEL_CONFIGDIR/config-*-${LOCALVERSION}${CONFIG_SUFFIX}"
KERNEL_CONFIGDIR=$PKG/usr/src/linux/arch/x86/configs
KERNEL_CONFIG=x86_64_defconfig
KERNEL_NAME=defconfig
echo "Falling back on $KERNEL_CONFIGDIR/$KERNEL_CONFIG because we couldn't find anything better."
sleep 2
elif uname -m | grep -q i.86 ; then
echo "WARNING:"
echo "Tried and did not find:"
echo " $KERNEL_CONFIGDIR/config-${VERSION}${LOCALVERSION}${CONFIG_SUFFIX}"
echo "Also could not match this fallback:"
echo " $KERNEL_CONFIGDIR/config-*-${LOCALVERSION}${CONFIG_SUFFIX}"
KERNEL_CONFIGDIR=$PKG/usr/src/linux/arch/x86/configs
KERNEL_CONFIG=i386_defconfig
KERNEL_NAME=defconfig
echo "Falling back on $KERNEL_CONFIGDIR/$KERNEL_CONFIG because we couldn't find anything better."
sleep 2
else
echo "Error: no matching .config file could be found for this kernel. Tried:"
echo " $KERNEL_CONFIGDIR/config-${VERSION}${LOCALVERSION}${CONFIG_SUFFIX} (not found)"
exit 1
fi
fi
fi
else # We were given a name to use:
if [ "$(echo ${KERNEL_CONFIG} | cut -b 1)" = "/" ]; then # absolute path, split this:
KERNEL_CONFIGDIR=$(dirname ${KERNEL_CONFIG})
KERNEL_CONFIG=$(basename ${KERNEL_CONFIG})
fi
if [ ! -r "$KERNEL_CONFIGDIR/${KERNEL_CONFIG}" ]; then
echo "Error: specified kernel .config $KERNEL_CONFIGDIR/${KERNEL_CONFIG} was not found."
exit 1
fi
fi
# Set LOCALVERSION to the value found inside the .config:
LOCALVERSION="$(cat $KERNEL_CONFIGDIR/${KERNEL_CONFIG} | grep CONFIG_LOCALVERSION= | cut -f 2 -d = | tr -d \")"
echo "Using kernel config: $KERNEL_CONFIGDIR/${KERNEL_CONFIG}"
rm -rf $PKG
mkdir -p $TMP $PKG
mkdir -p $PKG/usr/src
echo "Untarring $CWD/linux-${VERSION}.tar.?z in $PKG/usr/src..."
( cd $PKG/usr/src
tar xf $CWD/linux-${VERSION}.tar.?z || exit 1
echo "Making /usr/src/linux symlink..."
ln -sf linux-* linux
cd linux-*
apply_patches VERBOSE
echo "Copying $KERNEL_CONFIGDIR/${KERNEL_CONFIG} to .config..."
cp -a $KERNEL_CONFIGDIR/${KERNEL_CONFIG} .config
echo "Fixing permissions/ownership..."
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
-exec chmod 755 {} \+ -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \+
) || exit 1
# Kernel is now ready to configure. We will also build this kernel so that
# the installed kernel source package is fully configured, and building an
# out-of-tree module (such as the NVIDIA driver) won't require the user
# to build the kernel sources first.
( cd $PKG/usr/src/linux-*
echo "Making oldconfig..."
make oldconfig
# Use the version number found in the Makefile in the package name. This is not
# always the same as the version in the source tarball's filename. For example,
# linux-4.14.tar.?z will have 4.14.0 as the version in the Makefile:
PACKAGE_VERSION=$(grep "^VERSION = " Makefile | rev | cut -f 1 -d ' ' | rev).$(grep "^PATCHLEVEL = " Makefile | rev | cut -f 1 -d ' ' | rev).$(grep "^SUBLEVEL = " Makefile | rev | cut -f 1 -d ' ' | rev)$(grep "^EXTRAVERSION = " Makefile | rev | cut -f 1 -d ' ' | rev)
if [ ! -r $KERNEL_CONFIGDIR/config-${PACKAGE_VERSION}${LOCALVERSION}${CONFIG_SUFFIX} ]; then
# If you care about saving the original unregenerated unrenamed config
# file, set SAVE_ORIGINAL_KERNEL_CONFIG to something. This might cause
# your kernels to be built twice...
if [ -z "$SAVE_ORIGINAL_KERNEL_CONFIG" ]; then
echo "Removing original .config $KERNEL_CONFIGDIR/${KERNEL_CONFIG}"
rm -v -f $KERNEL_CONFIGDIR/${KERNEL_CONFIG}
fi
echo "Saving new .config as: $KERNEL_CONFIGDIR/config-${PACKAGE_VERSION}${LOCALVERSION}${CONFIG_SUFFIX}"
cp -a .config $KERNEL_CONFIGDIR/config-${PACKAGE_VERSION}${LOCALVERSION}${CONFIG_SUFFIX}
fi
# If we see ONLY_STAGE_KERNEL_SOURCE=yes, then we don't want to build this.
# We're just setting it up for use by the other SlackBuilds.
if [ "$ONLY_STAGE_KERNEL_SOURCE" = "yes" ]; then
echo "Done staging the kernel-source."
sleep 2
exit 0
fi
echo "Building kernel and modules (needed before clean for building NVIDIA to work)..."
make ${NUMJOBS} || exit 1
make ${NUMJOBS} modules || exit 1
echo "Cleaning up..."
make clean
# Make sure header files aren't missing...
make prepare
# Don't package the kernel in the sources:
find . -name "*Image" -exec rm "{}" \+
# No need for these:
rm -f .config.old .version
find . -name "*.cmd" -exec rm -f "{}" \+
rm .*.d
# Still some dotfiles laying around... probably fine though
# Get rid of any ELF (non-eBPF) binaries that are not executable:
find . -type f -perm 0644 ! -name "*.c" ! -name "*.h" ! -name "*.S" ! -name "*.dts*" ! -name "Makefile*" ! -name Kbuild ! -name "*config" ! -name ".git*" ! -name "*.rst" ! -name "*.txt" | xargs file | grep ELF | grep -v eBPF | grep stripped | cut -f 1 -d : | while read elf_binary ; do
rm -f -v $elf_binary
done
# Strip any remaining binaries:
find . -type f ! -name "*.c" ! -name "*.h" ! -name "*.S" ! -name "*.dts*" ! -name "Makefile*" ! -name Kbuild ! -name "*config" ! -name ".git*" ! -name "*.rst" ! -name "*.txt" | xargs file | grep -e "executable" -e "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
) || exit 1
# Just staging the sources? Then leave.
if [ "$ONLY_STAGE_KERNEL_SOURCE" = "yes" ]; then
exit 0
fi
cd $PKG/usr/src/linux-*
# Use the version number found in the Makefile in the package name. This is not
# always the same as the version in the source tarball's filename. For example,
# linux-4.14.tar.?z will have 4.14.0 as the version in the Makefile:
PACKAGE_VERSION=$(grep "^VERSION = " Makefile | rev | cut -f 1 -d ' ' | rev).$(grep "^PATCHLEVEL = " Makefile | rev | cut -f 1 -d ' ' | rev).$(grep "^SUBLEVEL = " Makefile | rev | cut -f 1 -d ' ' | rev)$(grep "^EXTRAVERSION = " Makefile | rev | cut -f 1 -d ' ' | rev)
## Let's not do this because out-of-tree modules might not like it.
## The .config we built with is irrelevant, but set KEEPCONFIG to anything
## if you want to keep it:
#if [ -z "$KEEPCONFIG" ]; then
# rm .config*
#fi
# Make sure the directory and symlink are properly named:
cd ..
rm -f linux
# LOCALVERSION is part of the .config, not really the sources. We're not going
# to include it in the directory name.
mv linux-* linux-${PACKAGE_VERSION} 2> /dev/null
ln -sf linux-* linux
mkdir $PKG/install
cat $CWD/slack-desc/slack-desc.kernel-source > $PKG/install/slack-desc
# Make the package: (also no $LOCALVERSION here)
cd $PKG
/sbin/makepkg -l y -c n $TMP/kernel-source-$(echo ${PACKAGE_VERSION} | tr - _)-noarch-$BUILD.txz

View File

@@ -0,0 +1,19 @@
-----BEGIN PGP SIGNATURE-----
Comment: This signature is for the .tar version of the archive
Comment: git archive --format tar --prefix=linux-6.12.33/ v6.12.33
Comment: git version 2.49.0
iQIzBAABCgAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmhIE+MACgkQONu9yGCS
aT5NWg//ULkP7maUd86t8Tvi7wsTzorHJYfQAL5LKMrBmq2AB6ZhQL+eGxReI99u
cUqJx/ryqOKkF0DB77iAdIfCy2C2l11Myms9D3+ZG7tVi2mlWlj2iHk+bLNJAcVm
5lCnio7l135VHDaCu5AQMVfTjg3V1VSU33Gjedjzm6xY20HEAo4p8Ci1f9wGtvIz
hLGSsGE5tjDPeWQ8ziDUaS127VCPeIOJrHjNaqWxkTGnq43PrWhlNOWAF3wBqG/x
bF80G3ksscRp/GLHmurw4L8KfyTdZRLNaMk1f5qolNlyMts8Men5LBNqu2KP1YRt
tNHh9vv+XVapwk40QLI15gYx6Qz3VGbnNFwPuJXB+19GYzm26mtKztpsJAfD5Owm
cyujAAHBCs56wbRp1vqJ8ELPcZCDBFpNGDtk0NkklGOznRG3vXA3/STxlotvZWld
9x3B0rDpJIG3KuYcY/3IYyr6N81xWfB4dlO1u2Vug9h3cxOX7y4VM3NBdzz/aTmr
eyjyIO1uAoRT1ROHjIkaG23KIKLKwCIaSrsZjPlj4KD8Wf2ywRpNT3B9NJjsAZKp
cdjI96rjw4dvr1uFBVj2G194sl3zPnbMtPTGi94jOeft6+UpbQ7DMQhOXwD6yZQk
M+eIujWRaxbvtqpTAMciY6CdEUolMy3Sc52SQJTU7eWnW9JvEEE=
=nAO1
-----END PGP SIGNATURE-----

View File

@@ -0,0 +1,5 @@
We need to revert this patch which causes boot failure with 32-bit PAE on
*some* machines, such as: LENOVO 20QV000GUS Intel i7-9850H
Non-PAE is not affected, but we'll let this get reverted there too since
it's not part of the code path anyway.

View File

@@ -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 ':'.
|-----handy-ruler------------------------------------------------------|
kernel-generic: kernel-generic (general purpose Linux kernel/modules)
kernel-generic:
kernel-generic: This is a Linux kernel with built-in support for SATA, NVMe, and most
kernel-generic: commonly used filesystems, as well as a large collection of loadable
kernel-generic: kernel modules.
kernel-generic:
kernel-generic: It is recommended to use an initrd with this kernel for best results.
kernel-generic: For more information about creating an initrd, see the README.initrd
kernel-generic: file in the /boot directory.
kernel-generic:
kernel-generic:

View File

@@ -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 ':'.
|-----handy-ruler------------------------------------------------------|
kernel-headers: kernel-headers (Linux kernel include files)
kernel-headers:
kernel-headers: These are the include files from the Linux kernel.
kernel-headers:
kernel-headers: You'll need these to compile most system software for Linux.
kernel-headers:
kernel-headers:
kernel-headers:
kernel-headers:
kernel-headers:
kernel-headers:

View File

@@ -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 ':'.
|-----handy-ruler------------------------------------------------------|
kernel-source: kernel-source (Linux kernel source)
kernel-source:
kernel-source: Source code for Linus Torvalds' Linux kernel.
kernel-source:
kernel-source: This is the complete and unmodified source code for the Linux kernel.
kernel-source:
kernel-source:
kernel-source:
kernel-source:
kernel-source:
kernel-source:

View File

@@ -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 ':'.
|-----handy-ruler------------------------------------------------------|
kernel-source: kernel-source (Linux kernel source)
kernel-source:
kernel-source: Source code for Linus Torvalds' Linux kernel.
kernel-source:
kernel-source: This is the complete and unmodified source code for the Linux kernel.
kernel-source:
kernel-source:
kernel-source:
kernel-source:
kernel-source:
kernel-source:

View File

@@ -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 ':'.
|-----handy-ruler------------------------------------------------------|
%PACKAGE_NAME%: %PACKAGE_NAME% (Linux kernel/modules)
%PACKAGE_NAME%:
%PACKAGE_NAME%: This is the %PACKAGE_NAME% Linux kernel and modules.
%PACKAGE_NAME%:
%PACKAGE_NAME%:
%PACKAGE_NAME%:
%PACKAGE_NAME%:
%PACKAGE_NAME%:
%PACKAGE_NAME%:
%PACKAGE_NAME%:
%PACKAGE_NAME%:

10
kvirc/README Normal file
View File

@@ -0,0 +1,10 @@
KVIrc is the K-Visual IRC Client. It's a free portable Internet
Relay Chat client based on the excellent Qt GUI toolkit. KVIrc is
being written by Szymon Stefanek and The KVIrc Development Team with
the contribution of many IRC addicted developers around the world.
It has a full GUI based configuration, floatable windows, built-in
help browser, addons and themes support (configurable from GUI
or scripting), transparency support, dran'n'drop toolbar editing,
activity notifier as well as proxy support, SSL and IPv6 sockets
support, a modular arch which loads modules only when necessary and a
huge API for writing extensions

14
kvirc/doinst.sh Normal file
View File

@@ -0,0 +1,14 @@
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

120
kvirc/kvirc.SlackBuild Executable file
View File

@@ -0,0 +1,120 @@
#!/bin/bash
# Slackware build script for KVIrc
# Copyright 2011 Elvio "HelLViS69" Basello <hellvis69@slackware.it>
# Copyright 2018 Matteo Bernardini <ponce@slackbuilds.org>, Pisa, Italy
# Copyright 2025 Sergei Fedosoff <eleksir@gmail.com>
# 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.
# 20220301 bkw: Modified by SlackBuilds.org: fix build on 15.0.
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=kvirc
SRCNAM=KVIrc
VERSION=${VERSION:-5.2.8}
BUILD=${BUILD:-1}
TAG=${TAG:-_EXs}
PKGTYPE=${PKGTYPE:-tgz}
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/$TAG}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $SRCNAM-$VERSION
tar xf $CWD/$SRCNAM-$VERSION.tar.?z*
cd $SRCNAM-$VERSION
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 {} \+
# use our *FLAGS
sed -i "s|\"-O3|\"$SLKCFLAGS|" CMakeLists.txt
# 20220301 bkw: older qt5 didn't need this, but Slackware 15.0's does:
sed -i '1i#include <QPainterPath>' src/modules/iograph/libkviiograph.cpp
mkdir build
#cd build
cmake -GNinja \
-DCMAKE_INSTALL_PREFIX=/usr \
-DMANDIR=/usr/man \
-DLIB_SUFFIX=${LIBDIRSUFFIX} \
-DCMAKE_BUILD_TYPE:STRING="Release" \
-DWANT_PERL=ON \
-DWANT_AUDIOFILE=ON \
-DWANT_VERBOSE=ON \
-DWANT_STRIP=ON \
-DWANT_KDE=OFF \
-DWANT_PHONON=OFF \
-DWANT_QTWEBENGINE=OFF \
-B build
ninja -j$(nproc) -C build
DESTDIR=$PKG ninja -C build install
#cd ..
find $PKG/usr/man -type f -exec gzip -9 {} \;
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a COPYING README.md RELEASES doc/*LICENSE* $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

10
kvirc/kvirc.info Normal file
View File

@@ -0,0 +1,10 @@
PRGNAM="KVIrc"
VERSION="5.2.8"
HOMEPAGE="https://kvirc.net"
DOWNLOAD="https://github.com/kvirc/KVIrc/archive/refs/tags/5.2.8/KVIrc-5.2.8.tar.gz"
MD5SUM="cadd5844d06adb071491eb03acfcbe37"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="Sergei Fedosoff"
EMAIL="eleksir@gmail.com"

19
kvirc/slack-desc Normal file
View File

@@ -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------------------------------------------------------|
kvirc: kvirc (The K-Visual IRC Client)
kvirc:
kvirc: KVIrc is a free portable Internet Relay Chat client based
kvirc: on the excellent Qt GUI toolkit. KVIrc is being written by
kvirc: Szymon Stefanek and The KVIrc Development Team with the
kvirc: contribution of many IRC addicted developers around the
kvirc: world
kvirc:
kvirc: Homepage: http://kvirc.net
kvirc:
kvirc:

23
opensc/README Normal file
View File

@@ -0,0 +1,23 @@
SmartCard utilities/libraries for PKCS#11/15 compatible cards
This package provides a set of libraries and utilities to access
smart cards. Its main focus is on cards that support cryptographic
operations, and facilitate their use in security applications such
as mail encryption, authentication, and digital signature. OpenSC
implements the PKCS#11 API so applications supporting this API such
as Mozilla Firefox and Thunderbird can use it. OpenSC implements the
PKCS#15 standard and aims to be compatible with every software that
does so, too.
You may need to edit /etc/opensc.conf in order to use a particular
backend and smartcard.
Beware! Smartcards have usually a limited number of times you may try a
wrong PIN/PUK combination before they become inoperable/permanently
blocked. You have been warned!
Since version 0.12.0, only one reader subsystem can be used and
compiled in at the same time. The PCSC-LITE subsystem is used by
default and it is suitable for most smartcards. If you need the
OPENCT subsystem instead, you have to pass "OPENCT=1" to the script
when building and have the optional dependency openct installed.

18
opensc/doinst.sh Normal file
View File

@@ -0,0 +1,18 @@
config() {
NEW="$1"
OLD="$(dirname $NEW)/$(basename $NEW .new)"
# If there's no config file by that name, mv it over:
if [ ! -r $OLD ]; then
mv $NEW $OLD
elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
# toss the redundant copy
rm $NEW
fi
# Otherwise, we leave the .new copy for the admin to consider...
}
config etc/opensc.conf.new
if [ -x /usr/bin/update-desktop-database ]; then
/usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
fi

134
opensc/opensc.SlackBuild Normal file
View File

@@ -0,0 +1,134 @@
#!/bin/bash
# Slackware build script for opensc
# Copyright 2008-2015 LukenShiro, Italy
# Copyright 2018-2023 Matteo Bernardini <ponce@slackbuilds.org>, Pisa, Italy
# Copyright 2025 Sergei Fedosoff <eleksir@gmail.com>
# 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.
# 20220301 bkw: Modified by SlackBuilds.org, BUILD=2:
# - add update-desktop-database to doinst.sh.
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=opensc
VERSION=${VERSION:-0.26.1}
BUILD=${BUILD:-2}
TAG=${TAG:-_EXs}
PKGTYPE=${PKGTYPE:-tgz}
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/$TAG}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
DOCFILES="README COPYING NEWS"
XSL_STYLESHEETS_VER=$(export LS_OPTIONS='' ; ls -1 /usr/share/xml/docbook/ | grep xsl-stylesheets- | cut -d- -f3)
# opensc now supports only one reader subsystem (pcsc-lite or openct)
OPENCT=${OPENCT:-0} # pcsc-lite is the default, openct disabled
case "$OPENCT" in
0) RDRSUBSYS_flags="--enable-pcsc --disable-openct" ;;
*) RDRSUBSYS_flags="--disable-pcsc --enable-openct" ;;
esac
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
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 {} \+
# --enable-nsplugin and --with-pinentry= are no longer supported.
export CFLAGS="-g $SLKCFLAGS -rdynamic"
export CXXFLAGS="-g $SLKCFLAGS -rdynamic"
export LDFLAGS="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2"
./configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--docdir=/usr/doc/$PRGNAM-$VERSION \
--datarootdir=/usr/share \
--mandir=/usr/man \
--enable-doc \
--with-xsl-stylesheetsdir=/usr/share/xml/docbook/xsl-stylesheets-${XSL_STYLESHEETS_VER} \
$RDRSUBSYS_flags \
--enable-sm \
--enable-piv-sm \
--enable-pcsc \
--enable-static=no \
--build=$ARCH-slackware-linux
make -j$(nproc)
make install-strip DESTDIR=$PKG
gzip -9 $PKG/usr/man/man*/*
rm -f $PKG/usr/lib*/*.la
# Don't clobber the config file
mv $PKG/etc/opensc.conf $PKG/etc/opensc.conf.new
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/
cp -a $DOCFILES $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

10
opensc/opensc.info Normal file
View File

@@ -0,0 +1,10 @@
PRGNAM="opensc"
VERSION="0.26.1"
HOMEPAGE="https://github.com/OpenSC/OpenSC/wiki/"
DOWNLOAD="https://github.com/OpenSC/OpenSC/releases/download/0.26.1/opensc-0.26.1.tar.gz"
MD5SUM="dc3d9ff5131a66d756300fb5cf0d87c2"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="pcsc-lite"
MAINTAINER="Matteo Bernardini"
EMAIL="ponce@slackbuilds.org"

19
opensc/slack-desc Normal file
View File

@@ -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------------------------------------------------------|
opensc: opensc (SmartCard utilities/libraries for PKCS#11/15 compatible cards)
opensc:
opensc: It provides a set of libraries and utilities to access smart
opensc: cards. Its main focus is on cards that support cryptographic
opensc: operations, and facilitate their use in security applications such
opensc: as mail encryption, authentication, and digital signature. OpenSC
opensc: implements the PKCS#11 API so applications supporting this API such
opensc: as Mozilla Firefox and Thunderbird can use it. OpenSC implements
opensc: the PKCS#15 standard and aims to be compatible with every software
opensc: that does so, too.
opensc: Homepage: http://www.opensc-project.org/opensc/

19
pcsc-lite/README Normal file
View File

@@ -0,0 +1,19 @@
PC/SC-lite is a middleware to access a smart card using SCard API
(PC/SC) Its purpose is to provide a Windows(R) SCard interface in a
very small form factor for communicating to smart cards and readers.
Compiling with "DEBUGATR=1 ./pcsc-lite.SlackBuild" enables ATR parsing
debug output messages.
On-demand power on (auto power off) feature for an inserted card is
disabled, now. If you want it re-enabled, so the card is powered off
after a few seconds of inactivity (upstream's default since version
1.6.5) you can compile with "AUTOPOFF=1 ./pcsc-lite.SlackBuild".
pcsc-lite no longer uses (deprecated) libhal for smart-card reader's
detection. By default libudev is used now.
You need to add a user pcscd (257) and a group pcscd (257).
Please see README.SLACKWARE in pcsc-lite's documentation directory
for notes.

View File

@@ -0,0 +1,32 @@
You must have a "pcscd" user and a "pcscd" group to run this script.
To create the user and group you can run these two commands
(uid/gid are set accordingly to http://slackbuilds.org/uid_gid.txt):
# groupadd -g 257 pcscd
# useradd -u 257 -g pcscd -d /var/run/pcscd -s /bin/false pcscd
To start PC/SC-lite daemon, run "/etc/rc.d/rc.pcscd start". This is most
easily accomplished by adding the following to /etc/rc.d/rc.local:
if [ -x /etc/rc.d/rc.pcscd ]; then
/etc/rc.d/rc.pcscd start
fi
For pcmcia readers, this daemon should be started after rc.pcmcia.
Beware!
- PC/SC-lite daemon is meant as _alternative_ to openct: running rc.openctd
and rc.pcscd at the same time can and will lead to unforseeable problems
(specially with usb devices that can be managed by both of them, one daemon
can claim one device, making it unavailable for other daemon).
Smartcard reader's drivers are not included and must be compiled and installed
separately. See DRIVERS file in pcsc-lite's doc directory for more information
on getting and installing specific drivers. pcsc-lite is compiled with the
--enable-usbdropdir=<libdir>/pcsc/drivers flag -- this directory will be the
destination for usb readers' drivers (e.g. ccid, cardman, ...).
Since version 1.6.0, serial support is not really maintained. Upstream
developer deems serial readers as rare, so he no longer provides reader.conf
file: if it's still required, you will have to manually create it in
/etc/reader.conf.d (please see 'man 5 reader.conf' for details).
Since version 1.6.0, events are sent through the socket, so you have to
manually remove unused /var/run/pcscd/pcscd.events/ directory.

26
pcsc-lite/doinst.sh Normal file
View File

@@ -0,0 +1,26 @@
config() {
NEW="$1"
OLD="$(dirname $NEW)/$(basename $NEW .new)"
# If there's no config file by that name, mv it over:
if [ ! -r $OLD ]; then
mv $NEW $OLD
elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
# toss the redundant copy
rm $NEW
fi
# Otherwise, we leave the .new copy for the admin to consider...
}
preserve_perms() {
NEW="$1"
OLD="$(dirname $NEW)/$(basename $NEW .new)"
if [ -e $OLD ]; then
cp -a $OLD ${NEW}.incoming
cat $NEW > ${NEW}.incoming
mv ${NEW}.incoming $NEW
fi
config $NEW
}
preserve_perms etc/rc.d/rc.pcscd.new

View File

@@ -0,0 +1,180 @@
#!/bin/bash
# Slackware build script for pcsc-lite
# Copyright 2007-2015 LukenShiro, Italy
# Copyright 2020-2023 Matteo Bernardini <ponce@slackbuilds.org>, Pisa, Italy
# Copyright 2025 Sergei Fedosoff <eleksir@gmail.com>
# 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.
# 20230801 bkw: Modified by SlackBuilds.org, BUILD=2:
# - handle user and group detection better.
# - get rid of generic GNU INSTALL from doc dir.
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=pcsc-lite
VERSION=${VERSION:-1.9.9}
BUILD=${BUILD:-4}
TAG=${TAG:-_EXs}
PKGTYPE=${PKGTYPE:-tgz}
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/$TAG}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
# Bail out if user or group isn't valid on your system
# For slackbuilds.org, assigned pcscd uid/gid are 257/257
# See http://slackbuilds.org/uid_gid.txt
# 20230801 bkw: grepping /etc/passwd and /etc/group may fail if e.g. NIS
# or LDAP is in use; always use getent. Also, print both messages (for user
# and group) if either doesn't exist.
if ! getent group pcscd &>/dev/null || ! getent passwd pcscd &>/dev/null; then
echo " You must have a \"pcscd\" user and group to run this script."
echo " # groupadd -g 257 pcscd"
echo " # useradd -u 257 -g pcscd -d /var/run/pcscd -s /bin/false pcscd"
exit 1
fi
# Debug is off by default
DEBUGATR=${DEBUGATR:-0}
# Inserted card's automatic poweroff (on-demand power on)
AUTOPOFF=${AUTOPOFF:-0} # disabled by default
# README and README.DAEMON are not useful and partly outdated.
DOCFILES="SECURITY ChangeLog* COPYING HELP NEWS TODO AUTHORS"
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xf $CWD/$PRGNAM-$VERSION.tar.bz2
cd $PRGNAM-$VERSION
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 {} +
# ATR (answer to reset) debug parsing output
case "$DEBUGATR" in
0) DEBUGATR_FLAG="dis" ;;
*) DEBUGATR_FLAG="en" ;;
esac
# disabling/enabling card's automatic power off
case "$AUTOPOFF" in
0) sed -i "s|^\/\* #define DISABLE_ON_DEMAND_POWER_ON \*\/|#define DISABLE_ON_DEMAND_POWER_ON|" \
src/pcscd.h.in
;;
*) ;;
esac
# --enable-runpid=/var/run/pcscd.pid, and
# --enable-muscledropdir="<libdir>/pcsc/services" are not supported anymore;
# pid directory changed to /var/run/pcscd for consistency
# libhal support is gone
# API docs not included anymore
export CFLAGS="$SLKCFLAGS -rdynamic"
export CXXFLAGS="$CFLAGS"
export LDFLAGS="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-s "
./configure \
--prefix=/usr \
--sysconfdir=/etc \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--localstatedir=/var \
--enable-ipcdir=/var/run/pcscd \
--mandir=/usr/man \
--docdir=/usr/doc/$PRGNAM-$VERSION \
--enable-usbdropdir="/usr/lib${LIBDIRSUFFIX}/pcsc/drivers" \
--enable-confdir=/etc/reader.conf.d \
--${DEBUGATR_FLAG}able-debugatr \
--enable-libusb \
--disable-libudev \
--disable-libsystemd \
--build=$ARCH-slackware-linux
make -j$(nproc)
make install DESTDIR=$PKG
# formaticc manpage is not automatically installed
install -Dpm 0644 doc/formaticc.1 $PKG/usr/man/man1/
# PC/SC-lite slackware-compliant daemon
install -Dpm 0755 $CWD/rc.pcscd $PKG/etc/rc.d/rc.pcscd.new
# Correct manpages in reader.conf.5 and pcscd.8
sed -i "s|@confdir@|/etc/reader.conf.d|g" $PKG/usr/man/man5/reader.conf.5 || exit 1
sed -i "s|@sysconfdir_exp@/init.d/pcscd|/etc/rc.d/rc.pcscd|g" $PKG/usr/man/man8/pcscd.8 || exit 1
sed -i "s|@sysconfdir_exp@|/etc/reader.conf.d|g" $PKG/usr/man/man8/pcscd.8 || exit 1
# Create the directory for drivers and such (not included with this package)
mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/pcsc/{drivers,services}
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
find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/
cp -a $DOCFILES $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
cat $CWD/README.SLACKWARE > $PKG/usr/doc/$PRGNAM-$VERSION/README.SLACKWARE
# remove README.DAEMON, automatically installed by doc/Makefile.
rm -f $PKG/usr/doc/$PRGNAM-$VERSION/README.DAEMON
rm -f $PKG/usr/lib*/*.la
install -Dpm 0644 $CWD/slack-desc $PKG/install/slack-desc
install -Dpm 0644 $CWD/doinst.sh $PKG/install/doinst.sh
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE

10
pcsc-lite/pcsc-lite.info Normal file
View File

@@ -0,0 +1,10 @@
PRGNAM="pcsc-lite"
VERSION="1.9.9"
HOMEPAGE="https://pcsclite.apdu.fr/"
DOWNLOAD="https://pcsclite.apdu.fr/files/pcsc-lite-1.9.9.tar.bz2"
MD5SUM="23db832115db702e902baccf21da13aa"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="Matteo Bernardini"
EMAIL="ponce@slackbuilds.org"

66
pcsc-lite/rc.pcscd Normal file
View File

@@ -0,0 +1,66 @@
#!/bin/sh
#
# Start/Stop/Restart the PC/SC-lite smart card daemon.
#
# pcscd should be started after pcmcia and shut down
# before it for smooth experience with PCMCIA readers.
#
PIDFILE=/var/run/pcscd/pcscd.pid
PCSCD_OPTS=""
# Start
pcscd_start() {
if [ -x /usr/sbin/pcscd ]; then
if [ -e "$PIDFILE" ]; then
echo "PC/SC-lite daemon already started!"
else
echo "Starting PC/SC-lite smart card daemon..."
/usr/sbin/pcscd $PCSCD_OPTS
fi
fi
}
# Stop
pcscd_stop() {
echo "Stopping PC/SC-lite smart card daemon..."
if [ -e "$PIDFILE" ]; then
kill $(cat $PIDFILE)
rm -f $PIDFILE 2>&1 >/dev/null
fi
# Just in case:
killall pcscd 2>&1 >/dev/null
}
# Restart
pcscd_restart() {
pcscd_stop
sleep 3
pcscd_start
}
# Status
pcscd_status() {
if [ -e "$PIDFILE" ]; then
echo "pcscd is running."
else
echo "pcscd is stopped."
fi
}
case "$1" in
'start')
pcscd_start
;;
'stop')
pcscd_stop
;;
'restart')
pcscd_restart
;;
'status')
pcscd_status
;;
*)
echo "usage: $0 start|stop|restart|status"
esac

19
pcsc-lite/slack-desc Normal file
View File

@@ -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------------------------------------------------------|
pcsc-lite: pcsc-lite (Middleware to access a smart card using SCard API)
pcsc-lite:
pcsc-lite: Middleware to access a smart card using SCard API (PC/SC)
pcsc-lite: Its purpose is to provide a Windows(R) SCard interface in a
pcsc-lite: very small form factor for communicating to smart cards and
pcsc-lite: readers.
pcsc-lite:
pcsc-lite: Homepage: https://pcsclite.apdu.fr/
pcsc-lite:
pcsc-lite:
pcsc-lite:

View File

@@ -25,7 +25,7 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=psi-plus
VERSION=${VERSION:-1.5.1886}
VERSION=${VERSION:-1.5.2064}
BUILD=${BUILD:-1}
TAG=${TAG:-_EXs}
@@ -59,7 +59,7 @@ rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xf $CWD/$VERSION.tar.gz
tar xf $CWD/$PRGNAM-snapshots-$VERSION.tar.gz
cd $PRGNAM-snapshots-$VERSION
chown -R root:root .
find -L . \

View File

@@ -1,7 +1,7 @@
PRGNAM="psi-plus"
VERSION="1.5.1886"
VERSION="1.5.2064"
HOMEPAGE="http://psi-im.org/"
DOWNLOAD="https://github.com/psi-plus/psi-plus-snapshots/archive/refs/tags/1.5.1886.tar.gz"
DOWNLOAD="https://github.com/psi-plus/psi-plus-snapshots/archive/refs/tags/1.5.2064/psi-plus-snapshots-1.5.2064.tar.gz"
MD5SUM="d16d95d4de325623321dfb609115234c"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""

View File

@@ -0,0 +1,79 @@
From 1cb5647f76dc8cd7bacbce2a64fac9e6c2dc3b16 Mon Sep 17 00:00:00 2001
From: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Tue, 28 Apr 2015 14:32:43 +0300
Subject: [PATCH] client-conf: Add allow-autospawn-for-root
Usually autospawning for root is a bad idea, since it can easily
interfere with other users' PulseAudio instances, but in embedded
environments where only root exists, autospawning is fine.
Upstream-Status: Submitted [http://thread.gmane.org/gmane.comp.audio.pulseaudio.general/23549]
Signed-off-by: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
---
man/pulse-client.conf.5.xml.in | 9 +++++++++
src/pulse/client-conf.c | 1 +
src/pulse/client-conf.h | 1 +
src/pulse/client.conf.in | 1 +
src/pulse/context.c | 2 +-
5 files changed, 13 insertions(+), 1 deletion(-)
--- ./man/pulse-client.conf.5.xml.in.orig 2016-05-10 07:28:04.000000000 -0500
+++ ./man/pulse-client.conf.5.xml.in 2016-06-22 13:39:30.494696654 -0500
@@ -82,6 +82,15 @@
</option>
<option>
+ <p><opt>allow-autospawn-for-root=</opt> Allow autospawning also for root.
+ Takes a boolean value, defaults to <opt>no</opt>. If the <opt>autospawn
+ </opt> option is disabled, this option has no effect. Autospawning for
+ root is disabled by default, because running PulseAudio as root will
+ interfere with regular users' PulseAudio instances. This option should be
+ enabled only in environments where there are no regular users at all.</p>
+ </option>
+
+ <option>
<p><opt>daemon-binary=</opt> Path to the PulseAudio daemon to
run when autospawning. Defaults to a path configured at compile
time.</p>
--- ./src/pulse/client.conf.in.orig 2016-05-03 01:17:39.000000000 -0500
+++ ./src/pulse/client.conf.in 2016-06-22 13:39:30.527696657 -0500
@@ -23,6 +23,7 @@
; default-dbus-server =
; autospawn = yes
+; allow-autospawn-for-root = no
; daemon-binary = @PA_BINARY@
; extra-arguments = --log-target=syslog
--- ./src/pulse/client-conf.c.orig 2016-05-10 07:28:04.000000000 -0500
+++ ./src/pulse/client-conf.c 2016-06-22 13:39:30.505696655 -0500
@@ -138,6 +138,7 @@
{ "default-server", pa_config_parse_string, &c->default_server, NULL },
{ "default-dbus-server", pa_config_parse_string, &c->default_dbus_server, NULL },
{ "autospawn", pa_config_parse_bool, &c->autospawn, NULL },
+ { "allow-autospawn-for-root", pa_config_parse_bool, &c->allow_autospawn_for_root, NULL },
{ "cookie-file", pa_config_parse_string, &c->cookie_file_from_client_conf, NULL },
{ "disable-shm", pa_config_parse_bool, &c->disable_shm, NULL },
{ "enable-shm", pa_config_parse_not_bool, &c->disable_shm, NULL },
--- ./src/pulse/context.c.orig 2016-06-01 05:50:54.000000000 -0500
+++ ./src/pulse/context.c 2016-06-22 13:39:30.536696657 -0500
@@ -1027,7 +1027,7 @@
if (!(flags & PA_CONTEXT_NOAUTOSPAWN) && c->conf->autospawn) {
#ifdef HAVE_GETUID
- if (getuid() == 0)
+ if (!c->conf->allow_autospawn_for_root && getuid() == 0)
pa_log_debug("Not doing autospawn since we are root.");
else {
c->do_autospawn = true;
--- ./src/pulse/client-conf.h.orig 2016-06-22 13:39:30.517696656 -0500
+++ ./src/pulse/client-conf.h 2016-06-22 13:40:11.754699631 -0500
@@ -38,6 +38,7 @@
char *cookie_file_from_application;
char *cookie_file_from_client_conf;
bool autospawn, disable_shm, disable_memfd, auto_connect_localhost, auto_connect_display;
+ bool allow_autospawn_for_root;
size_t shm_size;
} pa_client_conf;

View File

@@ -0,0 +1,27 @@
--- ./man/pulse-client.conf.5.xml.in.orig 2016-01-06 15:33:09.797022947 -0600
+++ ./man/pulse-client.conf.5.xml.in 2016-01-06 15:35:34.902019857 -0600
@@ -73,10 +73,7 @@
<option>
<p><opt>allow-autospawn-for-root=</opt> Allow autospawning also for root.
Takes a boolean value, defaults to <opt>no</opt>. If the <opt>autospawn
- </opt> option is disabled, this option has no effect. Autospawning for
- root is disabled by default, because running PulseAudio as root will
- interfere with regular users' PulseAudio instances. This option should be
- enabled only in environments where there are no regular users at all.</p>
+ </opt> option is disabled, this option has no effect.</p>
</option>
<option>
--- ./src/pulse/client.conf.in.orig 2016-01-06 15:33:09.800022947 -0600
+++ ./src/pulse/client.conf.in 2016-01-06 15:39:33.502014775 -0600
@@ -22,8 +22,8 @@
; default-server =
; default-dbus-server =
-; autospawn = yes
-; allow-autospawn-for-root = no
+autospawn = yes
+allow-autospawn-for-root = yes
; daemon-binary = @PA_BINARY@
; extra-arguments = --log-target=syslog

View File

@@ -0,0 +1,14 @@
--- ./src/daemon/main.c.orig 2015-10-30 07:16:48.000000000 -0500
+++ ./src/daemon/main.c 2016-01-07 15:05:42.131126245 -0600
@@ -647,10 +647,8 @@
}
#ifdef HAVE_GETUID
- if (getuid() == 0 && !conf->system_instance)
- pa_log_warn(_("This program is not intended to be run as root (unless --system is specified)."));
#ifndef HAVE_DBUS /* A similar, only a notice worthy check was done earlier, if D-Bus is enabled. */
- else if (getuid() != 0 && conf->system_instance) {
+ if (getuid() != 0 && conf->system_instance) {
pa_log(_("Root privileges required."));
goto finish;
}

View File

@@ -0,0 +1,91 @@
--- ./shell-completion/bash/pactl.orig 2022-05-28 10:18:37.000000000 -0500
+++ ./shell-completion/bash/pactl 2022-06-02 13:55:52.301595146 -0500
@@ -1,39 +1,45 @@
#!/bin/bash
__cards () {
+ (pactl list cards short 2> /dev/null) |\
while IFS=$'\t' read idx name _; do
printf "%s %s\n" "$idx" "$name"
- done < <(pactl list cards short 2> /dev/null)
+ done
}
__sinks () {
+ (pactl list sinks short 2> /dev/null) |\
while IFS=$'\t' read _ name _ _ _; do
printf "%s\n" "$name"
- done < <(pactl list sinks short 2> /dev/null)
+ done
}
__sinks_idx () {
+ (pactl list sinks short 2> /dev/null) |\
while IFS=$'\t' read idx _ _ _ _; do
printf "%s\n" "$idx"
- done < <(pactl list sinks short 2> /dev/null)
+ done
}
__sources () {
+ (pactl list sources short 2> /dev/null) |\
while IFS=$'\t' read _ name _ _ _; do
printf "%s\n" "$name"
- done < <(pactl list sources short 2> /dev/null)
+ done
}
__sink_inputs () {
+ (pactl list sink-inputs short 2> /dev/null) |\
while IFS=$'\t' read idx _ _ _ _; do
printf "%s\n" "$idx"
- done < <(pactl list sink-inputs short 2> /dev/null)
+ done
}
__source_outputs () {
+ (pactl list source-outputs short 2> /dev/null) |\
while IFS=$'\t' read idx _ _ _ _; do
printf "%s\n" "$idx"
- done < <(pactl list source-outputs short 2> /dev/null)
+ done
}
__ports () {
@@ -77,28 +83,32 @@
}
__all_modules () {
+ (pulseaudio --dump-modules 2> /dev/null) |\
while read name; do
name=${name%% *}
printf "%s\n" "$name"
- done < <(pulseaudio --dump-modules 2> /dev/null)
+ done
}
__loaded_modules () {
+ (pactl list modules short 2> /dev/null) |\
while IFS=$'\t' read idx name _; do
printf "%s %s\n" "$idx" "$name"
- done < <(pactl list modules short 2> /dev/null)
+ done
}
__resample_methods () {
+ (pulseaudio --dump-resample-methods 2> /dev/null) |\
while read name; do
printf "%s\n" "$name"
- done < <(pulseaudio --dump-resample-methods 2> /dev/null)
+ done
}
_pacat_file_formats () {
+ (pacat --list-file-formats 2> /dev/null) |\
while IFS=$'\t' read name _; do
printf "%s\n" "$name"
- done < <(pacat --list-file-formats 2> /dev/null)
+ done
}
in_array() {

44
pulseaudio/doinst.sh Normal file
View File

@@ -0,0 +1,44 @@
config() {
NEW="$1"
OLD="$(dirname $NEW)/$(basename $NEW .new)"
# If there's no config file by that name, mv it over:
if [ ! -r $OLD ]; then
mv $NEW $OLD
elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
# toss the redundant copy
rm $NEW
fi
# Otherwise, we leave the .new copy for the admin to consider...
}
preserve_perms() {
NEW="$1"
OLD="$(dirname ${NEW})/$(basename ${NEW} .new)"
if [ -e ${OLD} ]; then
cp -a ${OLD} ${NEW}.incoming
cat ${NEW} > ${NEW}.incoming
mv ${NEW}.incoming ${NEW}
fi
config ${NEW}
}
config etc/pulse/client.conf.new
config etc/pulse/daemon.conf.new
config etc/pulse/default.pa.new
config etc/pulse/system.pa.new
config etc/xdg/autostart/pulseaudio.desktop.new
preserve_perms etc/rc.d/rc.pulseaudio.new
# Make sure the pulse user is in the audio group:
chroot . /usr/sbin/usermod -a -G audio pulse 1> /dev/null 2> /dev/null
# Make sure the root user is in the audio group:
chroot . /usr/sbin/usermod -a -G audio root 1> /dev/null 2> /dev/null
# Recompile glib schemas:
if [ -e usr/share/glib-2.0/schemas ]; then
if [ -x /usr/bin/glib-compile-schemas ]; then
/usr/bin/glib-compile-schemas usr/share/glib-2.0/schemas >/dev/null 2>&1
fi
fi

View File

@@ -0,0 +1,64 @@
From ed3d4f0837f670e5e5afb1afa5bcfc8ff05d3407 Mon Sep 17 00:00:00 2001
From: Alper Nebi Yasak <alpernebiyasak@gmail.com>
Date: Fri, 1 Dec 2023 13:28:05 +0300
Subject: [PATCH] alsa-ucm: Replace port device UCM context assertion with an
error
The pa_alsa_ucm_set_port() function is passed both a mapping context and
a device port, and both of these refer to their respective UCM device.
While switching over to having one port per mapping per UCM device, I
expected both of these to be the same device struct, so added an assert
checking so.
This assertion gets triggered when we have multiple UCM verbs declaring
the same UCM device name. The root cause here is that the ports' UCM
device references are set once while creating the ports for the card, so
they happen to be those of a specific verb and may not match those from
a different UCM verb's profiles' mappings.
Solving the root cause necessitates a larger refactor. What we actually
assume here is that name of the UCM device is same for both the port and
the UCM context, which ends up always true in practice. For now, replace
the assert with a check and error.
Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/802>
---
src/modules/alsa/alsa-ucm.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/src/modules/alsa/alsa-ucm.c b/src/modules/alsa/alsa-ucm.c
index 7f5136249..018c01739 100644
--- a/src/modules/alsa/alsa-ucm.c
+++ b/src/modules/alsa/alsa-ucm.c
@@ -1581,6 +1581,7 @@ int pa_alsa_ucm_set_port(pa_alsa_ucm_mapping_context *context, pa_device_port *p
pa_alsa_ucm_config *ucm;
pa_alsa_ucm_device *dev;
pa_alsa_ucm_port_data *data;
+ const char *dev_name, *ucm_dev_name;
pa_assert(context && context->ucm);
@@ -1588,8 +1589,17 @@ int pa_alsa_ucm_set_port(pa_alsa_ucm_mapping_context *context, pa_device_port *p
pa_assert(ucm->ucm_mgr);
data = PA_DEVICE_PORT_DATA(port);
- dev = context->ucm_device;
- pa_assert(dev == data->device);
+ dev = data->device;
+ pa_assert(dev);
+
+ if (context->ucm_device) {
+ dev_name = pa_proplist_gets(dev->proplist, PA_ALSA_PROP_UCM_NAME);
+ ucm_dev_name = pa_proplist_gets(context->ucm_device->proplist, PA_ALSA_PROP_UCM_NAME);
+ if (!pa_streq(dev_name, ucm_dev_name)) {
+ pa_log_error("Failed to set port %s with wrong UCM context: %s", dev_name, ucm_dev_name);
+ return -1;
+ }
+ }
return ucm_device_enable(ucm, dev);
}
--
GitLab

Some files were not shown because too many files have changed in this diff Show More