#!/bin/sh -e
#
# Parses PACKAGES and SOURCES and outputs list of sources to build as
# 'src ver' pair, one per line.

# Make sure we run as ia32-archive user
if [ "x$USER" = "xroot" ]; then
  exec su - ia32-archive -c "$0 --was-root $@"
fi

# Don't run if called during the conversion
if ! [ "x$1" = "x--was-root" ]; then
  exit 0
fi

HOMEDIR="/usr/lib/ia32-archive"

# FIXME: use /etc/ia32-libs/sources.list
PACKAGES="$HOMEDIR/dists/sid/*/binary-*/Packages"
URL="http://ftp.debian.org"
REMOTE_DIR="debian"
DIST="sid"
SUITES="main contrib non-free"
SRC_FILTER="$HOMEDIR/conf/sources.filter"
PKG_FILTER="/usr/lib/ia32-libs-tools/packages.list"
LOGDIR="$HOMEDIR/logs"

TMPDIR="$HOMEDIR/tmp"

# Fetch new index files from server
for SUITE in $SUITES; do
  echo "Get: $URL $DIST/$SUITE Sources"
  (
    cd "$TMPDIR"
    cp -a "$TMPDIR/${DIST}_${SUITE}_Sources.gz" Sources.gz 2>/dev/null || true
    wget -q -N "$URL/$REMOTE_DIR/dists/$DIST/$SUITE/source/Sources.gz"
    mv Sources.gz "$TMPDIR/${DIST}_${SUITE}_Sources.gz"
  )
done

sed -e 's/^/^/' -e 's/$/ /' "$SRC_FILTER" > "$TMPDIR/sources.filter"
for SUITE in $SUITES; do
  zcat "$TMPDIR/${DIST}_${SUITE}_Sources.gz" \
  | grep-dctrl "" -sPackage,Version -n | paste -s -d"  \n"
done | grep -f "$TMPDIR/sources.filter" | sort -u > "$TMPDIR/source.list"

grep-dctrl "" -sPackage,Version,Source -n $PACKAGES | paste -s -d"   \n" \
| while read PKG PVER SRC SVER; do
    if [ -n "$SRC" ]; then
      PKG="$SRC"
      if [ -n "$SVER" ]; then
        PVER=${SVER%%\)}
        PVER=${PVER##\(}
      fi
    fi
    PKG=${PKG##ia32-}
    PVER=${PVER%~*}
    echo "$PKG $PVER "
  done | sort -u > "$TMPDIR/binary.list"

sort "$TMPDIR/source.list" "$TMPDIR/source.list" "$TMPDIR/binary.list" \
| uniq -c | grep "^      2" | cut -b9- \
| while read SRC VER; do
    echo "Convert: $SRC $VER"
    rm -rf "$TMPDIR/$SRC"
    mkdir "$TMPDIR/$SRC"
    ( set -e
      cd "$TMPDIR/$SRC"
      grep "^ia32-$SRC[[:space:]]" "$PKG_FILTER" \
      | while read IA32SRC PKGS; do
	  mkdir "$IA32SRC"
	  cd "$IA32SRC"
	  /usr/lib/ia32-libs-tools/create $PKGS || exit 1
	  if ! [ -f ${SRC}_$VER.dsc ]; then
	    echo
	    echo "Error: Binary / source version mismatch, aborting."
	    exit 1
	  fi
	  if grep -q "Architecture: amd64" debian/control; then
            dpkg-buildpackage -us -uc -B -aamd64
          fi
	  dpkg-buildpackage -us -uc -sa -aia64
	  cd ..
	done || exit $?
      find -name "*.changes" -exec reprepro -b "$HOMEDIR" include $DIST "{}" \;
    ) > "$LOGDIR/$SRC.log" 2>&1
    if [ $? = 0 ]; then
      rm -rf "$TMPDIR/$SRC"
    else
      if [ -f "$TMPDIR/$SRC/${SRC}_$VER.dsc" ]; then
	echo "Error converting $SRC $VER, see $LOGDIR/$SRC.log for details"
      else
	echo "Error: Binary / source version mismatch, skipping."
      fi
    fi
  done

exit 0
