#!/bin/sh
# Copyright 2007-2018 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
# Permission to use, copy, modify, and distribute this software for
# any purpose with or without fee is hereby granted, provided that
# the above copyright notice and this permission notice appear in all
# copies.
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR
# 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.
# -----------------------------------------------------------------------------
# Condensed from the modular x11.SlackBuild
# 2016, 2017, 2018 by Eric Hameleers <alien@slackware.com>
# Note: this package contains _all_ X servers. Not just Xorg, but also:
# Xnest, Xephyr, Xvfb, Xwayland.
PKGNAM=xorg-server
VERSION=${VERSION:-1.19.6}
BUILD=${BUILD:-2}
cd $(dirname $0) ; CWD=$(pwd)
TMP=${TMP:-/tmp}
PKG=$TMP/package-$PKGNAM
# Automatically determine the architecture we're building on:
MARCH=$( uname -m )
if [ -z "$ARCH" ]; then
case "$MARCH" in
i?86) export ARCH=i586 ;;
arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
# Unless $ARCH is already set, use uname -m for all other archs:
*) export ARCH=$MARCH ;;
esac
fi
# If this variable is passed to the script, nothing will be built.
# Instead, a list of packages to be built will be output.
if [ ! -z "$PRINT_PACKAGE_NAME" ]; then
echo "${PKGNAME}-${VERSION}-${ARCH}-${BUILD}.txz"
exit 0
fi
# Set CFLAGS/CXXFLAGS and LIBDIRSUFFIX:
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "s390" ]; then
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
elif [ "$ARCH" = "armv7hl" ]; then
SLKCFLAGS="-O3 -march=armv7-a -mfpu=vfpv3-d16"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "arm" ]; then
SLKCFLAGS="-O2 -march=armv5te"
LIBDIRSUFFIX=""
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
case "$ARCH" in
arm*) TARGET=$ARCH-slackware-linux-gnueabi ;;
*) TARGET=$ARCH-slackware-linux ;;
esac
rm -rf $PKG
mkdir -p $TMP $PKG
cd $TMP
rm -rf $PKGNAM-$VERSION
tar xvf $CWD/$PKGNAM-$VERSION.tar.xz || exit 1
cd $PKGNAM-$VERSION || exit 1
# Apply patches:
cat $CWD/patches/x11.startwithblackscreen.diff | patch -p1 --verbose || exit 1
cat $CWD/patches/xorg-server.combo.mouse.keyboard.layout.patch | patch -p1 --verbose || exit 1
# Make sure ownerships and permissions are sane:
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 {} \;
# Servers to build:
BUILD_SERVERS=" \
--enable-xorg \
--enable-dmx \
--enable-xvfb \
--enable-xnest \
--enable-glamor \
--enable-kdrive \
--enable-xephyr \
--enable-xfbdev \
--enable-xwayland \
--enable-config-udev \
--enable-kdrive-evdev \
--enable-kdrive-kbd \
--enable-kdrive-mouse \
--disable-config-hal \
--disable-systemd-logind"
#MESA_VERSION=${MESA_VERSION:-7.5} # unused in 1.7+
# 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"
# Reconf (don't remove this plz):
autoreconf -vif
CFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
--localstatedir=/var \
--infodir=/usr/info \
--mandir=/usr/man \
--disable-static \
--with-pic \
--enable-suid-wrapper \
--with-int10=x86emu \
--with-default-font-path="${DEF_FONTPATH}" \
--with-module-dir=/usr/lib${LIBDIRSUFFIX}/xorg/modules \
--with-os-name="Slackware 15.0" \
--with-os-vendor="Slackware Linux Project" \
--with-shared-memory-dir=/dev/shm \
--with-xkb-path=/etc/X11/xkb \
--with-xkb-output=/var/lib/xkb \
$BUILD_SERVERS \
--build=$TARGET
# --with-dri-driver-path=/usr/lib${LIBDIRSUFFIX}/xorg/modules/dri
if [ "$ARCH" = "x86_64" ]; then
# To prevent the error "No rule to make target `-ldl'"
sed -i -e 's#-ldl##' hw/xfree86/Makefile
sed -i -e 's#-lm#-lm -ldl#' hw/xfree86/Makefile
fi
# Build and install:
make || exit 1
make install DESTDIR=$PKG || exit 1
# Fix suid setting, Makefile gets the order of install and chmod wrong:
chmod u+s $PKG/usr/libexec/Xorg.wrap
# Create the configuration directories for xorg-server 1.9.x
mkdir -p $PKG/etc/X11/xorg.conf.d $PKG/usr/share/X11/xorg.conf.d
# Create a sample keyboard layout
# Enable zapping by default
cat << EOF > $PKG/usr/share/X11/xorg.conf.d/90-keyboard-layout-evdev.conf
Section "InputClass"
Identifier "keyboard-all"
MatchIsKeyboard "on"
MatchDevicePath "/dev/input/event*"
Driver "evdev"
Option "XkbLayout" "us"
#Option "XkbVariant" ""
Option "XkbOptions" "terminate:ctrl_alt_bksp"
EndSection
# READ THIS FOR CUSTOM KEYBOARD INFORMATION
#
# If you want to add a custom model/layout/variant to X, you will need to COPY
# this file to /etc/X11/xorg.conf.d/ and edit that copy. After editing it to
# suit, you will need to restart X.
#
# Here's an example of the lines from above:
#
# Section "InputClass"
# Identifier "keyboard-all"
# MatchIsKeyboard "on"
# MatchDevicePath "/dev/input/event*"
# Driver "evdev"
# Option "XkbLayout" "us"
# Option "XkbVariant" "intl"
# Option "XkbOptions" "compose:rwin,terminate:ctrl_alt_bksp"
# EndSection
#
# Many desktop environments, including KDE and Xfce, have their own methods to
# configure keyboard layouts and such if you'd like to use them.
#
# If you prefer to use the "old" way of configuring keyboards (without input
# device hotplugging), then you'll need to add the following lines to the
# ServerFlags section of /etc/X11/xorg.conf:
# Option "AllowEmptyInput" "false"
# Option "AutoAddDevices" "false"
# Option "AutoEnableDevices" "false"
# Alternatively, you can break this up into separate "stubs" in the xorg.conf.d/
# directory, but that's your call. Assuming you elect to keep a monolithic
# /etc/X11/xorg.conf file, you can now edit the Keyboard section as usual.
EOF
## Nope, we will not include 91-keyboard-layout-libinput.conf in the
## xorg-server package. It is better to put it into the xf86-input-libinput
## package so that if that driver is removed, then X.Org will fall back to
## using evdev. Perhaps we'll revisit this arrangement when evdev is a little
## bit more obsolete. :-)
##
#sed -e 's,Identifier "keyboard-all",Identifier "libinput keyboard catchall",g' \
# -e 's,Driver "evdev",Driver "libinput",g' \
# $PKG/usr/share/X11/xorg.conf.d/90-keyboard-layout-evdev.conf > \
# $PKG/usr/share/X11/xorg.conf.d/91-keyboard-layout-libinput.conf
# Don't mess with my /var/log/ permissions:
rmdir $PKG/var/log 2>/dev/null
rmdir $PKG/var 2>/dev/null
# While I hate to have X11 take over another generic-sounding
# piece of prime filesystem real estate, this symlink will
# direct (for now) proprietary X drivers into the corrent
# location:
( cd $PKG/usr/lib${LIBDIRSUFFIX}
rm -rf modules
ln -sf xorg/modules .
)
# Strip binaries:
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
# Don't ship .la files:
rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la
# 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
# Add documentation:
mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
cp -a \
COPYING ChangeLog INSTALL README TODO \
$PKG/usr/doc/$PKGNAM-$VERSION
# Add a description:
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
# Create the package:
cd $PKG
/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz