#!/bin/bash
# 
# imb/package
#
# Set up imb build environment to build rpm for a new kernel version
# This will change imb/makefile to have -DLINUXAS if RH AS 2.1
#
# Note:
# The kernel source should be in /usr/src/linux.
# If RedHat, this may also require the following:
# (cd /usr/src/linux; make mrproper; cp /boot/config-`uname -r` .; make oldconfig; make dep; make prepare)
#
defbuildnum=28
kver=`uname -r`
kcore=`echo $kver |cut -f1-2 -d'.'`
kbase=`echo $kver |cut -d'-' -f1`
ktag2=`echo $kver |cut -d'-' -f2`
bver=`echo $ktag2 |sed -e 's/smp//'`
imbver=5.6.0
vfile=include/linux/version.h
bfile=install/iscinstall/imb.spec
tmped=/tmp/ed.tmp
cdir=`pwd`
imbmake=$cdir/imb/makefile
imbmakemv=$cdir/imb/makefile.old
imbh=$cdir/imb/imb_drv.h

if [ $# -ge 1 ]
then
   buildnum=$1
else 
   buildnum=$defbuildnum
fi

   
HaveKSrc=0
VERSION=`uname -r|sed "s/-/./g"`
INSTALDIR=$cdir/install/iscinstall
RPMCOM="POST-RH-8.0"	
RHVER=RH80
export RHVER RPMCOM INSTALDIR
export IMBDIR=$cdir

rpm -qa |grep kernel-devel >/dev/null 2>&1
if [ $? -eq 0 ]
then
   HaveKSrc=1
else
   rpm -qa |grep kernel-source >/dev/null 2>&1
   if [ $? -eq 0 ]
   then
      HaveKSrc=1
   fi
fi

if [ $HaveKSrc -eq 0 ]
then
   echo "WARNING: kernel-devel or kernel-source was not detected."
   echo "Only proceed if you have installed kernel source/headers."
   echo "Press enter if you wish to continue"
   read ans
fi

# Make sure the driver code version matches the build number      
cat - <<%%% >$tmped
1
/IMB_VER
c
#define IMB_VER  "${buildnum}"
.
w
q
%%%
ed ${imbh} <$tmped

if [ "$kcore" = "2.6" ]
then
   cd $INSTALDIR
   sed -e "s/Version: 3.1/Version: $VERSION/" -e "s/Release: 1/Release: $buildnum/" -e "s/%define KVer 2.6.0/%define KVer $kver/" ipmidrv26-spec  > ipmidrv-spec.bld
   make all
   exit 0
fi
   
# some mvl kernels need to use makefile.old,
# since their kernel include files are in different places.
is_mv2=0
echo $kver | grep mvlcge21  >/dev/null 2>&1  # (mvlcge21)
if [ $? -eq 0 ]
then
   is_mv2=1
fi
echo $kver | grep mvlcge30  >/dev/null 2>&1  # (mvlcge30)
if [ $? -eq 0 ]
then
   is_mv2=1
fi

if [ $is_mv2 -eq 1 ]
then 
      flg=
      rhver=RH80
      rpmv=rpmbuild
      echo "Edit $imbmakemv to remove -DLINUXAS, "
      cat - <<%%% >$tmped
1
/^K_CFLAGS
c
K_CFLAGS = -D__KERNEL__ -DMODULE -D__SMP__ -DCONFIG_X86_LOCAL_APIC -DMODULES 
.
/^RHVER
c
RHVER = RH80
.
w
q
%%%
      ed ${imbmakemv} <$tmped
      cd $cdir/imb
      make -f ${imbmakemv} clean
      make -f ${imbmakemv}
      echo "then edit $vfile and install/iscinstall/ipmidrv-spec.bld "
      echo "   for $kbase"
      cd $INSTALDIR
      sed -e "s/Version: 3.1/Version: $VERSION/" -e "s/Release: 1/Release: $buildnum/" -e "s/%define KVer 2.6.0/%define KVer $kver/" ipmidrv-spec  > ipmidrv-spec.bld
      rpmbuild -bb ipmidrv-spec.bld
      exit 0
fi

# make sure /usr/src/linux points to correct kernel path
if [ ! -d /usr/src/linux ]
then 
   mkdir -p /usr/src
   cd /usr/src 
   rm -f linux   2>/dev/null
   ln -s /lib/modules/`uname -r`/build linux
fi
echo "Setting $vfile version to $kver-$bver ..."
# edit spec file
cat - <<%%% >$tmped
1
/define KVER
c
%define KVER $kbase
.
1
/define BVER
c
%define BVER $bver
.
w
q
%%%
# ed $bfile <$tmped
# edit version.h include file
cat - <<%%% >$tmped
1
/^#define UTS_RELEASE
c
#define UTS_RELEASE "$kver"
.
w
q
%%%
ed /usr/src/linux/$vfile <$tmped
# ed /usr/$vfile <$tmped
cp -f /usr/src/linux/$vfile /usr/$vfile

# edit imb/makefile to say if Linux RH AS 2.1 or not
echo $kver | grep mvlcge  # >/dev/null 2>&1  # (mvlcge30 or mvlcge21)
is_mv3=$?
if [ $is_mv3 -eq 0 ]
then
   flg=-DLINUXAS
   rhver=RH80
   rpmv=rpmbuild
else
 if [ "$kbase" = "2.4.9" ]
 then
   flg=-DLINUXAS
   rhver=AS
   rpmv=rpmbuild
 else
  echo $kver | grep EL  # >/dev/null 2>&1
  if [ $? -eq 0 ]
  then
   flg=-DLINUXAS
   rhver=AS
   rpmv=rpmbuild
  else
   if [ -f /etc/SuSE-release ]
   then
      flg=
      rhver=RH80
      rpmv=rpm
   else
      echo RH80 should get here
      flg=
      rhver=RH80
      rpmv=rpmbuild
   fi
  fi
 fi
fi

uname -a |grep SMP >/dev/null
smp_ret=$?
if [ $smp_ret -eq 0 ]
then
   smpflg=-D__SMP__
else
   smpflg=
fi
echo "kver=$kver LINUXAS_flg=$flg  SMPflg=$smpflg RHver=$rhver"
cat - <<%%% >$tmped
1
/^K_CFLAGS
c
K_CFLAGS = -D__KERNEL__ -DMODULE  $smpflg -DCONFIG_X86_LOCAL_APIC -DMODULES $flg
.
/^RHVER
c
RHVER = $rhver
.
w
q
%%%
if [ -f $imbmake ] 
then
   ed $imbmake <$tmped
fi
cat - <<%%% >$tmped
1
/^RPMCOM
c
RPMCOM=$rpmv
.
w
q
%%%
ed install/iscinstall/makefile <$tmped

# 
# begin rpm package build
#
VERSION=`uname -r|sed "s/-/./g"`
INSTALDIR=$cdir/install/iscinstall

b_date=`date +" %b %d %Y"`
echo echo IMB Linux build No: $1. Date: $b_date > iscbuild

#
# Remove the "build complete" semaphore and create a new incomplete semaphore
#
rm -f install/iscinstall/buildnotify
echo incomplete > install/iscinstall/buildnotify
echo Build output messages will be saved in `pwd`/pkg.out

RHVER=$rhver
if [ "$rpmv" = "rpmbuild" ]
then 
	RPMCOM="POST-RH-8.0"	
else
	RPMCOM="PRE-RH-8.0"	
fi

echo OS version $VERSION
echo RedHat $RHVER
export OUTDIR=`uname -r`
export RHVER RPMCOM INSTALDIR
	
# make combo rpm (smp/up)
if [ $is_mv3 -eq 1 ]
then
  echo "Not mvlcge"
  # echo "Not mvlcge, so making combo rpm ..."
  # (cd $INSTALDIR;  make objrpm 2>&1 | tee -a `pwd`/pkg.out)
fi

echo "Making target rpm ..."
cd $INSTALDIR
      
sed -e "s/Version: 3.1/Version: $VERSION/" -e "s/Release: 1/Release: $buildnum/" -e "s/%define KVer 2.6.0/%define KVer $kver/" ipmidrv-spec  > ipmidrv-spec.bld
make all 2>&1 | tee `pwd`/pkg.out

cd $cdir
# mkdir -p obj/$OUTDIR
# cp -f imb/imb obj/$OUTDIR

