#!/bin/bash
#----------------------------------------------------------------------
# $Id: nsb-functions,v 1.10 2002/08/02 17:21:57 rstory Exp $
# Author: Robert Story <rstory@freesnmp.com>

#----------------------------------------------------------------------
#
# Utility vars
#
NSB_QUIET=0
NSB_PROMPT=1
NSB_CLEAN=1
NSB_SKIP_CONFIG=0
NSB_SKIP_BUILD=0
NSB_SKIP_TEST=0
NSB_SKIP_INSTALL=0
NSB_VIEW=cat
DATE=`date +%y%m%d_%H%M`

#----------------------------------------------------------------------
#
# Utility functions
#

nsb-info()
{
   if [ $NSB_QUIET -ne 1 ]; then
      echo $@
   fi
}

nsb-prompt()
{
   if [ "x$1" = "x-f" ]; then
      shift 1
      tmp_nsb_prompt=1
   else
      tmp_nsb_prompt=$NSB_PROMPT
   fi
   if [ $tmp_nsb_prompt -eq 1 ]; then
      echo $@
      read nsb_prompt_dummy
   else
      echo "$@ (PROMPT SKIPPED)"
   fi
}

#----------------------------------------------------------------------
#
nsb-get-config()
{
   if [ $# -ne 2 ]; then
      echo "usage: $0 release src_dir dest_dir"
      exit
   fi
   ngc_src=$1
   ngc_inst=$2
   echo $ngc_src/configure --prefix=$ngc_inst --with-sys-location=Unknown \
      --with-sys-contact='System Administrator' --disable-privacy \
      --with-defaults --with-mib-modules='host disman/event-mib'
   $ngc_src/configure --prefix=$ngc_inst --with-sys-location=Unknown \
      --with-sys-contact='System Administrator' --disable-privacy \
      --with-defaults --with-mib-modules='host disman/event-mib'
}

nsb-sysname()
{
   echo `uname -mrs | tr ' /' _`
}

nsb-zip()
{
   if [ $# -ne 3 ]; then
      echo "usage: $0 release build_directory dest_dir"
      exit
   fi

   release=$1
   build_dir=$2
   dest_dir=$3

   platform=`nsb-sysname`
   build=$build_dir/$platform

   if [ ! -d $build ]; then
      echo "$build directory does not exist!"
      exit;
   fi

   if [ ! -d $build/usr ]; then
      echo "install directory $build/usr directory does not exist!"
      exit;
   fi

   cd $build

   rm -f $dest_dir/$release-$platform.tar
   nsb-info "tar cf $dest_dir/$release-$platform.tar usr"
   tar cf $dest_dir/$release-$platform.tar usr

   nsb-info "gzip --best $dest_dir/$release-$platform.tar"
   gzip --best $dest_dir/$release-$platform.tar

   if [ $NSB_QUIET -ne 1 ]; then
      ls -lt $dest_dir
   fi
}

nsb-make()
{
   target=$1
   shift 1
   parms=$@

   nsb_make_OUTPUT=nsb-make-$target.$DATE
   nsb-info "Making $target... (log is $nsb_make_OUTPUT)"
   make $target 2>&1 | tee $nsb_make_OUTPUT

   nsb-info "Checking for errors..."
   egrep "Error|FAIL|warn|No |exists" $nsb_make_OUTPUT \
         > nsb-make-$target-allerrs.$DATE
   egrep -v "^/usr" nsb-make-$target-allerrs.$DATE \
         > nsb-make-$target-nerrs.$DATE
   egrep -v "warn" nsb-make-$target-nerrs.$DATE \
         > nsb-make-$target-errs.$DATE
   nsb_make_rc=$?
   if [ $nsb_make_rc -eq 0 ]; then
      nsb-prompt -f "press enter to view errors"
      $NSB_VIEW nsb-make-$target-errs.$DATE
   fi

   return $nsb_make_rc
}

nsb-build()
{
   if [ $# -ne 4 ]; then
      echo "usage: $0 release src_dir build_directory dest_dir"
      exit
   fi

   release=$1
   src_dir=$2
   build_dir=$3
   dest_dir=$4

   if [ ! -d $src_dir ]; then
      echo "$src_dir does not exist!"
      exit
   fi

   if [ ! -d $build_dir ]; then
      mkdir $build_dir
      if [ ! -d $build_dir ]; then
         echo "$build_dir directory does not exist!"
         exit;
      fi
   fi

   nsb-info "Changing directories to $build_dir"
   cd $build_dir

   if [ $NSB_CLEAN -eq 1 ]; then
      nsb-info "Cleaning up..."
      nsb-info "rm -fR nsb-* $dest_dir 2>&1 > /dev/null"
      rm -fR nsb-* $dest_dir 2>&1 > /dev/null
      if [ -f Makefile ]; then
         make distclean
         nsb_build_rc=$?
         if [ $nsb_build_rc -ne 0 ]; then
            echo "Error during cleanup... aborting."
            return 0
         fi
      fi
   fi

   if [ $NSB_SKIP_CONFIG -ne 1 ]; then
      nsb-info "Configuring... (log is nsb-config.$DATE)"
      nsb-get-config $src_dir $dest_dir | tee nsb-config.$DATE
      nsb-prompt "press enter to continue"
   fi

   if [ $NSB_SKIP_BUILD -eq 1 ]; then
      nsb-info "Skipping 'make all'"
   else
      nsb-make all
      nsb_build_rc=$?
      if [ $nsb_build_rc -eq 0 ]; then
         return $nsb_build_rc
      fi
   fi

   if [ $NSB_SKIP_TEST -eq 1 ]; then
      nsb-info "Skipping 'make test'"
   else
      nsb-prompt "No errors found, press enter to run tests"
      nsb-make test
      nsb_build_rc=$?
      if [ $nsb_build_rc -eq 0 ]; then
         return $nsb_build_rc
      fi
   fi

   if [ $NSB_SKIP_INSTALL -eq 1 ]; then
      nsb-info "Skipping 'make install'"
   else
      nsb-prompt "No errors found, press enter to install"
      nsb-make install prefix=$dest_dir exec_prefix=$dest_dir
      nsb_build_rc=$?
      if [ $nsb_build_rc -eq 0 ]; then
         return $nsb_build_rc
      fi
   fi

   return $nsb_build_rc
}
