#!/bin/bash
#
# Creates packages from build repository
#
# $Id$
#
# Syntax: build2pkg [version-tag [pkg list]]
#

(
dname=`dirname $0`
prem=`echo $dname |cut -c1`
if [ _${prem} = _"/" ]; then
	export TOOLHOME=$dname
else
	export TOOLHOME=${PWD}/$dname
fi

. $TOOLHOME/common-env
. $TOOLHOME/distro-env

# We need to get $VER and $TAG
if [ "$1" = "" ]; then
	LAST=`cat ${TOPDIR}/LAST`
else
	LAST=$1
	shift
fi
VER=`echo $LAST | cut -d- -f1`
TAG=`echo $LAST | cut -d- -f2`
echo "Working on ${VER}-$TAG"
	
if [ "$1" = "" ]; then
	c="mondo-doc mindi mindi-busybox mondo"
else
	if [ "$1" = "all" ]; then
		c="mindi-kernel mondo-doc mindi mindi-busybox mondo"
	else
		c="$*"
	fi
fi

status=0

#
# Define on which distro we are to generate the right packages
#

export pkg=""
echo "Working under $TOPBUILDDIR"
cd $TOPBUILDDIR

for p in $c; do
	# s= stable; t = trunk; 1-9 = official version
	src=${TOPDIR}/${VER}-$TAG/$p-[1-9st]*.tar.gz
	pv=`basename $src .tar.gz`
	PVER=`echo $pv | sed "s|^$p-||" | cut -d- -f1`

	if [  _"$dtype" = _"rpm" ]; then
		if [ _"$p" = _"mondo-doc" ]; then
			ar="noarch"
		else
			ar=$ARCH
		fi

		log=$MONDOTMP/$p-rpm.log

		if [ "$dfam" = "mandriva" ] || [ "$dfam" = "suse" ]; then
			echo "Using bzip2 files ($dfam)"
			ln -sf ${TOPDIR}/${VER}-$TAG/$pv.tar.bz2 SOURCES/
		else
			echo "Using gzip files ($dfam)"
			ln -sf $src SOURCES/
		fi
		echo "Generating $p RPMS"
		cd SPECS
		tar xfz $src $p-${PVER}/distributions/${ddir}-$dver/$p.spec
		mv $p-${PVER}/distributions/${ddir}-$dver/$p.spec .
		rm -rf $p-${PVER}

		# set LANGUAGE to check for correct log messages
		export LANGUAGE=C
		rpmbuild -ba $p.spec 2>&1 | tee $log
		if [ $? != 0 ]; then 
			status=-1
		else
			export pkg1="`egrep '^Wrote:' $log | grep -v debug | cut -d: -f2`"
			if [ -f /usr/bin/rpmlint ]; then
				/usr/bin/rpmlint $pkg1
			else
				echo "No rpmlint found, please install it"
			fi
			export pkg="$pkg `ls $pkg1 | grep -v src.rpm`"
		fi
		rm -rf ${TOPBUILDDIR}/BUILD/*
		cd ..
	elif [  _"$dtype" = _"ebuild" ]; then
		tar xfz $src $p-${PVER}/distributions/${ddir}-$dver/$p-${PVER}.ebuild
		if [ _"`grep $TOPBUILDDIR/portage /etc/make.conf`" = _"" ]; then
			echo "Adding $TOPBUILDDIR/portage to /etc/make.conf"
			echo "PORTDIR_OVERLAY=\"$TOPBUILDDIR/portage\"" >> /etc/make.conf
		fi

		mkdir -p ${TOPBUILDDIR}/portage/sys-apps/$p
		mv $p-${PVER}/distributions/${ddir}-$dver/$p-${PVER}.ebuild ${TOPBUILDDIR}/portage/sys-apps/$p/$p-${PVER}.ebuild
		rm -rf $p-${PVER}

		cd ${TOPBUILDDIR}/portage/sys-apps/$p
		ebuild $p-${PVER}.ebuild digest
		if [ $? != 0 ]; then 
			status=-1
		fi
		ebuild $p-${PVER}.ebuild package
		if [ $? != 0 ]; then 
			status=-1
		fi
		export pkg="$pkg $p-${PVER}.ebuild"
	elif [  _"$dtype" = _"deb" ]; then
		cd $TOPBUILDDIR
		tar xfz $src
		cd ${p}-${PVER}
		# point to the right debian conf
		ln -s distributions/${ddir}-$dver debian
		dpkg-buildpackage -us -uc -rfakeroot
		export pkg="$pkg $p-${PVER}.deb"
		# Et voila !
	elif [  _"$dtype" = _"port" ]; then
		cd $TOPBUILDDIR
		tar xfz $src
		cd ${p}-${PVER}
		mv distributions/${ddir}-$dver/* $TOPBUILDDIR
		cd ..
		rm -rf ${p}-${PVER}
		make DISTDIR=$TOPBUILDDIR
	elif [  _"$dfam" = _"slackware" ]; then
		mkdir -p $TOPBUILDDIR/build-${p}/install
		cd $TOPBUILDDIR
		tar xfz $src
		cd ${p}-${PVER}
		mv distributions/${ddir}-$dver/slack-* $TOPBUILDDIR/build-${p}/install
		if [ -e distributions/${ddir}-$dver/doinst.sh ]; then
			mv distributions/${ddir}-$dver/doinst.sh $TOPBUILDDIR/build-${p}/install
		fi
		if [ _"$p" = _"mindi-busybox" ]; then
			make oldconfig
			make busybox
			DESTDIR=$TOPBUILDDIR/build-${p}/usr/lib/mindi/rootfs
			make PREFIX=$DESTDIR install
		elif [ _"$p" = _"mindi" ]; then
			export DONT_RELINK=1
			export HEAD=$TOPBUILDDIR/build-${p}
			export PREFIX=/usr
			export CONFDIR=/etc
			export MANDIR=/usr/man
			export DOCDIR=/usr/doc
			export LIBDIR=/usr/lib
			export CACHEDIR=/var/cache/mindi
			export PKGBUILDMINDI="true"
			./install.sh
		elif [ _"$p" = _"mondo" ]; then
			./configure --prefix=/usr
			make VERSION=$PVER
			make DESTDIR=$TOPBUILDDIR/build-${p} install
			mkdir -p $DESTDIR/var/cache/mondo
		elif [ _"$p" = _"mondo-doc" ]; then
			make -f Makefile.man VERSION=$PVER
			make -f Makefile.howto VERSION=$PVER
			make -f Makefile.man install INSTALLDIR=$TOPBUILDDIR/build-${p}/usr/doc/$p-${PVER}
			make -f Makefile.howto install INSTALLDIR=$TOPBUILDDIR/build-${p}/usr/doc/$p-${PVER}
		else
			echo "Package $p not configured for $dfam"
		fi
		cd $TOPBUILDDIR/build-${p}
		ar=`uname -m`
		pkg1=$p-${PVER}-${ar}-${TAG}mr.tgz
		echo "Running sudo /sbin/makepkg -p -l y -c y $pkg1"
		sudo /sbin/makepkg -p -l y -c y $pkg1
		export pkg="$pkg $pkg1"
	else
		echo "Unknown"
	fi
done
echo "Packages handled : $pkg"

rm -rf $MONDOTMP

if [ $status = 0 ]; then
	if [  _"$dtype" = _"rpm" ]; then
		echo "Installing RPMS as root"
		su - -c "$opt rpm -Uvh --force $pkg"
	fi
fi
) 2>&1 | tee /tmp/build2pkg.log
