#!/bin/sh

set -e

. /etc/sourcerer/kernel-builder.conf

if [ "$options" = "--initrd" ]; then
  export INITRD_OK=yes
fi

# Check for pid file
if [ -f $PIDFILE ]; then
    PID=`cat $PIDFILE`
    ps $PID | grep -q $PID && exit 0 # already building
    rm $PIDFILE
fi

# Set pid file
trap 'rm -rf "$PIDFILE"' EXIT
echo $$ > "$PIDFILE"

build() {
    local NAME="$1"
    local NEEDFILE="/var/lib/sourcerer/kernel-builder/$NAME.needs-build"
    local REVISIONFILE="/var/lib/sourcerer/kernel-builder/$NAME.revision"
    local CONFIGFILE="/var/lib/sourcerer/kernel-builder/$NAME.config"
    export MODULE_LOC="$BUILD_DIR/$NAME/modules"

    # Load config for this image
    . "/var/lib/sourcerer/kernel-builder/$NAME.conf"

    # Check for needs-build
    if [ ! -f $NEEDFILE ]; then
	return # nothing to build
    fi

    # Increase the revision for this build
    if [ -f $REVISIONFILE ]; then
	REVISION=`cat $REVISIONFILE`
	REVISION=$((REVISION+1))
    else
	REVISION=1
    fi
    echo $REVISION > $REVISIONFILE

    # Start build
    echo "`date`: Sourcerer kernel-image build $VERSION-$NAME-$REVISION started"
    rm -rf "$BUILD_DIR/$NAME"
    mkdir -p "$BUILD_DIR/$NAME"
    cd "$BUILD_DIR/$NAME"
    echo "Unpacking kernel-source-$VERSION.tar.bz2"
    tar jxf "/usr/src/kernel-source-$VERSION.tar.bz2"
    for i in $MODULES; do
	FILE=`ls /usr/src/$i.tar.*`
	echo "Unpacking $i ($FILE)"
	case $FILE in
	    *gz)
		tar -xzf "$FILE" || FAIL=failed
		;;
	    *bz2)
		tar -jxf "$FILE" || FAIL=failed
		;;
	    *)
		echo >2 "Unknown compression on $i ($FILE)"
		FAIL=failed
		;;
	esac
    done
    cd "kernel-source-$VERSION"
    cp "$CONFIGFILE" .config
    if [ -z $FAIL ]; then
	echo make-kpkg --append_to_version "-$NAME-$REVISION" --revision "$VERSION-$NAME-$REVISION" $OPTIONS $PATCHES $TARGETS
	make-kpkg --append_to_version "-$NAME-$REVISION"  --revision "$VERSION-$NAME-$REVISION" $OPTIONS $PATCHES $TARGETS || FAIL=failed
    fi

    if [ -z $FAIL ]; then
	echo "`date`: Sourcerer kernel-image build $VERSION-$NAME-$REVISION done"
    else
	echo "`date`: Sourcerer kernel-image build $VERSION-$NAME-$REVISION failed"
    fi

    # cleanup - check if NEEDFILE was touched while we run
    cd ..
    rm -rf kernel-source-$VERSION modules *changes
    NEEDTIME=`stat --format=%Z $NEEDFILE`
    PIDTIME=`stat --format=%Z $PIDFILE`
    if [ $NEEDTIME -le $PIDTIME ]; then
	rm $NEEDFILE
    fi
}

cd /var/lib/sourcerer/kernel-builder
for CONF in *.conf; do
    build "`basename "$CONF" .conf`"
done

rm $PIDFILE
