#!/bin/bash

###
# By André Macêdo
# 11/06/2007
#
# Converts RPM packages to DEB using pre-created "debian" directories.
###

function usage
{
  echo ""
  echo "$0 <pkg.rpm>"
  echo ""
  exit 0
}

function check_deps
{
  FAILDEP=0

  if [ ! -e "/usr/bin/apt-get" ]; then
    echo -e "No apt-get found... this is a serious problem. Aborting..."
    exit 1
  fi

  if [ ! -e "/usr/bin/alien" ]; then
    echo -e "No 'alien' found, run \033[1m$0 --deps\033[0m to install all dependencies."
    FAILDEP=1
  fi

  if [ ! -e "/usr/bin/wget" ]; then
    echo -e "No 'wget' found, run \033[1m$0 --deps\033[0m to install all dependencies."
    FAILDEP=1
  fi

  if [ ! -e "/usr/bin/rpm" ]; then
    echo -e "No 'rpm' found, run \033[1m$0 --deps\033[0m to install all dependencies."
    FAILDEP=1
  fi

#  if [ ! -e "/usr/bin/822-date" ]; then
#    echo -e "No 'dpkg-dev' found, run \033[1m$0 --deps\033[0m to install all dependencies."
#    FAILDEP=1
#  fi

  if [ ! -e "/usr/bin/dpkg-buildpackage" ]; then
    echo -e "No 'dpkg-dev' found, run \033[1m$0 --deps\033[0m to install all dependencies."
    FAILDEP=1
  fi

  if [ ! -e "/usr/bin/dpatch" ]; then
    echo -e "No 'dpatch' found, run \033[1m$0 --deps\033[0m to install all dependencies."
    FAILDEP=1
  fi

  if [ ! -e "/usr/bin/fakeroot" ]; then
    echo -e "No 'fakeroot' found, run \033[1m$0 --deps\033[0m to install all dependencies."
    FAILDEP=1
  fi

  if [ ! $FAILDEP -eq 0 ]; then
    exit 1
  fi
}

function install_deps
{
  echo -e "\033[1mPreparing to install dependencies, please enter your SUDO passwd.\n\033[0m"
  sudo apt-get install alien wget rpm dpkg-dev fakeroot dpatch
  echo -e ""
  exit 0
}

[ -z "$1" ] && usage

if [ "$1" == "--deps" ]; then
  install_deps
fi 

if [ ! -f "$1" ]; then
  usage
fi

check_deps

RPM="$1"
RPM_NAME="`basename $1`"
TGT_NAME="`LANG=C rpm -qp --queryformat %{NAME} $RPM_NAME`"
TGT_VERS="`LANG=C rpm -qp --queryformat %{VERSION} $RPM_NAME`"
DEB_VERS="`echo $RPM_NAME | sed -e 's/.i[0-9]*.rpm//' | sed -e 's/^agnclient-//' | sed -e 's/-/~/'`"
CHGLOG_DISTRO="`cat /etc/lsb-release | grep DISTRIB_CODENAME | sed  -e 's/^.*=//'`"
[ ! -n "$CHGLOG_DISTRO" ] && CHGLOG_DISTRO="unstable"
#CHGLOG_DATE="`822-date`"
CHGLOG_DATE="`date -R`"
CHGLOG_COMMENTS="Debianized from $RPM_NAME"
DEBIAN_TEMPLATE="$TGT_NAME"_debian-"$DEB_VERS.tar.gz"
DEBIAN_DEF_TEMPLATE="$TGT_NAME"_debian.tar.gz
TGT_LOG="$TGT_NAME-$DEB_VERS.log"

rm -f $TGT_LOG > /dev/null 2>&1

echo -e "\n\033[1m Preparing to convert \033[7m$RPM\033[0m ...\n"

if [ ! -f "$DEBIAN_TEMPLATE" ]; then
  echo -e "\033[2m * debian template not found, downloading...\033[0m"
  wget "http://blog.afmacedo.com/linux/$TGT_NAME/$DEBIAN_TEMPLATE" >> $TGT_LOG 2>&1
fi

if [ ! -f "$DEBIAN_TEMPLATE" ]; then
  DEBIAN_TEMPLATE="$DEBIAN_DEF_TEMPLATE"
  if [ ! -f "$DEBIAN_TEMPLATE" ]; then
    echo -e "\033[2m * not able to download debian template for the specified version, trying to download default template...\033[0m"
    wget "http://blog.afmacedo.com/linux/$TGT_NAME/$DEBIAN_TEMPLATE" >> $TGT_LOG 2>&1
  else
    echo -e "\033[2m * not able to download debian template for the specified version, using default template...\033[0m"
  fi
fi

if [ ! -f "$DEBIAN_TEMPLATE" ]; then
  echo -e "\033[01;37m ! not able to download any debian template. Aborting...\033[0m\n"
  exit 1
fi

echo -e ""

echo -e "\033[1m Target Name\t\t: \033[0m$TGT_NAME"
echo -e "\033[1m Target Version\t\t: \033[0m$TGT_VERS"
echo -e "\033[1m Template debian\t: \033[0m$DEBIAN_TEMPLATE"
echo -e "\033[1m DEB Version\t\t: \033[0m$DEB_VERS"
echo -e "\033[1m Changelog Distro\t: \033[0m$CHGLOG_DISTRO"
echo -e "\033[1m Changelog Comments\t: \033[0m$CHGLOG_COMMENTS"
echo -e "\033[1m Changelog Date\t\t: \033[0m$CHGLOG_DATE"

echo -e "\n\033[1m Converting \033[7m$RPM\033[0m ...\n"

if [ -d "$TGT_NAME"-"$DEB_VERS" ]; then
  echo -e "\033[2m * Cleaning previous builds...\033[0m"
  rm -rf "$TGT_NAME"-"$DEB_VERS"
fi
 
echo -e "\033[2m * Creating building directory...\033[0m"
mkdir "$TGT_NAME"-"$DEB_VERS"

echo -e "\033[2m * Extracting package content...\033[0m"
fakeroot alien -t $1 >> $TGT_LOG 2>&1
tar -xvzf "$TGT_NAME"-"$TGT_VERS".tgz -C "$TGT_NAME"-"$DEB_VERS" >> $TGT_LOG 2>&1
rm -rf "$TGT_NAME"-"$TGT_VERS".tgz >> $TGT_LOG 2>&1

echo -e "\033[2m * Unpacking template debian directory...\033[0m"
tar -xzvf $DEBIAN_TEMPLATE -C "$TGT_NAME"-"$DEB_VERS" >> $TGT_LOG 2>&1

echo -e "\033[2m * Customizing template directory...\033[0m"
DEB_DIR="$TGT_NAME"-"$DEB_VERS"
sed -i "s/CHGLOG_DISTRO/$CHGLOG_DISTRO/" $DEB_DIR/debian/changelog
sed -i "s/CHGLOG_DATE/$CHGLOG_DATE/" $DEB_DIR/debian/changelog
sed -i "s/CHGLOG_COMMENTS/$CHGLOG_COMMENTS/" $DEB_DIR/debian/changelog
sed -i "s/DEB_VERSION/$DEB_VERS-1.1/" $DEB_DIR/debian/changelog

echo -e "\n\033[1m Building \033[7m.DEB package\033[0m ...\n"

echo -e "\033[2m * Checking build dependencies...\033[0m"
BUILD_DEPS=`cat $DEB_DIR/debian/control | grep Build-Depends: | sed -e 's/(.*)//' | sed -e 's/,//g' | sed -e 's/Build-Depends: //'`
for DEP in $BUILD_DEPS; do
#  dpkg -l $DEP > /dev/null 2>&1
  if [ ! "`dpkg -l $DEP | grep $DEP | awk '{ print $1 }'`" == "ii" ]; then
    echo -e "\033[2m * Dependencies installation required, type your SUDO password...\033[0m"
    sudo apt-get -y --force-yes install $BUILD_DEPS
    break
  fi
done

echo -e "\033[2m * Building package...\033[0m"
cd $DEB_DIR && fakeroot dpkg-buildpackage -b -us -uc >> ../$TGT_LOG 2>&1 && cd ..

echo -e "\033[2m * Cleaning...\033[0m"
#rm -rf $DEB_DIR *.changes > /dev/null 2>&i1

echo -e ""

SUCCESS="`ls | grep $TGT_NAME | grep $DEB_VERS | grep deb\$ | wc -l`"

if [ $SUCCESS -gt 0 ]; then
  echo -e "\033[1m Package convert process completed! Please report problems on http://blog.afmacedo.com\033[0m"
else
  echo -e "\033[1m Not able to convert the package, check the .log files for more info!\033[0m"
fi

echo -e ""

