#!/bin/sh
#
#	Script to grab linux-HA from CVS, build it, and
#	run BasicSanityCheck on it...
#
#	Certain parts of this script need superuser permissions.
#	We use sudo for these.  For convenience we do something with sudo
#	right at the first, and to avoid getting timed out on the password
#	we do something gratuitous with sudo before/after commands that take
#	a while...  It works for me... YMMV ;-)
#
ANDCOFLAGS="-r TNG_2004_ALPHA_2"	# Andrew's version
ANDCFOPTIONS="--enable-crm"	# Andrew's version

STABLECOFLAGS="-r STABLE_1_2"		# Stable version
STABLECFOPTIONS="--disable-ansi"	# Stable version

#ADVENTUROUS="--enable-crm --enable-eventd --enable-checkpointd --enable-cms --enable-swig --enable-snmp --enable-lrm --enable-ansi --enable-all"
ADVENTUROUS="--enable-crm --enable-lrm --disable-swig --disable-snmp-subagent --enable-ansi"
ADVENTUROUS="--enable-all --enable-swig --enable-ansi"
ADVENTUROUS="--enable-crm --enable-ansi --enable-snmp-subagent"

NUM="`echo $1 | sed 's%\.%_%g'`"
case $1 in
  stable|1.2)	
		COFLAGS="$STABLECOFLAGS"
		CFOPTIONS="$STABLECFOPTIONS"
		;;
  andrew|tng)	
		COFLAGS="$ANDCOFLAGS"
		CFOPTIONS="$ANDCFOPTIONS"
		;;

  [1-9]*.*[02468].*)
		CFOPTIONS="$STABLECFOPTIONS --enable-snmp-subagent"
		COFLAGS="-r STABLE_$NUM"
		;;

  [1-9]*.*[13579].*)
		CFOPTIONS="$ADVENTUROUS"
		COFLAGS="-r BETA_$NUM"
		;;

  cvs|head|*)
		COFLAGS=""
		CFOPTIONS="$ADVENTUROUS"
		;;
esac

MODULE=linux-ha
DEFAULTRPMRC=/usr/lib/rpm/rpmrc
CVSPASS=$HOME/.cvspass
CVSANON="/1 :pserver:guest@cvs.linux-ha.org:2401/home/cvs/linux-ha AIbdZ,"


##########################################
#	Something to keep updating our last sudo time
##########################################
GratuitousSudo() {
  sudo echo keeping root permissions >/dev/null
}

##########################################
#	Set up our temporary directory...
##########################################
mktmpdir() {
  TMPDIR=`mktemp -d /tmp/tmp.XXXXXXXX`
  WS=$TMPDIR/$MODULE
  #trap "rm -fr $TMPDIR" 0

  RPMDIR=$TMPDIR/rpms
  RPMRC=$TMPDIR/rpmrc
  RPMMACROS=$TMPDIR/rpmmacros
  echo "Workspace is:	$WS"
}

##########################################
#	Set up our RPM area
#	(not used at the moment due to some kind of bug)
##########################################
rpmsetup() {
  mkdir $RPMDIR
  mkdir $RPMDIR/BUILD  $RPMDIR/RPMS  $RPMDIR/SOURCES  $RPMDIR/SPECS
  mkdir $RPMDIR/SRPMS
  for j in `uname -m` i386 i486 i586 i686
  do
    if
      [ ! -d $RPMDIR/RPMS/$j ]
    then
      mkdir $RPMDIR/RPMS/$j
    fi
  done
  # This ought to work, but it doesn't :-(
  RPMOPTS="--rcfile $DEFAULTRPMRC:$RPMRC"
  RPMOPTS=""
  RPMROOT=`rpm $RPMOPTS --showrc | grep ": _topdir	" | cut -f2`

  RPMROOT=`echo $RPMROOT | sed 's@%{_usrsrc}@/usr/src@'`
  cat <<-! >$RPMMACROS
	%packager Alan Robertson <alanr@unix.sh> (automated via $0)
	%_topdir:$TMPDIR/rpms
	!
  echo "`rpm --showrc | grep macrofiles.*:`:$RPMMACROS" >$RPMRC
}

##########################################
#	CVS extraction
##########################################

getfromcvs() {
  cd $TMPDIR
  export CVSROOT=:pserver:guest@cvs.linux-ha.org:/home/cvs/linux-ha

  if
    grep "$CVSANON" $CVSPASS >/dev/null 2>&1 
  then
    : Good!
  else
    echo "$CVSANON" >> $CVSPASS
  fi
  echo cvs -q co $COFLAGS $MODULE
  cvs -q co $COFLAGS $MODULE
}


##########################################
#	Configure workspace
##########################################
configureWS() {
  cd $WS
  rm -f ./configure
  GratuitousSudo
  ./ConfigureMe bootstrap $CFOPTIONS
  GratuitousSudo
}

##########################################
#	Make RPM
##########################################
Make() {
  cd $WS
  #	This should work -- but it doesn't...
  #make RPMFLAGS="--ta --rcfile $DEFAULTRPMRC:$RPMRC" rpm
  GratuitousSudo
  make rpm
  GratuitousSudo

  cp heartbeat*.tar.gz $RPMROOT/SRPMS
  RPMFILE=`find $RPMROOT/RPMS -type f -name 'heartbeat-pils*' -mtime -2 -print | xargs ls -rt | tail -1`
  RPMDIR=`dirname $RPMFILE`
  RPMBASE=`echo "$RPMFILE" | sed 's%^.*/%%'`
  RPMSUFFIX=`echo "$RPMBASE" | sed "s%^heartbeat-pils%%"`
  RPMLIST=""
  # For now, we ignore ldirectord and the .src.rpm...
  for rpm in heartbeat-pils heartbeat-stonith heartbeat
  do
    ls -l $RPMDIR/${rpm}$RPMSUFFIX
    RPMLIST=`echo $RPMLIST $RPMDIR/${rpm}$RPMSUFFIX`
  done
  MTYPE=`uname -m`
}

##########################################
#	Install $RPMLIST locally (as root)
##########################################
LocalInstall() {
	sudo rpm --upgrade --force $RPMLIST
}

##########################################
#	Run sanity check (as root)
##########################################
SanityCheck() {
	CHECK=`rpm -q heartbeat -l | grep BasicSanityCheck`
	sudo $CHECK
}

set -e
echo "Obtaining root permissions..."
GratuitousSudo
mktmpdir
rpmsetup
	GratuitousSudo
getfromcvs
	GratuitousSudo
configureWS
	GratuitousSudo
Make
echo "RPMS created are: $RPMLIST"
	GratuitousSudo
LocalInstall
	GratuitousSudo
SanityCheck
