#!/bin/bash
#
# got it from ftp://ftp.slackware.com/pub/slackware/slackware-10.2/patches/source/bin/bin.SlackBuild
# small changes by rhatto
#

# Set initial variables:

CWD="`pwd`"

if [ -f ~/.slackbuildrc ]; then
  source ~/.slackbuildrc
elif [ -f /etc/slackbuildrc ]; then
  source /etc/slackbuildrc
fi

PACKAGE="bin"
VERSION=10.2
ARCH=${ARCH:=i486}
BUILD="1rha"
SRC_DIR=${SRC:=$CWD}
TMP=${TMP:=/tmp}
REPOS=${REPOS:=$TMP}

DUTILS=2.7
DOSFS=2.10
WHICH=2.16
EJECT=2.1.4
FILE=4.15

TMP="$TMP/$PACKAGE"
PKG=$TMP/package-bin
rm -rf $PKG
mkdir -p $PKG

SRC_DIR="$SRC_DIR/$PACKAGE"
mkdir -p $SRC_DIR

# REPO="ftp://ftp.slackware.com/pub/slackware/slackware-10.2/patches/source/bin"
REPO="ftp://mirror.pacific.net.au/linux/slackware/slackware-10.2/patches/source/bin"
if [ "$GET" != "no" ]; then ( cd $SRC_DIR && ncftpget $REPO/*gz ) ; fi

if [ "$ARCH" == "x86_64" ]; then
  LIB="lib64"
else
  LIB="lib"
fi

# Explode the package framework:
cd $PKG
explodepkg $SRC_DIR/_bin.tar.gz

echo "+=============+"
echo "| debianutils |"
echo "+=============+"
cd $TMP
tar xzvf $SRC_DIR/debianutils_$DUTILS.tar.gz
cd debianutils-$DUTILS
chown -R root.root .
./configure --prefix=/usr
make || exit 32
## We actually use our own very simple run-parts script instead...
#cat run-parts > $PKG/usr/bin/run-parts
#cat run-parts.8 | gzip -9c > $PKG/usr/man/man8/run-parts.8.gz
cat mktemp > $PKG/usr/bin/mktemp
cat mktemp.1 | gzip -9c > $PKG/usr/man/man1/mktemp.1.gz
cat savelog > $PKG/usr/bin/savelog
cat savelog.8 | gzip -9c > $PKG/usr/man/man8/savelog.8.gz
cat tempfile > $PKG/usr/bin/tempfile
cat tempfile.1 | gzip -9c > $PKG/usr/man/man1/tempfile.1.gz

echo "+=======+"
echo "| eject |"
echo "+=======+"
cd $TMP
rm -rf eject
tar xzvf $SRC_DIR/eject-$EJECT.tar.gz
cd eject
chown -R root:root .
if [ "$ARCH" == "x86_64" ]; then
  zcat $CWD/eject-x86_64.diff.gz | patch -p1 --verbose
fi
CFLAGS= ./configure --prefix=/usr
make || exit 32
cat eject > $PKG/usr/bin/eject
cat eject.1 | gzip -9c > $PKG/usr/man/man1/eject.1.gz
cat volname > $PKG/usr/bin/volname
cat volname.1 | gzip -9c > $PKG/usr/man/man1/volname.1.gz
mkdir -p $PKG/usr/doc/eject-$EJECT
cp -a AUTHORS COPYING NEWS PORTING PROBLEMS README TODO eject-$EJECT.lsm \
  $PKG/usr/doc/eject-$EJECT
chmod 644 $PKG/usr/doc/eject-$EJECT/*

echo "+===========+"
echo "| fbset-2.1 |"
echo "+===========+"
cd $TMP
tar xzvf $SRC_DIR/fbset-2.1.tar.gz
cd fbset-2.1
chown -R root.root .
make || exit 32
mkdir -p $PKG/usr/sbin
cat fbset > $PKG/usr/sbin/fbset
chmod 755 $PKG/usr/sbin/fbset
mkdir -p $PKG/etc
cat etc/fb.modes.ATI > $PKG/etc/fb.modes
mkdir -p $PKG/usr/man/man5
cat fb.modes.5 | gzip -9c > $PKG/usr/man/man5/fb.modes.5.gz
mkdir -p $PKG/usr/man/man8
cat fbset.8 | gzip -9c > $PKG/usr/man/man8/fbset.8.gz

echo "+===========+"
echo "| lha-1.14i |"
echo "+===========+"
cd $TMP
tar xzvf $SRC_DIR/lha-114i.tar.gz
cd lha-114i
zcat $SRC_DIR/lha-114i-sec.patch.gz | patch -p1 --verbose
zcat $SRC_DIR/lha-114i-symlink.patch.gz | patch -p1 --verbose
chown -R root.root .
make || exit 32
cat src/lha > $PKG/usr/bin/lha

echo "+========+"
echo "| ed-0.2 |"
echo "+========+"
cd $TMP
tar xzvf $SRC_DIR/ed-0.2.tar.gz
cd ed-0.2
chown -R root.root .
zcat $SRC_DIR/ed-0.2.mkstemp.diff.gz | patch -p1 -E --backup --verbose
CFLAGS=-O2 \
./configure \
  --prefix=/usr \
  $ARCH-slackware-linux
make || exit 32
cat ed > $PKG/bin/ed
cat ed.1 | gzip -9c > $PKG/usr/man/man1/ed.1.gz
cat ed.info | gzip -9c > $PKG/usr/info/ed.info.gz

echo "+==========+"
echo "| compress |"
echo "+==========+"
cd $TMP
tar xzvf $SRC_DIR/compress.tar.gz
cd compress
chown -R root.root .
zcat $SRC_DIR/compress.diff.gz | patch -p0 -E --backup --verbose
if [ "$ARCH" == "x86_64" ]; then
  echo 450000 > USERMEM # the default from the source file
fi
make || exit 32
cat compress > $PKG/usr/bin/compress
cat compress.1 | gzip -9c > $PKG/usr/man/man1/compress.1.gz
echo '.so man1/compress.1' | gzip -9c > $PKG/usr/man/man1/uncompress.1.gz

echo "+=========+"
echo "| banners |"
echo "+=========+"
cd $TMP
tar xzvf $SRC_DIR/banners.tar.gz
cd banners
chown -R root.root .
make || exit 32
cat bban > $PKG/usr/bin/bban
cat sysvbanner > $PKG/usr/bin/sysvbanner

echo "+===========+"
echo "| file-$FILE |"
echo "+===========+"
cd $TMP
tar xzvf $SRC_DIR/file-$FILE.tar.gz
cd file-$FILE
chown -R root.root .
zcat $SRC_DIR/file.quiet.diff.gz | patch -p1 -E --verbose
zcat $SRC_DIR/file.short.diff.gz | patch -p1 -E --verbose
zcat $SRC_DIR/file.rzip.magic.gz >> magic/Magdir/compress
zcat $SRC_DIR/file.zisofs.magic.gz >> magic/Magdir/compress
./configure \
  --prefix=/usr \
  --libdir=/usr/$LIB \
  --sysconfdir=/etc \
  --datadir=/etc \
  --enable-fsect-man5 \
  --enable-shared=no \
  $ARCH-slackware-linux
make || exit 32
make install DESTDIR=$PKG
# Is file really this much of a processing bottleneck?  Doubtful.
rm -f $PKG/etc/file/magic.mgc $PKG/etc/file/magic.mime.mgc
strip -g $PKG/usr/$LIB/libmagic.a
mkdir -p $PKG/usr/doc/file-$FILE
cp -a \
  LEGAL.NOTICE README \
  $PKG/usr/doc/file-$FILE
chmod 644 $PKG/usr/doc/file-$FILE/*
gzip -9 $PKG/usr/man/man1/file.1 \
        $PKG/usr/man/man3/libmagic.3 \
        $PKG/usr/man/man5/magic.5
# /etc/magic has been traditional for so long that it seems like a
# real good idea to provide a link:
( cd $PKG/etc
  ln -sf file/magic magic
)

echo "+============+"
echo "| dosfstools |"
echo "+============+"
cd $TMP
tar xzvf $SRC_DIR/dosfstools-$DOSFS.tar.gz
cd dosfstools-$DOSFS
if [ "$ARCH" == "x86_64" ]; then zcat $CWD/dosfstools-x86_64.diff.gz | patch -p1 --verbose; fi
chown -R root.root .
mkdir -p $PKG/usr/doc/dosfstools-$DOSFS
cp -a CHANGES README.Atari TODO $PKG/usr/doc/dosfstools-$DOSFS
mkdir -p $PKG/usr/doc/dosfstools-$DOSFS/mkdosfs
( cd mkdosfs ; cp -a ANNOUNCE COPYING ChangeLog README mkdosfs-ygg-0.3b.lsm $PKG/usr/doc/dosfstools-$DOSFS/mkdosfs )
mkdir -p $PKG/usr/doc/dosfstools-$DOSFS/dosfsck
( cd dosfsck ; cp -a CHANGES COPYING README $PKG/usr/doc/dosfstools-$DOSFS/dosfsck )
make || exit 32
cd mkdosfs
cat mkdosfs > $PKG/sbin/mkdosfs
cat mkdosfs.8 | gzip -9c > $PKG/usr/man/man8/mkdosfs.8.gz
cd ../dosfsck
cat dosfsck > $PKG/sbin/dosfsck
cat dosfsck.8 | gzip -9c > $PKG/usr/man/man8/dosfsck.8.gz

echo "+=============+"
echo "| patch-2.5.4 |"
echo "+=============+"
cd $TMP
tar xzvf $SRC_DIR/patch-2.5.4.tar.gz
cd patch-2.5.4
chown -R root.root .
mkdir -p $PKG/usr/doc/patch-2.5.4
cp -a AUTHORS COPYING INSTALL NEWS README $PKG/usr/doc/patch-2.5.4
chmod 644 $PKG/usr/doc/patch-2.5.4/*
./configure \
  --prefix=/usr \
  $ARCH-slackware-linux
make CFLAGS=-O2
cat patch > $PKG/usr/bin/patch
cat patch.man  | gzip -9c > $PKG/usr/man/man1/patch.1.gz

echo "+===========+"
echo "| rpm2targz |"
echo "+===========+"
cd $TMP
cc -o rpmoffset $CWD/rpmoffset.c
cat rpmoffset > $PKG/usr/bin/rpmoffset
rm rpmoffset
cat $CWD/rpm2targz > $PKG/usr/bin/rpm2targz
mkdir -p $PKG/usr/doc/rpm2targz
cp -a $CWD/rpm2targz.README $PKG/usr/doc/rpm2targz/rpm2targz.README
chmod 644 $PKG/usr/doc/rpm2targz/rpm2targz.README

echo "+===========+"
echo "| run-parts |"
echo "+===========+"
zcat $SRC_DIR/run-parts.gz > $PKG/usr/bin/run-parts
chmod 755 $PKG/usr/bin/run-parts
cat $SRC_DIR/run-parts.8.gz > $PKG/usr/man/man8/run-parts.8.gz

echo "+=================+"
echo "| sharutils-4.2.1 |"
echo "+=================+"
cd $TMP
tar xzvf $SRC_DIR/sharutils-4.2.1.tar.gz
cd sharutils-4.2.1
chown -R root.root .
mkdir -p $PKG/usr/doc/sharutils-4.2.1
cp -a ABOUT-NLS AUTHORS BACKLOG COPYING INSTALL NEWS README \
  README.OLD THANKS TODO $PKG/usr/doc/sharutils-4.2.1
chmod 644 $PKG/usr/doc/sharutils-4.2.1/*
# For now, NLS seems to cause build errors on this one...
CFLAGS=-O2 \
./configure \
  --disable-nls \
  --prefix=/usr \
  $ARCH-slackware-linux
make || exit 32
cd src
cat shar > $PKG/usr/bin/shar
cat unshar > $PKG/usr/bin/unshar
cat uuencode > $PKG/usr/bin/uuencode
cat uudecode > $PKG/usr/bin/uudecode
cd ../doc
cat sharutils.info | gzip -9c > $PKG/usr/info/sharutils.info.gz
# Include old manpages, since the source package doesn't have them anymore:
for page in shar.1.gz unshar.1.gz uuencode.1.gz ; do
  cat $SRC_DIR/$page > $PKG/usr/man/man1/$page
done
echo '.so man1/uuencode.1' | gzip -9c > $PKG/usr/man/man1/uudecode.1.gz
cat $SRC_DIR/uuencode.5.gz > $PKG/usr/man/man5/uuencode.5.gz

echo "+===============+"
echo "| splitvt-1.6.5 |"
echo "+===============+"
cd $TMP
rm -rf splitvt-1.6.5
tar xzvf $SRC_DIR/splitvt-1.6.5.tar.gz
cd splitvt-1.6.5
zcat $SRC_DIR/splitvt.devpts.diff.gz | patch -p1 --verbose
chown -R root.root .
./configure
make || exit 32
cat splitvt > $PKG/usr/bin/splitvt
cat splitvt.1 | gzip -9c > $PKG/usr/man/man1/splitvt.1.gz
mkdir -p $PKG/usr/doc/splitvt-1.6.5
cp -a examples ANNOUNCE CHANGES NOTES README TODO \
  $PKG/usr/doc/splitvt-1.6.5
( cd $PKG/usr/doc/splitvt-1.6.5
  find . -type d | xargs chmod 755
  find . -type f | xargs chmod 644 )

echo "+==========+"
echo "| time-1.7 |"
echo "+==========+"
cd $TMP
tar xvzf $SRC_DIR/time-1.7.tar.gz
cd time-1.7
chown -R root.root .
./configure \
  --prefix=/usr \
  $ARCH-slackware-linux
make CFLAGS=-O2
cat time > $PKG/usr/bin/time
cat time.info | gzip -9c > $PKG/usr/info/time.info.gz

echo "+===============+"
echo "| todos/fromdos |"
echo "+===============+"
cd $TMP
tar xzvf $SRC_DIR/todos.tar.gz
cd todos
chown -R root.root .
make || exit 32
cat todos > $PKG/usr/bin/todos
cat fromdos > $PKG/usr/bin/fromdos
cat todos.1.gz > $PKG/usr/man/man1/todos.1.gz
cat fromdos.1.gz > $PKG/usr/man/man1/fromdos.1.gz

echo "+============+"
echo "| tree-1.4b3 |"
echo "+============+"
cd $TMP
tar xzvf $SRC_DIR/tree-1.4b3.tar.gz
cd tree-1.4
if [ "$ARCH" == "x86_64" ]; then zcat $CWD/tree-x86_64.diff.gz | patch -p1 --verbose; fi
chown -R root.root .
make clean
make || exit 32
cat tree > $PKG/usr/bin/tree
chmod 755 $PKG/usr/bin/tree
cat tree.1 | gzip -9c > $PKG/usr/man/man1/tree.1.gz
mkdir -p $PKG/usr/doc/tree-1.4b3
cp -a CHANGES LICENSE README README.sacl $PKG/usr/doc/tree-1.4b3
chmod 644 $PKG/usr/doc/tree-1.4b3/*

echo "+==========+"
echo "| unarj230 |"
echo "+==========+"
cd $TMP
tar xzvf $SRC_DIR/unarj230.tar.gz
cd unarj230
chown -R root.root .
zcat $SRC_DIR/unarj230.diff.gz | patch -p0 -E --verbose --backup
make || exit 32
cat unarj > $PKG/usr/bin/unarj

echo "+============+"
echo "| which-$WHICH |"
echo "+============+"
cd $TMP
tar xzvf $SRC_DIR/which-$WHICH.tar.gz
cd which-$WHICH
chown -R root.root .
./configure --prefix=/usr
make CFLAGS=-O2
cat which > $PKG/bin/which
cat which.1 | gzip -9c > $PKG/usr/man/man1/which.1.gz
cat which.info | gzip -9c > $PKG/usr/info/which.info.gz
mkdir -p $PKG/usr/doc/which-$WHICH
cp -a AUTHORS COPYING EXAMPLES INSTALL NEWS README README.alias $PKG/usr/doc/which-$WHICH

echo "+==========+"
echo "| zoo-2.10 |"
echo "+==========+"
cd $TMP
rm -rf zoo-2.10
tar xzvf $SRC_DIR/zoo-2.10.tar.gz
cd zoo-2.10
chown -R root:root .
zcat $SRC_DIR/zoo_2.10-17.diff.gz | patch -p1 -E --verbose --backup || exit 1
for diff in debian/patches/*.dpatch ; do
  cat $diff | patch -p1 --verbose || exit 1
done
if [ "$ARCH" == "x86_64" ]; then zcat $CWD/zoo-x86_64.diff.gz | patch -p1 --verbose; fi
make linux
cat fiz > $PKG/usr/bin/fiz
cat zoo > $PKG/usr/bin/zoo
for page in fiz.1 zoo.1 ; do
  cat $page | gzip -9c > $PKG/usr/man/man1/$page.gz
done

# Add a very handy tool for scanning new SCSI devices.  Most useful for
# finding new USB and Firewire storage devices which show up as SCSI.
cp -a $CWD/rescan-scsi-bus $PKG/sbin/rescan-scsi-bus
chmod 755 $PKG/sbin/rescan-scsi-bus

# Strip everything for good measure:
( 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
)

chown -R root.bin $PKG/bin $PKG/usr/bin $PKG/sbin $PKG/usr/sbin

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc

# Build the package:
cd $PKG
makepkg -l y -c n $REPOS/bin-$VERSION-$ARCH-$BUILD.tgz

# Clean up the extra stuff:
if [ "$CLEANUP" == "yes" ]; then
  rm -rf $TMP
fi