#!/bin/sh

# slackbuild_to_sbo.sh
# 2012-12-18
# by Gernot Walzl

# Converts a given SlackBuild to the
# submission guidelines defined by SlackBuilds.org
# http://slackbuilds.org/

SLACKBUILD=$1
TMP=${TMP:-/tmp}
CWD=$(pwd)

# exit on error
set -e

if [ -z "$SLACKBUILD" ]; then
  echo "Usage: $0 anything.SlackBuild"
  exit 1;
fi

if [ ! -f "$SLACKBUILD" ]; then
  echo "ERROR: $SLACKBUILD does not exist."
  exit 1;
fi

if [ "$(head -n 1 "$SLACKBUILD")" != "#!/bin/sh" ]; then
  echo "ERROR: $SLACKBUILD is not a shell script."
  exit 1;
fi

HAS_INFO=$(grep "# EOF info" "$SLACKBUILD" | wc -l)
if [ "$HAS_INFO" -eq 0 ]; then
  echo "ERROR: $SLACKBUILD does not have an info section."
  exit 1;
fi

# check syntax
ash -n $SLACKBUILD || exit 1

PRGNAM=$(basename "$SLACKBUILD" | cut -d. -f1)
if [ -z "$PRGNAM" ]; then
  exit 1;
fi

mkdir -p $TMP/$PRGNAM
cd $TMP/$PRGNAM || exit 1

cp $CWD/$SLACKBUILD ./$PRGNAM.SlackBuild

OUTPUT="README.tmp"
while read LINE; do
  case "$LINE" in
    PRGNAM*) OUTPUT="$PRGNAM.info.tmp" ;;
    "# EOF info") break ;;
  esac
  echo $LINE >> $TMP/$PRGNAM/$OUTPUT
done < "$PRGNAM.SlackBuild"

cat README.tmp \
  | sed '/^#!\/.*/d' README.tmp \
  | sed '/^\s*$/d' \
  | sed 's/^#\s*\(.*\)$/\1/g' \
  | sed '/./,$!d' \
  > README
rm README.tmp

. ./$PRGNAM.info.tmp
if [ -z "$DESC" ]; then
  echo "WARNING: $SLACKBUILD does not set DESC."
else
  echo "$DESC" | sed 's/^/'$PRGNAM': /g' > slack-desc
fi

ARCH=x86_64
. ./$PRGNAM.info.tmp
DOWNLOAD_x86_64="$DOWNLOAD"
MD5SUM_x86_64="$MD5SUM"
DOWNLOAD=""
MD5SUM=""
for ARCH in i686 i586 i486 i386; do
  . ./$PRGNAM.info.tmp
  if [ ! -z "$DOWNLOAD" ]; then
    break
  fi
done
rm $PRGNAM.info.tmp
if [ "$DOWNLOAD" = "$DOWNLOAD_x86_64" ]; then
  DOWNLOAD_x86_64=""
  MD5SUM_x86_64=""
fi

if [ -z "$VERSION" ]; then
  echo "WARNING: $SLACKBUILD does not set VERSION."
fi
if [ -z "$HOMEPAGE" ]; then
  echo "WARNING: $SLACKBUILD does not set HOMEPAGE."
fi
if [ -z "$DOWNLOAD" ]; then
  echo "WARNING: $SLACKBUILD does not set DOWNLOAD."
fi
if [ -z "$MD5SUM" ]; then
  echo "WARNING: $SLACKBUILD does not set MD5SUM."
fi
if [ -z "$MAINTAINER" ]; then
  echo "WARNING: $SLACKBUILD does not set MAINTAINER."
fi
if [ -z "$EMAIL" ]; then
  echo "WARNING: $SLACKBUILD does not set EMAIL."
fi

echo "PRGNAM=\"$PRGNAM\"" > $PRGNAM.info
echo "VERSION=\"$VERSION\"" >> $PRGNAM.info
echo "HOMEPAGE=\"$HOMEPAGE\"" >> $PRGNAM.info
echo "DOWNLOAD=\"$DOWNLOAD\"" >> $PRGNAM.info
echo "MD5SUM=\"$MD5SUM\"" >> $PRGNAM.info
echo "DOWNLOAD_x86_64=\"$DOWNLOAD_x86_64\"" >> $PRGNAM.info
echo "MD5SUM_x86_64=\"$MD5SUM_x86_64\"" >> $PRGNAM.info
echo "REQUIRES=\"$REQUIRES\"" >> $PRGNAM.info
echo "MAINTAINER=\"$MAINTAINER\"" >> $PRGNAM.info
echo "EMAIL=\"$EMAIL\"" >> $PRGNAM.info

cd $TMP
tar czvf $PRGNAM.tar.gz $PRGNAM
rm -rf $PRGNAM
mv $PRGNAM.tar.gz $CWD