#!/bin/bash ulimit -s unlimited shopt -s extglob # tigervnc.SlackBuild # Heavily based on the original Slackware build scripts, # Modified by Stuart Winter for Slackware ARM. # # Copyright 2010, 2011, 2012, 2013, 2014, 2015 Eric Hameleers, Eindhoven. NL # Copyright 2015-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. # Record toolchain & other info for the build log: slackbuildinfo # Paths to skeleton port's source & real Slackware source tree: slackset_var_cwds # Temporary build locations: export TMPBUILD=$TMP/build-$PKGNAM export PKG=$TMP/package-$PKGNAM mkpkgdirs # Delete & re-create temporary directories then cd into $TMPBUILD # Add -fPIC to CFLAGS: case $ARCH in arm|aarch64) export SLKCFLAGS="$SLKCFLAGS -fPIC" export LIBDIRSUFFIX="" ;; *) export SLKCFLAGS="-O2" ;; esac case "$ARCH" in arm*) TARGET=${SLK_ARCH_HOST} ;; *) TARGET=${SLK_ARCH_HOST} ;; esac # To save on maintenance, and since we carry the same versions as x86 Slackware, # let's pull the version numbers from the x86 trunk: pushd $CWD XSB=$CWD/$PKGNAM.SlackBuild [ ! -x $XSB ] && { echo "ERROR: Cannot find x86 SlackBuild for ${PKGNAM}!" ; exit 1; } for upstreamvar in \ XORGVER \ JAVA_APPLET \ ; do eval $( egrep "^${upstreamvar}=" $XSB ) echo "Upstream variable: ${upstreamvar} version $( eval $( echo "echo \$${upstreamvar}" ) )" done popd # Create some build framework: mkdir -p $TMPBUILD/deps/usr # Extract source: tar xvvf $CWD/$PKGNAM-$VERSION.tar.!(*sign|*asc|*sig) cd $PKGNAM-$VERSION || failextract # Extract the X server sources: tar xvf $CWD/xorg-server-$XORGVER.tar.?z --strip-components=1 -C unix/xserver || exit 1 # Patch the X server sources: ( cd unix/xserver zcat $CWD/patches/xserver120.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/0001-Always-install-vbe-and-int10-sdk-headers.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/0001-autobind-GPUs-to-the-screen.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/06_use-intel-only-on-pre-gen4.diff.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/fix-nouveau-segfault.diff.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/fix-pci-segfault.diff.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/x11.startwithblackscreen.diff.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/xorg-server.combo.mouse.keyboard.layout.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2023-6377.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2023-6478.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2023-6816.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2024-0229.01.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2024-0229.02.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2024-0229.03.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2024-0408.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2024-0409.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2024-21885.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2024-21886.01.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2024-21886.02.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2024-31080.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2024-31081.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2024-31082.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/xorg-server/CVE-2024-31083.patch.gz | patch -p1 --verbose || exit 1 autoreconf -vif || exit 1 ) || failpatch # HACK! Force protocol 3.3 for UVNCSC zcat $CWD/patches/force_protocol_3.3_for_UVNCSC.patch.gz | patch -p1 || exit 1 # Fix pam.d file: zcat $CWD/patches/tigervnc.pam.d.diff.gz | patch -p1 --verbose || exit 1 if [ "$JAVA_APPLET" = "ON" ]; then # Explicitly put the java applet into a directory named 'tigervnc': sed -i -e 's#/vnc/class#/tigervnc/class#'g $(grep -rl vnc/class .) sed -i -e 's#DESTINATION vnc/class#DESTINATION share/tigervnc/class#'g $(grep -rl vnc/class .) fi slackhousekeeping # Configure: cmake \ -G "Unix Makefiles" \ -Wno-dev \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_INSTALL_PREFIX=/usr \ -DSYSCONF_INSTALL_DIR=/etc \ -DLIB_SUFFIX=${LIBDIRSUFFIX} \ -DENABLE_PAM:BOOL=ON \ -DINSTALL_SYSTEMD_UNITS=OFF \ -DBUILD_JAVA:BOOL=${JAVA_APPLET} \ . || failconfig # Build: make V=1 $NUMJOBS || make || failmake # Install into package: make DESTDIR=$PKG install || failinstall # Build and install the VNC server: ( cd unix/xserver # Default font paths to be used by the X server DEF_FONTPATH="/usr/share/fonts/local,/usr/share/fonts/TTF,/usr/share/fonts/OTF,/usr/share/fonts/Type1,/usr/share/fonts/misc,/usr/share/fonts/CID,/usr/share/fonts/75dpi/:unscaled,/usr/share/fonts/100dpi/:unscaled,/usr/share/fonts/75dpi,/usr/share/fonts/100dpi,/usr/share/fonts/cyrillic" ./configure \ --prefix=/usr \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --sysconfdir=/etc \ --localstatedir=/var \ --disable-dri --enable-dri2 --disable-dri3 \ --disable-static \ --disable-xorg --disable-xnest --disable-xvfb --disable-dmx \ --disable-xwin --disable-xephyr --disable-kdrive --disable-xwayland \ --enable-composite \ --enable-glx --enable-glx-tls \ --enable-install-libxf86config \ --enable-xcsecurity \ --enable-xinerama \ --with-int10=x86emu \ --with-default-font-path="${DEF_FONTPATH}" \ --with-dri-driver-path=/usr/lib${LIBDIRSUFFIX}/xorg/modules/dri \ --with-module-dir=/usr/lib${LIBDIRSUFFIX}/xorg/modules \ --with-pic \ --with-xkb-path=/etc/X11/xkb \ --with-xkb-output=/var/lib/xkb \ --disable-config-dbus \ --disable-config-hal \ --disable-config-udev \ --disable-docs --disable-devel-docs \ --disable-selective-werror \ --disable-unit-tests \ --without-dtrace \ --with-os-name="$(head -1 /etc/slackware-version)" \ --with-os-vendor="Slackware Linux Project" \ --with-builderstring="Built by Slackware for xorg-server-$XORGVER" \ --build=$TARGET || failconfig # Build: make V=1 TIGERVNC_SRCDIR="$TMPBUILD/${PKGNAM}-${VERSION}" $NUMJOBS || failmake # Install into package: make TIGERVNC_SRCDIR="$TMPBUILD/${PKGNAM}-${VERSION}" -C hw/vnc DESTDIR=$PKG install || failinstall ) || failmake # Relocate the man pages: mv $PKG/usr/share/man $PKG/usr # Remove installed docs (we'll install them later): rm -r $PKG/usr/share/doc # Provide a sample configuration for the libvnc.so extension of X.Org, # documentation is available inside the file: mkdir -p $PKG/etc/X11/xorg.conf.d install -m644 $CWD/10-libvnc.conf $PKG/etc/X11/xorg.conf.d/10-libvnc.conf.new # Install icons: mkdir -p $PKG/usr/share/icons/hicolor/{16x16,24x24,32x32,48x48}/apps for PSIZE in 16 24 32 48; do install -m644 media/icons/tigervnc_${PSIZE}.png \ $PKG/usr/share/icons/hicolor/${PSIZE}x${PSIZE}/apps/tigervnc.png done # Check some additional locations for a suitable startup script, in this order: # 1. $HOME/.vnc/xstartup # 2. $HOME/.xinitrc # 3. /etc/X11/xinit/xinitrc ( cd $PKG/usr/libexec zcat $CWD/patches/vncserver.xinitrc.diff.gz | patch -p1 --verbose || exit 1 rm -f vncserver.orig ) || exit 1 # Make a symlink for vncserver in the old location: if [ ! -r $PKG/usr/bin/vncserver ]; then ( cd $PKG/usr/bin ; ln -sf ../libexec/vncserver . ) fi # Add a documentation directory: mkdir -p $PKG/usr/doc/${PKGNAM}-$VERSION cp -fav \ BUILDING* LICENCE* README* doc/* \ $PKG/usr/doc/${PKGNAM}-$VERSION cp -fav \ unix/xserver/COPYING \ $PKG/usr/doc/${PKGNAM}-$VERSION/COPYING.xorg-server # Apply generic Slackware packaging policies: cd $PKG slackstripall # strip all .a archives and all ELFs #slackstriprpaths # strip rpaths slack_delete_lafiles # delete usr/lib{,64}/*.la slackgzpages -i # compress man & info pages and delete usr/info/dir slackslack # chown -R root:root, chmod -R og-w, slackchown, slack644docs slackdesc # install slack-desc and doinst.sh slackmp # run makepkg -l y -c n # Perform any final checks on the package: cd $PKG slackhlinks # search for any hard links