0

Compare commits

..

31 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
86 changed files with 25941 additions and 982 deletions

View File

@@ -1,31 +0,0 @@
From 8a370430c7d855a63d15337e9781933f6e55707f Mon Sep 17 00:00:00 2001
From: Andrey Semenov <semenov.ao@greendatasoft.ru>
Date: Thu, 19 Sep 2024 17:32:37 +0500
Subject: [PATCH] fix: write to lConn even if any error met and some bytes was
read
---
proxy/handler/https.go | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/proxy/handler/https.go b/proxy/handler/https.go
index f709925..bc320fd 100644
--- a/proxy/handler/https.go
+++ b/proxy/handler/https.go
@@ -2,7 +2,6 @@ package handler
import (
"context"
- "errors"
"io"
"net"
"regexp"
@@ -134,7 +133,7 @@ func (h *HttpsHandler) communicate(ctx context.Context, from *net.TCPConn, to *n
bytesRead, err := ReadBytes(ctx, from, buf)
if err != nil {
- if errors.Is(err, io.EOF) && len(bytesRead) > 0 {
+ if len(bytesRead) > 0 {
h.write(logger, td, to, bytesRead)
}
logger.Debug().Msgf("error reading from %s: %s", fd, err)

View File

@@ -1,7 +0,0 @@
Axel accelerates the HTTP/FTP downloading process by using multiple
connections for one file. It can use multiple mirrors for a download.
Axel has no dependencies and is lightweight, so it might be useful as a
wget clone on byte-critical systems. Axel is the perfect utility for
those connections to wherever you are downloading from that may have a
limit on ftp stream speeds, http sessions that burst and slow down, or
servers with a slow connection.

View File

@@ -1,11 +0,0 @@
PRGNAM="SpoofDPI"
VERSION="0.12.0"
HOMEPAGE="https://github.com/xvzc/SpoofDPI"
DOWNLOAD="https://github.com/xvzc/SpoofDPI/archive/refs/tags/v0.12.0/SpoofDPI-0.12.0.tar.gz"
MD5SUM="d43ae5a52c3adf6825bc94775ee88f7f"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
BUILDREQUIRES="google-go-lang"
MAINTAINER="Sergei Fedosoff"
EMAIL="eleksir@gmail.com"

View File

@@ -1,125 +0,0 @@
From a12a13eb4b347899b18cf8df57cc423e55313e2a Mon Sep 17 00:00:00 2001
From: Andrey Semenov <semenov.ao@greendatasoft.ru>
Date: Thu, 19 Sep 2024 17:21:03 +0500
Subject: [PATCH] fix: write to lConn even if io.EOF met and some bytes was
read
---
proxy/handler/https.go | 58 ++++++++++++++++++++++++++++++++----------
1 file changed, 45 insertions(+), 13 deletions(-)
diff --git a/proxy/handler/https.go b/proxy/handler/https.go
index 857fead..f709925 100644
--- a/proxy/handler/https.go
+++ b/proxy/handler/https.go
@@ -2,10 +2,14 @@ package handler
import (
"context"
+ "errors"
+ "io"
"net"
"regexp"
"strconv"
+ "sync"
+ "github.com/rs/zerolog"
"github.com/xvzc/SpoofDPI/packet"
"github.com/xvzc/SpoofDPI/util"
"github.com/xvzc/SpoofDPI/util/log"
@@ -74,36 +78,53 @@ func (h *HttpsHandler) Serve(ctx context.Context, lConn *net.TCPConn, initPkt *p
logger.Debug().Msgf("client sent hello %d bytes", len(clientHello))
// Generate a go routine that reads from the server
- go h.communicate(ctx, rConn, lConn, initPkt.Domain(), lConn.RemoteAddr().String())
- go h.communicate(ctx, lConn, rConn, lConn.RemoteAddr().String(), initPkt.Domain())
+ closeWg := sync.WaitGroup{}
+ closeWg.Add(2)
+ done := make(chan struct{})
+ doneOnce := sync.Once{}
+ closeDoneFunc := func() {
+ close(done)
+ }
+ go func() {
+ defer closeWg.Done()
+ h.communicate(ctx, rConn, lConn, initPkt.Domain(), lConn.RemoteAddr().String())
+ }()
+ go func() {
+ defer closeWg.Done()
+ h.communicate(ctx, lConn, rConn, lConn.RemoteAddr().String(), initPkt.Domain())
+ }()
+ go func(wg *sync.WaitGroup) {
+ wg.Wait()
+ doneOnce.Do(closeDoneFunc)
+ }(&closeWg)
if h.exploit {
logger.Debug().Msgf("writing chunked client hello to %s", initPkt.Domain())
chunks := splitInChunks(ctx, clientHello, h.windowsize)
if _, err := writeChunks(rConn, chunks); err != nil {
logger.Debug().Msgf("error writing chunked client hello to %s: %s", initPkt.Domain(), err)
- return
+ doneOnce.Do(closeDoneFunc)
}
} else {
logger.Debug().Msgf("writing plain client hello to %s", initPkt.Domain())
if _, err := rConn.Write(clientHello); err != nil {
logger.Debug().Msgf("error writing plain client hello to %s: %s", initPkt.Domain(), err)
- return
+ doneOnce.Do(closeDoneFunc)
}
}
+ // wait while conn handling routines stop, then close both connections
+ // current routine will sleep until conn handling routines works
+ <-done
+ _ = lConn.Close()
+ _ = rConn.Close()
+
+ logger.Debug().Msgf("closing proxy connection: %s -> %s", lConn.RemoteAddr(), initPkt.Domain())
}
func (h *HttpsHandler) communicate(ctx context.Context, from *net.TCPConn, to *net.TCPConn, fd string, td string) {
ctx = util.GetCtxWithScope(ctx, h.protocol)
logger := log.GetCtxLogger(ctx)
- defer func() {
- from.Close()
- to.Close()
-
- logger.Debug().Msgf("closing proxy connection: %s -> %s", fd, td)
- }()
-
buf := make([]byte, h.bufferSize)
for {
err := setConnectionTimeout(from, h.timeout)
@@ -113,17 +134,28 @@ func (h *HttpsHandler) communicate(ctx context.Context, from *net.TCPConn, to *n
bytesRead, err := ReadBytes(ctx, from, buf)
if err != nil {
+ if errors.Is(err, io.EOF) && len(bytesRead) > 0 {
+ h.write(logger, td, to, bytesRead)
+ }
logger.Debug().Msgf("error reading from %s: %s", fd, err)
return
}
- if _, err := to.Write(bytesRead); err != nil {
- logger.Debug().Msgf("error writing to %s", td)
+ if !h.write(logger, td, to, bytesRead) {
return
}
}
}
+func (h *HttpsHandler) write(logger zerolog.Logger, connName string, to io.Writer, bytes []byte) (ok bool) {
+ ok = true
+ if _, err := to.Write(bytes); err != nil {
+ logger.Debug().Msgf("error writing to %s", connName)
+ ok = false
+ }
+ return
+}
+
func splitInChunks(ctx context.Context, bytes []byte, size int) [][]byte {
logger := log.GetCtxLogger(ctx)

View File

@@ -1,82 +0,0 @@
#!/bin/sh
# Copyright 2024 Sergei Fedosoff <eleksir@gmail.com>
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "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 COPYRIGHT
# OWNER OR CONTRIBUTORS 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.
source /etc/defaults/spoofdpi
PIDFILE="/run/spoofdpi.pid"
_start() {
# make sure bitlbee isn't running yet
if [ ! -f $PIDFILE ]; then
/usr/sbin/daemonize -p $PIDFILE -- /usr/sbin/spoofdpi $OPTIONS
else
echo "spoofdpi is already active and running under PID: $(cat $PIDFILE)"
echo "if you think this is wrong, remove the offending PID file"
echo "and restart spoof"
exit 1
fi
}
_stop() {
echo -n "Stopping spoofdpi..."
if [ -r $PIDFILE ]; then
kill $(cat $PIDFILE)
for i in 1 2 3; do
if [ -f $PIDFILE ]; then
sleep 1
fi
done
if [ -r $PIDFILE ]; then
kill -9 $(cat $PIDFILE) 2>/dev/null
rm $PIDFILE
fi
echo "done"
else
echo "Unable to find $PIDFILE and stop spoofdpi"
fi
}
# Let's see how we are being called.
case "$1" in
start)
_start
;;
stop)
_stop
;;
restart)
_stop
sleep 3
_start
;;
*)
echo "Usage: $(basename $0) {start|stop|restart}"
exit 1
;;
esac

View File

@@ -1,2 +0,0 @@
# Options for running SpoofDPI daemon
OPTIONS="-addr 127.0.0.1 -port 8080 -no-banner -system-proxy false"

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. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=chrony PRGNAM=chrony
VERSION=${VERSION:-4.5} VERSION=${VERSION:-4.6.1}
BUILD=${BUILD:-1} BUILD=${BUILD:-1}
TAG=${TAG:-_EXs} TAG=${TAG:-_EXs}

View File

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

View File

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

View File

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

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"

View File

@@ -5,15 +5,15 @@
# You must make exactly 11 lines for the formatting to be correct. It's also # 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. # customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------| |-----handy-ruler------------------------------------------------------|
SpoofDPI: SpoofDPI gengetopt: gengetopt (Command Line Parser)
SpoofDPI: gengetopt:
SpoofDPI: A simple and fast software designed to bypass Deep Packet Inspection. gengetopt: Gengetopt is a tool to write command line option parsing code for
SpoofDPI: gengetopt: C programs.
SpoofDPI: gengetopt:
SpoofDPI: gengetopt:
SpoofDPI: gengetopt:
SpoofDPI: Homepage: https://github.com/xvzc/SpoofDPI gengetopt:
SpoofDPI: gengetopt: Project URL: https://www.gnu.org/software/gengetopt
SpoofDPI: gengetopt:
SpoofDPI: gengetopt:

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

@@ -29,10 +29,14 @@
# SOFTWARE. # SOFTWARE.
PRGNAM=google-go-lang PRGNAM=google-go-lang
VERSION=${VERSION:-1.22.5} VERSION=${VERSION:-1.25.1}
BOOTSTRAP0_VERSION=1.4-bootstrap-20171003
BOOTSTRAP1_VERSION=1.18.10 BOOTSTRAP1_VERSION=1.18.10
BOOTSTRAP2_VERSION=1.21.12 BOOTSTRAP2_VERSION=1.21.13
BOOTSTRAP3_VERSION=1.22.5 BOOTSTRAP3_VERSION=1.22.10
BOOTSTRAP4_VERSION=1.23.8
BOOTSTRAP5_VERSION=1.24.7
BOOTSTRAP6_VERSION=$VERSION
BUILD=${BUILD:-1} BUILD=${BUILD:-1}
TAG=${TAG:-_EXs} TAG=${TAG:-_EXs}
@@ -64,12 +68,16 @@ else
fi fi
CWD=$(pwd) CWD=$(pwd)
TMP=${TMP:-/tmp/SBo} TMP=${TMP:-/tmp/EXs}
PKG=$TMP/package-$PRGNAM PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp} OUTPUT=${OUTPUT:-/tmp}
BOOTSTRAP0_DIR="${TMP}/bootstrap-go${BOOTSTRAP0_VERSION}"
BOOTSTRAP1_DIR="${TMP}/bootstrap-go${BOOTSTRAP1_VERSION}" BOOTSTRAP1_DIR="${TMP}/bootstrap-go${BOOTSTRAP1_VERSION}"
BOOTSTRAP2_DIR="${TMP}/bootstrap-go${BOOTSTRAP2_VERSION}" BOOTSTRAP2_DIR="${TMP}/bootstrap-go${BOOTSTRAP2_VERSION}"
BOOTSTRAP3_DIR="${TMP}/bootstrap-go${BOOTSTRAP3_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 set -e
@@ -88,11 +96,13 @@ find -L . \
ORIG_PATH="${PATH}" ORIG_PATH="${PATH}"
export MAKEFLAGS="-j $(nproc)"
echo "" echo ""
echo "Building 1-st bootstrap compiler, ${BOOTSTRAP1_VERSION}" echo "Building 0-th bootstrap compiler, ${BOOTSTRAP0_VERSION}"
mkdir -p "${BOOTSTRAP1_DIR}" mkdir -p "${BOOTSTRAP0_DIR}"
pushd "${BOOTSTRAP1_DIR}" pushd "${BOOTSTRAP0_DIR}"
tar xf $CWD/go${BOOTSTRAP1_VERSION}.src.tar.gz tar xf $CWD/go${BOOTSTRAP0_VERSION}.tar.gz
pushd go pushd go
chown -R root:root . chown -R root:root .
unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED
@@ -106,6 +116,25 @@ pushd "${BOOTSTRAP1_DIR}"
popd 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 # Time to build 2-nd bootstrap compiler
echo "" echo ""
echo "Building 2-nd bootstrap compiler, ${BOOTSTRAP2_VERSION}" echo "Building 2-nd bootstrap compiler, ${BOOTSTRAP2_VERSION}"
@@ -121,7 +150,7 @@ pushd "$BOOTSTRAP2_DIR"
export GOROOT_FINAL="${BOOTSTRAP2_DIR}/go" export GOROOT_FINAL="${BOOTSTRAP2_DIR}/go"
pushd src pushd src
LC_ALL=C ./make.bash LC_ALL=C ./make.bash
$GOROOT/bin/go install std $GOROOT/bin/go install -buildmode=exe std
popd popd
popd popd
popd popd
@@ -141,7 +170,67 @@ pushd "$BOOTSTRAP3_DIR"
export GOROOT_FINAL="${BOOTSTRAP3_DIR}/go" export GOROOT_FINAL="${BOOTSTRAP3_DIR}/go"
pushd src pushd src
LC_ALL=C ./make.bash LC_ALL=C ./make.bash
$GOROOT/bin/go install std $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 popd
popd popd
@@ -149,15 +238,15 @@ popd
# Time to build target compiler # Time to build target compiler
echo "" echo ""
echo "Building target compiler, ${BOOTSTRAP3_VERSION}" echo "Building target compiler, ${BOOTSTRAP6_VERSION}"
export PATH="${BOOTSTRAP3_DIR}/go/bin:${PATH}" export PATH="${BOOTSTRAP6_DIR}/go/bin:${PATH}"
cd "$PKG/usr/lib${LIBDIRSUFFIX}/go${VERSION}/go" cd "$PKG/usr/lib${LIBDIRSUFFIX}/go${VERSION}/go"
unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED
export GOROOT_BOOTSTRAP="$BOOTSTRAP3_DIR/go" export GOROOT_BOOTSTRAP="$BOOTSTRAP6_DIR/go"
export GOROOT="$(pwd)" export GOROOT="$(pwd)"
export GOROOT_FINAL="/usr/lib${LIBDIRSUFFIX}/go${VERSION}/go" export GOROOT_FINAL="/usr/lib${LIBDIRSUFFIX}/go${VERSION}/go"
export GO_LDFLAGS="-s -w" export GO_LDFLAGS="-s -w"
export GO_GCFLAGS="-trimpath" export GO_GCFLAGS="-trimpath -buildvcs=false"
cd src cd src
@@ -170,7 +259,7 @@ else
fi fi
# As of go1.5, golang supports shared libraries, so generate them for use. # 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 .. cd ..

View File

@@ -1,8 +1,8 @@
PRGNAM="google-go-lang" PRGNAM="google-go-lang"
VERSION="1.22.5" VERSION="1.25.1"
HOMEPAGE="https://go.dev/" HOMEPAGE="https://go.dev/"
DOWNLOAD="https://go.dev/dl/go1.18.10.src.tar.gz https://go.dev/dl/go1.21.12.src.tar.gz https://go.dev/dl/go1.22.5.src.tar.gz" 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="002b4daec72ab396dc023a5ec445a68a bb790f2c7b1ee800ab06b4093ce4929e 236b0e3ef35fc7dce73f20535e3cfba7" MD5SUM="dbf727a4b0e365bf88d97cbfde590016 002b4daec72ab396dc023a5ec445a68a 3454362fc56df5020920e43fee2776ab 49b9eb43b62c1bdd9b5af72f61860e2d e72f3d3ecc20466d7721b1892142d900 52eea261435dcd9fe447ce092f156519 86ac635cc05683ae97c77bbeae5bd884"
DOWNLOAD_x86_64="" DOWNLOAD_x86_64=""
MD5SUM_x86_64="" MD5SUM_x86_64=""
REQUIRES="" 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

View File

@@ -4,7 +4,7 @@ config() {
# If there's no config file by that name, mv it over: # If there's no config file by that name, mv it over:
if [ ! -r $OLD ]; then if [ ! -r $OLD ]; then
mv $NEW $OLD mv $NEW $OLD
elif [ "$(cat $OLD|md5sum)" = "$(cat $NEW|md5sum)" ]; then elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
# toss the redundant copy # toss the redundant copy
rm $NEW rm $NEW
fi fi
@@ -22,5 +22,4 @@ preserve_perms() {
config $NEW config $NEW
} }
config etc/default/spoofdpi.new preserve_perms etc/rc.d/rc.haproxy.new
preserve_perms etc/rc.d/rc.spoofdpi.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. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=i3 PRGNAM=i3
VERSION=${VERSION:-4.23} VERSION=${VERSION:-4.24}
BUILD=${BUILD:-2} BUILD=${BUILD:-2}
TAG=${TAG:-_EXs} TAG=${TAG:-_EXs}
@@ -74,8 +74,9 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+
patch -p1 -i $CWD/f8befe378ab3c9f8d035657ca0247c9b8c242b6b.patch patch -p1 --verbose -i ${CWD}/cfa4cf16bea809c7c715a86c428757e577c85254.patch
patch -p1 -i $CWD/b660d6a902cf44be22c434101dd2a4e6743e26bc.patch patch -p1 --verbose -i ${CWD}/2746e0319b03a8a5a02b57a69b1fb47e0a9c22f1.patch
patch -p1 --verbose -i ${CWD}/853b0d9161a5f99c8491751590229a449e4076b6.patch
# Configure, build, and install: # Configure, build, and install:
export CFLAGS="-g3 $SLKCFLAGS -flto -rdynamic" 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/ ln -s /usr/share/xsessions/i3.desktop $PKG/usr/share/apps/kdm/sessions/
# Install an xinitrc script # Install an xinitrc script
mkdir -p $PKG/etc/X11/xinit install -Dpm 0755 $CWD/xinitrc.i3 $PKG/etc/X11/xinit/xinitrc.i3
cat $CWD/xinitrc.i3 > $PKG/etc/X11/xinit/xinitrc.i3
chmod 0755 $PKG/etc/X11/xinit/xinitrc.i3
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/html $PKG/usr/doc/$PRGNAM-$VERSION/txt 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 cp -a DEPENDS LICENSE RELEASE-NOTES-* $PKG/usr/doc/$PRGNAM-$VERSION
@@ -135,7 +134,6 @@ perl Makefile.PL \
INSTALLVENDORMAN1DIR=/usr/man/man1 \ INSTALLVENDORMAN1DIR=/usr/man/man1 \
INSTALLVENDORMAN3DIR=/usr/man/man3 INSTALLVENDORMAN3DIR=/usr/man/man3
make -j$(nproc) make -j$(nproc)
#make test
make install DESTDIR=$PKG make install DESTDIR=$PKG
find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true 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 # man pages
find $PKG/usr/man -type f -exec gzip -9 {} + 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 find $PKG -depth -type d -empty -delete || true
install -Dpm 0644 $CWD/$PRGNAM.SlackBuild $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild install -Dpm 0644 $CWD/$PRGNAM.SlackBuild $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
install -Dpm 0644 $CWD/slack-desc $PKG/install/slack-desc
mkdir -p $PKG/install install -Dpm 0644 $CWD/doinst.sh $PKG/install/doinst.sh
install -Dpm 0644 $CWD/slack-desc $PKG/install/slack-desc install -Dpm 0644 $CWD/slack-required $PKG/install/slack-required
install -Dpm 0644 $CWD/doinst.sh $PKG/install/doinst.sh
install -Dpm 0644 $CWD/slack-required $PKG/install/slack-required
cd $PKG cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

View File

@@ -1,8 +1,8 @@
PRGNAM="i3" PRGNAM="i3"
VERSION="4.23" VERSION="4.24"
HOMEPAGE="https://www.i3wm.org" HOMEPAGE="https://www.i3wm.org"
DOWNLOAD="https://i3wm.org/downloads/i3-4.23.tar.xz" DOWNLOAD="https://i3wm.org/downloads/i3-4.24.tar.xz"
MD5SUM="ea71162d40b403b6098fe833697b747a" MD5SUM="239a821e091e383fb0e3981eac6f8ae9"
DOWNLOAD_x86_64="" DOWNLOAD_x86_64=""
MD5SUM_x86_64="" MD5SUM_x86_64=""
REQUIRES="dmenu libev xcb-util-xrm yajl perl-JSON-XS perl-AnyEvent" 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. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=keepassxc PRGNAM=keepassxc
VERSION=${VERSION:-2.7.9} VERSION=${VERSION:-2.7.10}
BUILD=${BUILD:-1} BUILD=${BUILD:-2}
TAG=${TAG:-_EXs} TAG=${TAG:-_EXs}
if [ -z "$ARCH" ]; then if [ -z "$ARCH" ]; then
@@ -74,8 +74,8 @@ mkdir -p build
cd build cd build
export CFLAGS="$SLKCFLAGS" export CFLAGS="$SLKCFLAGS"
export CXXFLAGS="$CFLAGS -fvectorize -fno-rtti" export CXXFLAGS="$CFLAGS -fvectorize -fno-rtti"
export LDFLAGS="-ltermcap -flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-s " export LDFLAGS="-ltermcap -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-s -Wl,-O2 "
cmake \ cmake -GNinja \
-DCMAKE_C_FLAGS:STRING="$CFLAGS" \ -DCMAKE_C_FLAGS:STRING="$CFLAGS" \
-DCMAKE_CXX_FLAGS:STRING="$CFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$CFLAGS" \
-DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_PREFIX=/usr \
@@ -96,8 +96,8 @@ cd build
-DWITH_APP_BUNDLE=OFF \ -DWITH_APP_BUNDLE=OFF \
.. ..
make -j$(nproc) ninja -j$(nproc)
make install DESTDIR=$PKG DESTDIR=$PKG ninja install
cd .. cd ..
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \

View File

@@ -1,8 +1,8 @@
PRGNAM="keepassxc" PRGNAM="keepassxc"
VERSION="2.7.9" VERSION="2.7.10"
HOMEPAGE="https://github.com/keepassxreboot/keepassxc" HOMEPAGE="https://github.com/keepassxreboot/keepassxc"
DOWNLOAD="https://github.com/keepassxreboot/keepassxc/releases/download/2.7.9/keepassxc-2.7.9-src.tar.xz" DOWNLOAD="https://github.com/keepassxreboot/keepassxc/releases/download/2.7.10/keepassxc-2.7.10-src.tar.xz"
MD5SUM="1d135d224a4f6d4767caa9d8c254767e" MD5SUM="31dfc525fe84bc1985bb011482b8b327"
DOWNLOAD_x86_64="" DOWNLOAD_x86_64=""
MD5SUM_x86_64="" MD5SUM_x86_64=""
REQUIRES="argon2 libsodium qrencode qt5 Botan libminizip" 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

75
SpoofDPI/SpoofDPI.SlackBuild → kvirc/kvirc.SlackBuild Normal file → Executable file
View File

@@ -1,9 +1,10 @@
#!/bin/bash #!/bin/bash
# Slackware build script for SpoofDPI # Slackware build script for KVIrc
# Copyright 2024 Sergei Fedosoff <eleksir@gmail.com> # 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. # All rights reserved.
# #
# Redistribution and use of this script, with or without modification, is # Redistribution and use of this script, with or without modification, is
@@ -23,11 +24,14 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# 20220301 bkw: Modified by SlackBuilds.org: fix build on 15.0.
cd $(dirname $0) ; CWD=$(pwd) cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=SpoofDPI PRGNAM=kvirc
VERSION=${VERSION:-0.12.0} SRCNAM=KVIrc
BUILD=${BUILD:-2} VERSION=${VERSION:-5.2.8}
BUILD=${BUILD:-1}
TAG=${TAG:-_EXs} TAG=${TAG:-_EXs}
PKGTYPE=${PKGTYPE:-tgz} PKGTYPE=${PKGTYPE:-tgz}
@@ -44,7 +48,7 @@ if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
exit 0 exit 0
fi fi
TMP=${TMP:-/tmp/EXs} TMP=${TMP:-/tmp/$TAG}
PKG=$TMP/package-$PRGNAM PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp} OUTPUT=${OUTPUT:-/tmp}
@@ -67,29 +71,50 @@ set -e
rm -rf $PKG rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT mkdir -p $TMP $PKG $OUTPUT
cd $TMP cd $TMP
rm -rf $PRGNAM-$VERSION rm -rf $SRCNAM-$VERSION
tar xf $CWD/$PRGNAM-$VERSION.tar.gz tar xf $CWD/$SRCNAM-$VERSION.tar.?z*
cd $PRGNAM-$VERSION cd $SRCNAM-$VERSION
chown -R root:root . chown -R root:root .
find -L . \ find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
-exec chmod 755 {} \+ -o \ -o -perm 511 \) -exec chmod 755 {} \+ -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-exec chmod 644 {} \+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+
patch -p1 -i $CWD/a12a13eb4b347899b18cf8df57cc423e55313e2a.patch # use our *FLAGS
patch -p1 -i $CWD/8a370430c7d855a63d15337e9781933f6e55707f.patch sed -i "s|\"-O3|\"$SLKCFLAGS|" CMakeLists.txt
CGO_ENABLED=0 go build -ldflags '-w -s -extldflags "-static"' -trimpath -tags timetzdata -o spoofdpi ./cmd/spoofdpi # 20220301 bkw: older qt5 didn't need this, but Slackware 15.0's does:
sed -i '1i#include <QPainterPath>' src/modules/iograph/libkviiograph.cpp
install -Dpm 0755 spoofdpi $PKG/usr/sbin/spoofdpi mkdir build
install -Dpm 0644 $CWD/rc.spoofdpi $PKG/etc/rc.d/rc.spoofdpi.new #cd build
install -Dpm 0644 $CWD/spoofdpi.sysconfig $PKG/etc/default/spoofdpi.new cmake -GNinja \
install -Ddm 0755 $PKG/usr/doc/$PRGNAM-$VERSION -DCMAKE_INSTALL_PREFIX=/usr \
install -Dpm 0644 LICENSE README.md $PKG/usr/doc/$PRGNAM-$VERSION -DMANDIR=/usr/man \
install -Dpm 0644 $CWD/$PRGNAM.SlackBuild $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild -DLIB_SUFFIX=${LIBDIRSUFFIX} \
install -Dpm 0644 $CWD/slack-desc $PKG/install/slack-desc -DCMAKE_BUILD_TYPE:STRING="Release" \
install -Dpm 0644 $CWD/doinst.sh $PKG/install/doinst.sh -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 cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE /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. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=psi-plus PRGNAM=psi-plus
VERSION=${VERSION:-1.5.1886} VERSION=${VERSION:-1.5.2064}
BUILD=${BUILD:-1} BUILD=${BUILD:-1}
TAG=${TAG:-_EXs} TAG=${TAG:-_EXs}
@@ -59,7 +59,7 @@ rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT mkdir -p $TMP $PKG $OUTPUT
cd $TMP cd $TMP
rm -rf $PRGNAM-$VERSION rm -rf $PRGNAM-$VERSION
tar xf $CWD/$VERSION.tar.gz tar xf $CWD/$PRGNAM-snapshots-$VERSION.tar.gz
cd $PRGNAM-snapshots-$VERSION cd $PRGNAM-snapshots-$VERSION
chown -R root:root . chown -R root:root .
find -L . \ find -L . \

View File

@@ -1,7 +1,7 @@
PRGNAM="psi-plus" PRGNAM="psi-plus"
VERSION="1.5.1886" VERSION="1.5.2064"
HOMEPAGE="http://psi-im.org/" 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" MD5SUM="d16d95d4de325623321dfb609115234c"
DOWNLOAD_x86_64="" DOWNLOAD_x86_64=""
MD5SUM_x86_64="" MD5SUM_x86_64=""

View File

@@ -24,7 +24,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=tmux PKGNAM=tmux
#VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} #VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
VERSION='3.4' VERSION='3.5a'
BUILD=${BUILD:-1} BUILD=${BUILD:-1}
# Automatically determine the architecture we're building on: # Automatically determine the architecture we're building on:

View File

@@ -28,7 +28,7 @@
cd $(dirname $0) ; CWD=$(pwd) cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=weechat PRGNAM=weechat
VERSION=${VERSION:-4.2.2} VERSION=${VERSION:-4.6.3}
BUILD=${BUILD:-1} BUILD=${BUILD:-1}
TAG=${TAG:-_EXs} TAG=${TAG:-_EXs}
PKGTYPE=${PKGTYPE:-tgz} PKGTYPE=${PKGTYPE:-tgz}
@@ -85,6 +85,7 @@ cd build
-DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_PREFIX=/usr \
-DENABLE_LUA=OFF \ -DENABLE_LUA=OFF \
-DENABLE_JAVASCRIPT=OFF \ -DENABLE_JAVASCRIPT=OFF \
-DENABLE_CJSON=OFF \
-DENABLE_PHP=OFF \ -DENABLE_PHP=OFF \
-DENABLE_DOC=OFF \ -DENABLE_DOC=OFF \
-DENABLE_MAN=ON \ -DENABLE_MAN=ON \
@@ -106,7 +107,7 @@ mkdir -p $PKG/usr/share/pixmaps
ln -s ../icons/hicolor/32x32/apps/$PRGNAM.png $PKG/usr/share/pixmaps/$PRGNAM.png ln -s ../icons/hicolor/32x32/apps/$PRGNAM.png $PKG/usr/share/pixmaps/$PRGNAM.png
mkdir -p "$PKG/usr/doc/$PRGNAM-$VERSION" mkdir -p "$PKG/usr/doc/$PRGNAM-$VERSION"
cp -a COPYING *.adoc "$PKG/usr/doc/$PRGNAM-$VERSION" cp -a COPYING AUTHORS.md CHANGELOG.md README.md UPGRADING.md "$PKG/usr/doc/$PRGNAM-$VERSION"
cat $CWD/$PRGNAM.SlackBuild > "$PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild" cat $CWD/$PRGNAM.SlackBuild > "$PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild"
mkdir -p $PKG/install mkdir -p $PKG/install

View File

@@ -1,8 +1,8 @@
PRGNAM="weechat" PRGNAM="weechat"
VERSION="4.2.2" VERSION="4.6.3"
HOMEPAGE="https://www.weechat.org" HOMEPAGE="https://www.weechat.org"
DOWNLOAD=" https://weechat.org/files/src/weechat-4.2.2.tar.xz" DOWNLOAD="https://weechat.org/files/src/weechat-4.6.3.tar.xz"
MD5SUM="ca733ed70de755fa298ff45a5b6e61b7" MD5SUM="96dc2d0d883cf61f504144552f30dd31"
DOWNLOAD_x86_64="" DOWNLOAD_x86_64=""
MD5SUM_x86_64="" MD5SUM_x86_64=""
REQUIRES="" REQUIRES=""

6
yubico-piv-tool/README Normal file
View File

@@ -0,0 +1,6 @@
The Yubico PIV tool is used for interacting with the Personal Identity
Verification (PIV) application on a YubiKey.
With it you may generate keys on the device, importing keys and
certificates, and create certificate requests, and other operations. A
shared library and a command-line tool is included.

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------------------------------------------------------|
yubico-piv-tool: yubico-piv-tool (tool for interacting with YubiKey PIV)
yubico-piv-tool:
yubico-piv-tool: The Yubico PIV tool is used for interacting with the Personal
yubico-piv-tool: Identity Verification (PIV) application on a YubiKey.
yubico-piv-tool:
yubico-piv-tool: With it you may generate keys on the device, importing keys
yubico-piv-tool: and certificates, and create certificate requests, and other
yubico-piv-tool: operations.
yubico-piv-tool:
yubico-piv-tool: A shared library and a command-line tool is included.
yubico-piv-tool:

View File

@@ -0,0 +1,4 @@
gengetopt
pcsc-lite
opensc
ccid

View File

@@ -0,0 +1,117 @@
#!/bin/bash
# Slackware build script for yubico-piv-tool
# Copyright 2024 pyllyukko
# 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=yubico-piv-tool
VERSION=${VERSION:-2.7.2}
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"
elif [ "$ARCH" = "aarch64" ]; 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.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 {} \;
export CFLAGS="$SLKCFLAGS -rdynamic"
export CXXFLAGS="$CFLAGS"
export LDFLAGS="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-s "
mkdir -p build
cd build
cmake \
-DCMAKE_C_FLAGS:STRING="$SLKCFLAGS -rdynamic" \
-DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS -rdynamic" \
-DCMAKE_EXE_LINKER_FLAGS:STRING="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DLIB_SUFFIX=${LIBDIRSUFFIX} \
-DYKPIV_INSTALL_MAN_DIR=/usr/man \
-DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
make install/strip DESTDIR=$PKG
cd ..
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 \
COPYING NEWS \
$PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
install -Dpm 0644 $CWD/slack-desc $PKG/install/slack-desc
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

View File

@@ -0,0 +1,10 @@
PRGNAM="yubico-piv-tool"
VERSION="2.7.2"
HOMEPAGE="https://developers.yubico.com/yubico-piv-tool/"
DOWNLOAD="https://developers.yubico.com/yubico-piv-tool/Releases/yubico-piv-tool-2.7.2.tar.gz"
MD5SUM="b50e3e3026ed4097c15f684cb99d13da"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="gengetopt pcsc-lite"
MAINTAINER="pyllyukko"
EMAIL="pyllyukko@maimed.org"

View File

@@ -26,7 +26,7 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=znc PRGNAM=znc
VERSION=${VERSION:-1.9.0} VERSION=${VERSION:-1.10.1}
BUILD=${BUILD:-1} BUILD=${BUILD:-1}
TAG=${TAG:-_EXs} TAG=${TAG:-_EXs}
@@ -83,11 +83,13 @@ find -L . \
mkdir build mkdir build
cd build cd build
# Since 1.10.0 we need to select wt5 explicitly, as it binds to qt6 by default.
export ZNC_QT_VER=5
cmake -GNinja \ cmake -GNinja \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_C_FLAGS:STRING="-g $SLKCFLAGS -rdynamic" \ -DCMAKE_C_FLAGS:STRING="-g $SLKCFLAGS" \
-DCMAKE_CXX_FLAGS:STRING="-g $SLKCFLAGS -rdynamic" \ -DCMAKE_CXX_FLAGS:STRING="-g $SLKCFLAGS" \
-DCMAKE_EXE_LINKER_FLAGS:STRING="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ -DCMAKE_EXE_LINKER_FLAGS:STRING="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \
-DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_PREFIX=/usr \
-DMANDIR=/usr/man \ -DMANDIR=/usr/man \
-DLIBDIR=/usr/lib${LIBDIRSUFFIX} \ -DLIBDIR=/usr/lib${LIBDIRSUFFIX} \
@@ -96,7 +98,7 @@ cmake -GNinja \
-DWANT_ICU=ON \ -DWANT_ICU=ON \
-DWANT_IPV6=ON \ -DWANT_IPV6=ON \
-DWANT_OPENSSL=ON \ -DWANT_OPENSSL=ON \
-DWANT_PERL=ON \ -DWANT_PERL=OFF \
-DWANT_PYTHON=ON \ -DWANT_PYTHON=ON \
-DWANT_SWIG=ON \ -DWANT_SWIG=ON \
-DWANT_TCL=ON \ -DWANT_TCL=ON \

View File

@@ -1,8 +1,8 @@
PRGNAM="znc" PRGNAM="znc"
VERSION="1.9.0" VERSION="1.10.1"
HOMEPAGE="https://wiki.znc.in/ZNC" HOMEPAGE="https://wiki.znc.in/ZNC"
DOWNLOAD="https://znc.in/releases/archive/znc-1.9.0.tar.gz" DOWNLOAD="https://znc.in/releases/znc-1.10.1.tar.gz"
MD5SUM="28c948af16e4b9307760d9fa951abf74" MD5SUM="6b2ffec8c6507ddcaff854457022a832"
DOWNLOAD_x86_64="" DOWNLOAD_x86_64=""
MD5SUM_x86_64="" MD5SUM_x86_64=""
REQUIRES="" REQUIRES=""