#!/bin/bash # Heavily based on the Slackware 14.0 SlackBuild # Written by Matteo Rossini ( zerouno@slacky.it ) # Last build from Matteo Rossini ( zerouno@slacky.it ) # Slackware build script for compat32 multilibs # Official Site: http://www.slackware.com # 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. set -e SLACK=${SLACK:-14.0} PKGNAME=compat32-libraries VERSION=2.0 BUILD=${BUILD:-1} TAG=${TAG:-sl} ARCH=${ARCH:-x86_64} SOURCE=http://ftp.osuosl.org/pub/slackware/slackware-$SLACK/slackware TAR= # empty = auto DIR= # empty = auto SLACKBUILD="packages.txt" # If EULA if [ -e EULA.TXT ];then more EULA.TXT echo "Do you accept terms? (yes/[no])" read ACCEPT if [ "$ACCEPT" != "yes" ];then echo; echo "SlackBuild Aborted!!" exit 1 fi fi CWD=`pwd` TMP=${TMP:-/tmp/buildpkgs/$PKGNAME} FILES=${FILES:$CWD/source} PKG=$TMP/$PKGNAME-package SRC=$TMP/src-$VERSION OUTPUT=${OUTPUT:-$CWD} PKGLIST=$(cat $CWD/packages.txt) TAR=${TAR:-$(basename $SOURCE)} DIR=${DIR:-$(echo "$TAR"|sed -r 's/(\.tar|)(.gz|.bz2|.xz|)$//')} rm -rf $SRC $PKG $PKGTMP $TMP mkdir -p $TMP $PKG $SRC $FILES CHECKSUMS=$FILES/CHECKSUMS-$SLACK.md5 # if you choose to build 'current' you may need to delete manually an existent CHECKSUMS.md5 rm -f $CHECKSUMS wget $WGETOPT -O $CHECKSUMS $SOURCE/CHECKSUMS.md5 DOINST=$PKG/install/doinst.sh mkdir -p $PKG/install/ > $DOINST mkdir -p $PKG/usr/doc/$PKGNAME-$VERSION mkdir -p $PKG/usr/doc/$PKGNAME-$VERSION/content NPACKS=$(echo $PKGLIST|wc -w ) PACKN=0 for PACK in $PKGLIST;do PACKN=$[$PACKN+1] cd $SRC SPLIT=($(cat $CHECKSUMS |grep "/$PACK-[^-]*-[^-]*-[^\.].t.z$"|sed -r 's#^([a-f0-9]*) *\./([a-z]*)/.*-([^-]*)-([^-]*)-([^\.]*)\.(t.z)$#\1 \2 \3 \4 \5 \6#')) PACKMD5=${SPLIT[0]} PACKNM=$PACK PACKLOC=${SPLIT[1]} PACKVER=${SPLIT[2]} PACKARCH=${SPLIT[3]} PACKBUILD=${SPLIT[4]} PACKEXT=${SPLIT[5]} PACKNAME=$PACKNM-$PACKVER-$PACKARCH-$PACKBUILD PACKFILE=$FILES/$PACKNAME.$PACKEXT PACKURL=$SOURCE/$PACKLOC/$PACKNAME.$PACKEXT echo -n "$PACKN/$NPACKS = PACKAGE: $PACKNM - ver: $PACKVER - arch: $PACKARCH - build: $PACKBUILD - ext: $PACKEXT - group: $PACKLOC... " if [ -e $PACKFILE ];then if [ "$PACKMD5" != "$(cat $PACKFILE|md5sum 2>/dev/null|awk '{print $1}')" ];then rm -f $PACKFILE fi fi if [ ! -e $PACKFILE ];then echo "Download 32bit package... " wget $WGETOPT $PACKURL -O $PACKFILE fi if [ "$PACKMD5" != "$(cat $PACKFILE|md5sum 2>/dev/null|awk '{print $1}')" ];then echo "ABORT! MD5 DOES NOT MATCH ($PACKFILE). REMOVE IT AND RETRY." exit 1 fi PKGTMP=$SRC/$PACKNAME rm -rf $PKGTMP mkdir -p $PKGTMP echo -n "Exploding package... " cd $PKGTMP ( umask 000; tar xf $PACKFILE install usr/lib/ lib/ usr/bin/ etc/gtk-2.0/ etc/gtk-3.0/ etc/pango/ 2>/dev/null||true) if [ -e install/doinst.sh ];then cp -f install/doinst.sh $SRC/$PACKNAME.sh;fi # Only some of 32bit binaries (needed for boot): if [ "$PACKNM" = "gtk+2" -o "$PACKNM" = "gtk+3" -o "$PACKNM" = "pango" -o "$PACKNM" = "gdk-pixbuf2" ]; then find usr/bin -type f ! -name "*-32" -exec mv {} {}-32 \; elif [ -d usr/bin ]; then #mkdir ./32 #find usr/bin -type f -exec mv {} ./32 \; #rm -rf usr/bin/* #mv ./32 usr/bin/ rm -rf usr/bin/ fi >>install/doinst.sh sed -i -e '/( cd usr\/doc/d' -e '/\/bin\/sh/d' install/doinst.sh if [ "$PACKNM" = "gtk+2" -o "$PACKNM" = "gtk+3" -o "$PACKNM" = "pango" -o "$PACKNM" = "gdk-pixbuf2" ]; then sed -i '/( cd usr\/bin/d' install/doinst.sh #if [ "$PACKNM" = "gtk+2" ]; then sed -i 's/\$(uname -m)/i486/' install/doinst.sh;fi #if [ "$PACKNM" = "gtk+3" ]; then sed -i 's/\$(uname -m)/i486/' install/doinst.sh;fi elif [ "$PACKNM" = "glibc-solibs" ];then #rm -rf usr/bin/* sed -i '/glibc.sh.new\|glibc.csh.new/d' install/doinst.sh else sed -i '/etc\/ld.so.conf/d' install/doinst.sh # Only keep lines that deal with symlinks in bin/32 and lib directories: sed -i -n '/lib \|lib\//p' install/doinst.sh #sed -i -n '/usr\/bin \|lib \|lib\//p' install/doinst.sh #sed -i 's#usr/bin#usr/bin/32#g' install/doinst.sh fi # The binutils need some extra consideration because the libraries in # /usr/i486-slackware-linux/lib will not be found by Slackware64: if [ "$PACKNM" = "binutils" ]; then mkdir -p usr/lib # just in case for OLIB in $(find usr/i486-slackware-linux/lib -type f -maxdepth 1) ; do cp -a $OLIB usr/lib/ done sed -i -n '/\/i486-slackware-linux/p' install/doinst.sh sed -i 's#/i486-slackware-linux##g' install/doinst.sh fi if [ "$PACKNM" = "qt" -o "$PACKNM" = "python" ]; then #rm -rf usr/lib/qt*/mkspecs usr/lib/qt*/doc usr/lib/qt*/include rm -rf usr/lib/qt/{bin,doc,include,mkspecs,phrasebooks,plugins,q3porting.xml,translations} rm -rf usr/lib/python* #sed -i '/usr\/bin/d' install/doinst.sh sed -i '/qt\/mkspecs/d' install/doinst.sh fi #if [ "$PACKNM" = "mysql" ]; then # rm -rf usr/bin/* #fi if [ "$PACKNM" = "mesa" ];then rm -rf usr/lib/xorg fi echo "Merging package." if [ "$PACKNM" = "glibc-solibs" ];then cat $DOINST >>install/doinst.sh echo "# Package $PACKNAME" > $DOINST cat install/doinst.sh >> $DOINST else echo "# Package $PACKNAME" >> $DOINST cat install/doinst.sh >> $DOINST fi rm -rf install/ find -type d -exec mkdir -p $PKG/{} \; find ! -type d -exec mv -f {} $PKG/{} \; -print > $PKG/usr/doc/$PKGNAME-$VERSION/content/$PACKNAME rm -rf $PKGTMP done cat $DOINST > $DOINST.2 echo '#!/bin/sh' > $DOINST cat $DOINST.2 >> $DOINST rm $DOINST.2 cd $CWD mkdir -p $PKG/usr/doc/$PKGNAME-$VERSION/SlackBuild/ for SB in $PKGNAME.SlackBuild slack-desc doinst.sh doinst.sh.gz $SLACKBUILD;do [ -e $SB ]&&cp -r $SB $PKG/usr/doc/$PKGNAME-$VERSION/SlackBuild/ done cat $CWD/slack-desc > $PKG/install/slack-desc cd $PKG chown -R root:root . /sbin/makepkg -l y -c y $OUTPUT/$PKGNAME-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-txz} if [ "$1" = "--cleanup" ]; then rm -rf $TMP $FILES fi