#!/bin/bash

# bin.SlackBuild
# by Stuart Winter <stuart@armedslack.org> for the Slackware porting Project.
# Almost _entirely_ based on the original Slackware build script.
# 01-May-2004

# Record toolchain & other info for the build log:
slackbuildinfo

# Paths to skeleton port's source & real Slackware source tree:
export CWD=$SLACKSOURCE/$PKGSERIES/$PACKAGE
export PORTCWD=$PWD

# Temporary build locations:
export TMPBUILD=$TMP/build-$PACKAGE
export PKG=$TMP/package-$PACKAGE
mkpkgdirs # Delete & re-create temporary directories then cd into $TMPBUILD

# Individual software version numbers:
DUTILS=2.7
DOSFS=2.10
WHICH=2.16
EJECT=2.1.5
FILE=4.17

# Determine the CFLAGS for the known architectures:
case $PORTARCH in
   arm)     SLKCFLAGS="-march=armv3 -mtune=xscale" ;;
   powerpc) SLKCFLAGS="" ;;
   sparc)   SLKCFLAGS="" ;;
   *)       SLKCFLAGS="" ;;
esac

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

# Create package framework (most of this should be in _bin.tar.gz though):
mkdir -p $PKG/usr/man/man{1,5,8}
mkdir -p $PKG/usr/{sbin,bin}
mkdir -p $PKG/etc

############################# debianutils ####################################

echo "+=============+"
echo "| debianutils |"
echo "+=============+"
cd $TMPBUILD
tar xzvf $CWD/debianutils_$DUTILS.tar.gz
cd debianutils-$DUTILS
slackhousekeeping
CFLAGS="$SLKCFLAGS" ./configure --prefix=/usr || failconfig
make || failmake
## 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
install -m755 mktemp $PKG/usr/bin
install -m644 mktemp.1 $PKG/usr/man/man1
install -m755 savelog $PKG/usr/bin
install -m644 savelog.8 $PKG/usr/man/man8
install -m755 tempfile $PKG/usr/bin
install -m644 tempfile.1 $PKG/usr/man/man1

############################# eject ##########################################

echo "+=======+"
echo "| eject |"
echo "+=======+"
cd $TMPBUILD
tar xzvf $CWD/eject-$EJECT.tar.gz
cd eject
slackhousekeeping
CFLAGS="$SLKCFLAGS" ./configure --prefix=/usr || failconfig
make || failmake
install -m755 eject $PKG/usr/bin
install -m644 eject.1 $PKG/usr/man/man1
install -m755 volname $PKG/usr/bin
install -m644 volname.1 $PKG/usr/man/man1
mkdir -p $PKG/usr/doc/eject-$EJECT
cp -a AUTHORS COPYING NEWS PORTING PROBLEMS README TODO eject-$EJECT.lsm \
      $PKG/usr/doc/eject-$EJECT

############################# fbset ##########################################

echo "+===========+"
echo "| fbset-2.1 |"
echo "+===========+"
cd $TMPBUILD
tar xzvf $CWD/fbset-2.1.tar.gz
cd fbset-2.1
slackhousekeeping
make CC="gcc -Wall -O2 -I. ${SLKCFLAGS}" || failmake
install -m755 fbset $PKG/usr/sbin
install -m644 etc/fb.modes.ATI $PKG/etc/fb.modes
install -m644 fb.modes.5 $PKG/usr/man/man5
install -m644 fbset.8 $PKG/usr/man/man8

############################# lha ############################################

echo "+===========+"
echo "| lha-1.14i |"
echo "+===========+"
cd $TMPBUILD
tar xzvf $CWD/lha-114i.tar.gz
cd lha-114i
zcat $CWD/lha-114i-sec.patch.gz | patch -p1 --verbose
zcat $CWD/lha-114i-symlink.patch.gz | patch -p1 --verbose
slackhousekeeping
sed -i 's/^OPTIMIZE.*=\(.*\)$/OPTIMIZE = '"$SLKCFLAGS"' \1/' Makefile 
make || failmake
install -m755 src/lha $PKG/usr/bin

############################# ed #############################################

echo "+========+"
echo "| ed-0.2 |"
echo "+========+"
cd $TMPBUILD
tar xzvf $CWD/ed-0.2.tar.gz
cd ed-0.2
slackhousekeeping
zcat $CWD/ed-0.2.mkstemp.diff.gz | patch -p1 -E --backup --verbose
CFLAGS="-O2 ${SLKCFLAGS}" \
./configure \
  --prefix=/usr \
  $ARCH-slackware-linux || failconfig
make || failmake
install -m755 ed $PKG/bin
install -m644 ed.1 $PKG/usr/man/man1
install -m644 ed.info $PKG/usr/info

############################# compress ######################################

echo "+==========+"
echo "| compress |"
echo "+==========+"
cd $TMPBUILD
tar xzf $CWD/ncompress-4.2.4.tar.gz
cd ncompress-*
slackhousekeeping
zcat $CWD/ncompress.make.diff.gz | patch -p1 --verbose || failpatch
zcat $CWD/ncompress.lfs2.diff.gz | patch -p1 --verbose || failpatch
zcat $CWD/ncompress.filenamelen.diff.gz | patch -p1 --verbose || failpatch
zcat $CWD/ncompress.2GB.diff.gz | patch -p1 --verbose || failpatch
zcat $CWD/ncompress.zerobyteforce.diff.gz | patch -p1 --verbose || failpatch
sed -i 's/^COMFLAGS.*=\(.*\)$/COMFLAGS = '"$SLKCFLAGS"' \1/' Makefile 
make ENDIAN=4321 || failmake
install -m755 compress $PKG/usr/bin
install -m644 compress.1 $PKG/usr/man/man1
( cd $PKG/usr/man/man1 &&  ln -fs compress.1 uncompress.1 )

mkdir -p $PKG/usr/doc/ncompress-4.2.4
cp -a Acknowleds LZW.INFO README \
      $PKG/usr/doc/ncompress-4.2.4

############################# banners #######################################

echo "+=========+"
echo "| banners |"
echo "+=========+"
cd $TMPBUILD
tar xzvf $CWD/banners.tar.gz
cd banners
slackhousekeeping
sed -i 's/^CFLAGS.*=\(.*\)$/CFLAGS = '"$SLKCFLAGS"' \1/' Makefile 
make || failmake
install -m755 sysvbanner  bban $PKG/usr/bin

############################# file ##########################################

echo "+===========+"
echo "| file-$FILE |"
echo "+===========+"
cd $TMPBUILD
tar xzvf $CWD/file-$FILE.tar.gz
cd file-$FILE
slackhousekeeping
zcat $CWD/file.quiet.diff.gz | patch -p1 -E --verbose
zcat $CWD/file.short.diff.gz | patch -p1 -E --verbose
zcat $CWD/file.rzip.magic.gz >> magic/Magdir/compress
zcat $CWD/file.zisofs.magic.gz >> magic/Magdir/compress
./configure \
  --prefix=/usr \
  --sysconfdir=/etc \
  --datadir=/etc \
  --enable-fsect-man5 \
  --enable-shared=no \
  $ARCH-slackware-linux || failconfig
# Eventually this will go away when the armv3l toolchain is ready:
make CC="gcc ${SLKCFLAGS}" || failmake
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
# /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 )

############################# dosfstools ####################################

echo "+============+"
echo "| dosfstools |"
echo "+============+"
cd $TMPBUILD
tar xzvf $CWD/dosfstools-$DOSFS.tar.gz
cd dosfstools-$DOSFS
slackhousekeeping
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 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 )
sed -i 's/^OPTFLAGS.*=\(.*\)$/OPTFLAGS = '"$SLKCFLAGS"' \1/' Makefile 
make || failmake
cd mkdosfs
install -m755 mkdosfs $PKG/sbin/mkdosfs
install -m644 mkdosfs.8 $PKG/usr/man/man8
cd ../dosfsck
install -m755 dosfsck $PKG/sbin
install -m644 dosfsck.8 $PKG/usr/man/man8

############################# patch #########################################

echo "+=============+"
echo "| patch-2.5.4 |"
echo "+=============+"
cd $TMPBUILD
tar xzvf $CWD/patch-2.5.4.tar.gz
cd patch-2.5.4
slackhousekeeping
mkdir -p $PKG/usr/doc/patch-2.5.4
cp -a AUTHORS COPYING NEWS README $PKG/usr/doc/patch-2.5.4
CFLAGS="-O2 $SLKCFLAGS" \
./configure \
   --prefix=/usr \
   $ARCH-slackware-linux || failconfig
make || failmake
install -m755 patch $PKG/usr/bin
install -m644 patch.man  $PKG/usr/man/man1/patch.1

############################# rpm2targz ####################################

echo "+===========+"
echo "| rpm2targz |"
echo "+===========+"
cd $TMPBUILD
cc $SLKCFLAGS -o rpmoffset $CWD/rpmoffset.c || failmake
install -m755 rpmoffset $PKG/usr/bin
install -m755 $CWD/rpm2targz $PKG/usr/bin
mkdir -p $PKG/usr/doc/rpm2targz
cp -a $CWD/rpm2targz.README $PKG/usr/doc/rpm2targz/rpm2targz.README

############################# run-parts ####################################

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

############################# splitvt ######################################

echo "+===============+"
echo "| splitvt-1.6.5 |"
echo "+===============+"
cd $TMPBUILD
tar xzvf $CWD/splitvt-1.6.5.tar.gz
cd splitvt-1.6.5
zcat $CWD/splitvt.devpts.diff.gz | patch -p1 --verbose
slackhousekeeping
./configure || failconfig
#sed -i 's/^CFLAGS.*=\(.*\)$/CFLAGS = '"$SLKCFLAGS"' \1/' Makefile 
make || failmake
install -m755 splitvt $PKG/usr/bin
install -m644 splitvt.1 $PKG/usr/man/man1
mkdir -p $PKG/usr/doc/splitvt-1.6.5
cp -a examples ANNOUNCE CHANGES NOTES README TODO \
      $PKG/usr/doc/splitvt-1.6.5

############################# time #########################################

echo "+==========+"
echo "| time-1.7 |"
echo "+==========+"
cd $TMPBUILD
tar xvzf $CWD/time-1.7.tar.gz
cd time-1.7
slackhousekeeping
./configure \
  --prefix=/usr \
  $ARCH-slackware-linux || failconfig
make CFLAGS="${SLKCFLAGS} -O2" || failmake
install -m755 time $PKG/usr/bin
install -m644 time.info $PKG/usr/info

############################# todos/fromdos #################################

echo "+===============+"
echo "| todos/fromdos |"
echo "+===============+"
cd $TMPBUILD
tar xzvf $CWD/todos.tar.gz
cd todos
slackhousekeeping
sed -i 's/^CFLAGS.*=\(.*\)$/CFLAGS = '"$SLKCFLAGS"' \1/' Makefile 
make || failmake
install -m755 todos fromdos $PKG/usr/bin
install -m644 fromdos.1.gz todos.1.gz $PKG/usr/man/man1

############################# tree ##########################################

echo "+============+"
echo "| tree-1.4b3 |"
echo "+============+"
cd $TMPBUILD
tar zxvf $CWD/tree-1.5.0.tar.gz
cd tree-*
slackhousekeeping
make || failmake
install -m755 tree $PKG/usr/bin
install -m644 tree.1 $PKG/usr/man/man1
mkdir -p $PKG/usr/doc/tree-1.5.0
cp -a CHANGES LICENSE README $PKG/usr/doc/tree-1.5.0

############################# unarj ########################################

echo "+==========+"
echo "| unarj230 |"
echo "+==========+"
cd $TMPBUILD
tar xzvf $CWD/unarj230.tar.gz
cd unarj230
slackhousekeeping
zcat $CWD/unarj230.diff.gz | patch -p0 -E --verbose --backup
sed -i 's/^CFLAGS.*=\(.*\)$/CFLAGS = '"$SLKCFLAGS"' \1/' Makefile 
make || failmake
install -m755 unarj $PKG/usr/bin

############################# which ########################################

echo "+============+"
echo "| which-$WHICH |"
echo "+============+"
cd $TMPBUILD
tar xzvf $CWD/which-$WHICH.tar.gz
cd which-$WHICH
slackhousekeeping
CFLAGS="$SLKCFLAGS -O2" ./configure --prefix=/usr
make || failmake
install -m755 which $PKG/bin
install -m644 which.1 $PKG/usr/man/man1
install -m644 which.info $PKG/usr/info
mkdir -p $PKG/usr/doc/which-$WHICH
cp -a AUTHORS COPYING EXAMPLES NEWS README README.alias \
      $PKG/usr/doc/which-$WHICH

############################# zoo ##########################################

echo "+==========+"
echo "| zoo-2.10 |"
echo "+==========+"
cd $TMPBUILD
tar xzvf $CWD/zoo-2.10.tar.gz
cd zoo-*
slackhousekeeping
zcat $CWD/zoo_2.10-17.diff.gz | patch -p1 -E --verbose --backup || failpatch
for diff in debian/patches/*.dpatch ; do
  cat $diff | patch -p1 --verbose || failpatch
done
sed -i 's/^CFLAGS.*=\(.*\)$/CFLAGS = '"$SLKCFLAGS"' \1/' makefile 
#sed -i 's/^EXTRA.*=\(.*\)$/EXTRA = -DANSI_HDRS\1/' makefile
make linux || failmake
install -m755 zoo fiz $PKG/usr/bin
install -m644 fiz.1 zoo.1  $PKG/usr/man/man1

###########################################################################

# If necessary, start the fakeroot server so we can set file/dir ownerships:
start_fakeroot

# Apply generic Slackware packaging policies:
cd $PKG
slackstripall   # strip all .a archives and all ELFs
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

# Build the package:
if [ $PORTARCH = arm ]; then
   slackmp # run makepkg
  else
   makepkg -l y -c n $PKGSTORE/$PKGSERIES/$PACKAGE-$VERSION-$ARCH-$BUILD.tgz
fi

# Perform any final checks on the package:
cd $PKG
slackhlinks     # search for any hard links
