#!/bin/bash # Copyright 2005-2021 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=kbd VERSION=1.15.3 BUILD=${BUILD:-6} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; esac fi # If the variable PRINT_PACKAGE_NAME is set, then this script will report what # the name of the created package would be, and then exit. This information # could be useful to other scripts. if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz" exit 0 fi NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "} TMP=${TMP:-/tmp} PKG=$TMP/package-kbd rm -rf $PKG mkdir -p $TMP $PKG cd $TMP # Add some extra fonts: ( cd $PKG ; explodepkg $CWD/sources/extraf.tgz ) # Extract source: rm -rf $PKGNAM-$VERSION tar xvf $CWD/sources/$PKGNAM-$VERSION.tar.?z* || exit 1 cd $PKGNAM-$VERSION || exit 1 # Make sure ownerships and permissions are sane: chown -R root:root . find . -perm 666 -exec chmod 644 {} \+ find . -perm 664 -exec chmod 644 {} \+ find . -perm 600 -exec chmod 644 {} \+ find . -perm 444 -exec chmod 644 {} \+ find . -perm 400 -exec chmod 644 {} \+ find . -perm 440 -exec chmod 644 {} \+ find . -perm 777 -exec chmod 755 {} \+ find . -perm 775 -exec chmod 755 {} \+ find . -perm 511 -exec chmod 755 {} \+ find . -perm 711 -exec chmod 755 {} \+ find . -perm 555 -exec chmod 755 {} \+ # Apply patches: # These are taken from Fedora's SRPM: zcat $CWD/sources/kbd-1.15.2-po.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/sources/kbd-1.15-keycodes-man.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/sources/kbd-1.15-unicode_start.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/sources/kbd-1.15-resizecon-x86_64.patch.gz | patch -p1 --verbose || exit 1 # This is from Mandriva's SRPM: zcat $CWD/sources/kbd-1.15.3-fix-es-translation.patch.gz | patch -p1 --verbose || exit 1 # This is from Fedora's spec file: # 7-bit maps are obsolete; so are non-euro maps ( cd data/keymaps/i386 mv qwerty/fi.map qwerty/fi-old.map cp -fav qwerty/fi-latin9.map qwerty/fi.map cp -fav qwerty/pt-latin9.map qwerty/pt.map cp -fav qwerty/sv-latin1.map qwerty/se-latin1.map mv -fv azerty/fr.map azerty/fr-old.map cp -fav azerty/fr-latin9.map azerty/fr.map cp -fav azerty/fr-latin9.map azerty/fr-latin0.map # legacy alias # Rename conflicting keymaps mv -fv dvorak/no.map dvorak/no-dvorak.map mv -fv fgGIod/trf.map fgGIod/trf-fgGIod.map mv -fv olpc/es.map olpc/es-olpc.map mv -fv olpc/pt.map olpc/pt-olpc.map mv -fv qwerty/cz.map qwerty/cz-qwerty.map ) # Apply a euro fix for the nl.map from alienBOB: zcat $CWD/sources/nl.euro.diff.gz | patch -p1 || exit 1 # Configure: CFLAGS="-fcommon" \ ./configure \ --prefix=/usr \ --localedir=/usr/share/locale/ \ --mandir=/usr/man \ --docdir=/usr/doc/$PKGNAM-$VERSION \ --datadir=/usr/share/kbd \ --enable-nls || exit 1 # Build: make $NUMJOBS || exit 1 # Install into package: make install DESTDIR=$PKG || exit 1 # This is where it's always been in Slackware, so let's move it back: ( cd $PKG mkdir -vpm755 bin mv -fv usr/bin/loadkeys bin/ cd usr/bin ; ln -vsf ../../bin/loadkeys . ) # Build/install resizecons: ( cd src make resizecons || exit 1 cp resizecons $PKG/usr/bin ) || exit 1 # ro_win.map.gz is useless rm -fv $PKG/usr/share/kbd/keymaps/i386/qwerty/ro_win.map.gz # The rhpl keyboard layout table is indexed by kbd layout names, so we need a # Korean keyboard ln -vfs us.map.gz $PKG/usr/share/kbd/keymaps/i386/qwerty/ko.map.gz # Install the setup script that will be run from the Slackware installer: mkdir -pm755 $PKG/var/log/setup install -vpm755 $CWD/setup.setconsolefont $PKG/var/log/setup/ install -vpm755 $CWD/setconsolefont $PKG/usr/bin/ # Copy docs: mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION cp -a \ COPYING* README* doc/* \ $PKG/usr/doc/$PKGNAM-$VERSION rm -f $PKG/usr/doc/$PKGNAM-$VERSION/kbd.FAQ.sgml # 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/${PKGNAM}-$VERSION) cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog touch -r ChangeLog $DOCSDIR/ChangeLog fi # Additional keymaps: # This is the keymap for Speakup (http://linux-speakup.org) users: cat $CWD/sources/speakupmap.map.gz > $PKG/usr/share/kbd/keymaps/i386/qwerty/speakupmap.map.gz # Another keymap for Speakup from Thomas Ward, for JFW users. tar xvf $CWD/sources/speakup-jfw.tar.gz ( cd speakup-jfw cat speakup-jfw.map | gzip -9c > $PKG/usr/share/kbd/keymaps/i386/qwerty/speakup-jfw.map.gz cat readme > $PKG/usr/share/kbd/keymaps/i386/qwerty/speakup-jfw.readme ) # Create the default run control script which will set the # console font to the "default"... though this might not be # the same state as if setfont were not used at all. # For that reason, default the script to non-executable. mkdir -pm755 $PKG/etc/rc.d cat << EOF > $PKG/etc/rc.d/rc.font.new #!/bin/bash # # This selects your default screen font from among the ones in # /usr/share/kbd/consolefonts. # setfont -v EOF chmod 644 $PKG/etc/rc.d/rc.font.new # Create package post-install script: mkdir -p $PKG/install cat << EOF > $PKG/install/doinst.sh 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... } # Leave any new rc.font with the same permissions as the old one: # This is a kludge, but it's because there's no --reference option # on busybox's 'chmod': if [ -e etc/rc.d/rc.font ]; then if [ -x etc/rc.d/rc.font ]; then chmod 755 etc/rc.d/rc.font.new else chmod 644 etc/rc.d/rc.font.new fi fi # Then config() it: config etc/rc.d/rc.font.new EOF # 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 package description: install -vpm644 $CWD/slack-desc $PKG/install/ # Strip binaries: ( cd $PKG find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null ) cd $PKG /sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz