#! /bin/bash
# macht aus einem RPM-Paket einen Slackware-Tarball
# Anregung aus "alt.os.linux.slackware"
# Nutzung gemss der GNU Public License

# $Id: rpm2slack,v 1.2 2008-01-01 14:57:55+01 HHullen Exp $
# $Log: rpm2slack,v $
# Revision 1.2  2008-01-01 14:57:55+01  HHullen
# postinst ueberarbeitet
#
# Revision 1.1  2007-12-28 14:26:11+01  HHullen
# Start
#

which tar-1.13 2>/dev/null && Tar=tar-1.13
test "$Tar" || {
    echo tar-1.13 nicht gefunden
    exit 1
    }

Hier=$(pwd)
for Datei in "$@"
  do
    cd $Hier    
    test -f $Datei || continue
    file $Datei | grep -w -q RPM || continue 
    file $Datei | grep -w -q src && continue

    case $Datei in
	/*)
	;;
	*)
	Datei=$Hier/$Datei
	;;
    esac
    

Tempdir=/tmp/d2t$$
rm -rf $Tempdir
mkdir -p $Tempdir/install

Datum=$(rpm -qp --qf '%{BUILDTIME}' $Datei 2>/dev/null)
Datum=$(date --date="00:00:00 1 Jan 1970 + $Datum seconds" +%Y-%m-%d)

Slackroh=$(basename $Datei .rpm)
Slack=${Slackroh}.tar

cd $Tempdir
rpm2cpio $Datei | cpio -imd
chmod -R a+rX $Tempdir

cd $Tempdir/install
rpm -qpR $Datei > slack-required 2>/dev/null
rpm -qpc $Datei > conffiles 2>/dev/null
rpm -qp --qf "%{RPMTAG_POSTIN}" $Datei > postinst 2>/dev/null

test "$(head -1 postinst 2>/dev/null)" = "(none)" && rm postinst

test -s postinst && grep -q etc/init.d postinst && mv -f postinst postinst-initd
  
  
cd $Tempdir
test -s install/conffiles && {
    while read Confdat
      do
	case $Confdat in
	/etc/init.d/*)
        mv .$Confdat .${Confdat}-rpm
	;;
	*)
        mv .$Confdat .${Confdat}.new
        ;;
        esac
      done < install/conffiles
    }

# Fkt. "config" von slackware bernommen
echo '#!/bin/sh
config() {
  NEW="$1"
  OLD=$(dirname "$NEW")/$(basename "$NEW" .new) 
  # If there is no config file by that name, mv it over:
  if [ ! -r $OLD ]; then
    mv $NEW $OLD
  elif [ "$(md5sum $OLD)" = "$(md5sum $NEW)" ]; then # toss the redundant copy
    rm $NEW
  fi
  # Otherwise, we leave the new copy for the admin to consider...
    }

test -s install/conffiles && {
    while read Datei
	do
	config ./${Datei}.new
	done < install/conffiles
	}
    test -s install/postinst && sh install/postinst configure

#
' > $Tempdir/install/doinst.sh
    
    cd $Tempdir/install

#    rpm -qpi $Datei 2>/dev/null | grep -A 10 ^Description | grep -v ^Description  > rpm-desc
    rpm -pq --qf '%{DESCRIPTION}\n' $Datei 2>/dev/null | \
       fold -s -w 70 | head -10 > rpm-desc
    Package=$(rpm -pq --qf '%{NAME}\n' $Datei 2>/dev/null)
    for ct in $(seq 1 11) ; do echo "$Package: "; done > rpm-pack

echo "# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.  Line
# up the first '|' above the ':' following the base package name, and the '|'
# on the right side marks the last column you can put a character in.  You must
# make exactly 11 lines for the formatting to be correct.  It's also
# customary to leave one space after the ':'.

        |-----handy-ruler------------------------------------------------------|" > slack-desc

    paste rpm-pack rpm-desc >> slack-desc
    rm -f rpm-desc rpm-pack
    cd ..
#    $Tar -czf $Hier/${Slackroh}.tgz .
    makepkg -l y -c n $Hier/${Slackroh}.tgz
    cd $Hier
    touch --date="$Datum" ${Slackroh}.tgz

    rm -rf $Slack $Tempdir

    shift
  done
#
