#!/bin/bash

# rpm.SlackBuild
# Heavily based on the original Slackware build scripts,
# modifed by Stuart Winter for ARMedslack
#
# Copyright 2008  Patrick J. Volkerding, Sebeka, MN, 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.


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

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

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

# Determine the CFLAGS for the known architectures:
case $ARCH in
   arm)     export SLKCFLAGS="-O2 -march=armv4 -mtune=xscale" ;;
   armel)   export SLKCFLAGS="-O2 -march=armv4t" ;;
   powerpc) export SLKCFLAGS="-O2" ;;
   sparc)   export SLKCFLAGS="-O2" ;;
   hppa)    export SLKCFLAGS="-O2" ;;
   *)       export SLKCFLAGS="-O2" ;;
esac

# Extract source:
tar xvvf $CWD/$PKGNAM-$VERSION.tar.*
cd $PKGNAM-$VERSION
slackhousekeeping

# Change the /usr/src/redhat paths to /usr/src/rpm.  This ain't redhat.
fgrep -lr -- '{_usrsrc}/redhat' . | xargs sed -i 's?{_usrsrc}/redhat?{_usrsrc}/rpm/?g'
fgrep -lr -- 'src/redhat' .       | xargs sed -i 's?/src/redhat?/src/rpm?g'

# Using "rpm" for the vendor name cures the /usr/src bug.
# For whatever reason, beecrypt includes aren't picked up automatically.
# --enable-broken-chown fits, as ours follows symlinks.
CFLAGS="$SLKCFLAGS -I/usr/include/beecrypt/"
CXXFLAGS="$SLKCFLAGS -I/usr/include/beecrypt/"
./configure \
   --prefix=/usr \
   --mandir=/usr/man \
   --with-python=2.5 \
   --without-apidocs \
   --without-selinux \
   --without-lua \
   --without-dmalloc \
   --without-efence \
   --enable-broken-chown \
   --build=$ARCH-rpm-linux || failconfig

# Build:
make $NUMJOBS || failmake

# Install into package:
make install DESTDIR=$PKG || failinstall

# Um, /var/tmp should NOT have mode 0755
rmdir $PKG/var/tmp || exit 1

# We ship popt separately.
rm -f $PKG/usr/include/popt.h
rm -f $PKG/usr/man/man3/popt.3.gz
rm -f $PKG/usr/lib/libpopt.*
rm -f $PKG/usr/share/locale/*/LC_MESSAGES/popt.mo

# Since rpm linked statically is generally segfaulting after each glibc
# upgrade, these static libraries are very likely equally useless.
rm -f $PKG/usr/lib/*.a

# Filter all .la files (thanks much to Mark Post for the sed script):
for file in $(find $PKG -type f -name "*.la") ; do
  sed -ie 's%-L/tmp/[[:graph:]]* % %g' $file
done

# Here's a bug that's been around forever (and apparently plans to stay):
( cd $PKG/usr/lib/rpm
  if [ ! -r rpmpopt ]; then
    if [ -r rpmpopt-$VERSION ]; then
      ln -sf rpmpopt-$VERSION rpmpopt
    fi
  fi
)

# Initialize a dummy package database
mkdir -p $PKG/var/lib/rpm/tmp
zcat $CWD/Packages.gz > $PKG/var/lib/rpm/tmp/Packages

# Install docs
mkdir -p $PKG/usr/doc/rpm-$VERSION
cp -a \
  ABOUT-NLS COPYING* CREDITS GROUPS INSTALL README* \
  RPM-GPG-KEY RPM-PGP-KEY TODO doc/manual \
  $PKG/usr/doc/rpm-$VERSION
rm -f $PKG/usr/doc/rpm-$VERSION/manual/Makefile*

# 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
slackmp         # run makepkg -l y -c n

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