. buildsys/commonFunctions

ProcessArgs()
{
   # process arguments
   for param in $*; do
      case $param in
         -workdir)
            shift 1
            WORKDIR=$1
            shift 1
            ;;
         -runtype)
            shift 1
            RUNTYPE=$1
            shift 1
            ;;
         -depworkdir)
            shift 1
            DEPWORKDIR=$1
            shift 1
            ;;
         -repourl)
            shift 1
	        REPOSITORY_URL=$1
            shift 1
            ;;
         -deplogdir)
            shift 1
            DEPLOGDIR=$1
            shift 1
            ;;
         -hostname)
            shift 1
            HOSTNAME=$1
            shift 1
            ;;
         -index)
            shift 1
            INDEX=$1
            shift 1
            ;;
         -configfile)
            shift 1
            CONFIGFILE=$1
            shift 1
            ;;
         -product)
            shift 1
            PRODUCT=$1
            shift 1
            ;;
          -depargs)
            shift 1
            DEP=$1
	        shift 1
	        ;;
          -logdir)
            shift 1
            LOGDIR=$1
            shift 1
            ;;
          -version)
            shift 1
            VER=$1
            shift 1
            ;;
          -revision)
            shift 1
            REV=$1
            shift 1
            ;;
          *)
          ;;
      esac
   done
}

PreRunSetup()
{
   if [ -z "$CONFIGFILE" ]
   then
      echo "CONFIGFILE not set, PreRunSetup must be called after ProcessArgs and LoadConfig"
      return 1
   fi
   if [ -f "$CONFDIR/$PRE_BUILDSYS_SETUP" ]
   then
      . $CONFDIR/$PRE_BUILDSYS_SETUP
   fi
   return 0

}

PostRunSetup()
{
   if [ -z "$CONFIGFILE" ]
   then
      echo "CONFIGFILE not set, PostRunSetup must be called after ProcessArgs and LoadConfig"
      return 1
   fi
   if [ -f "$CONFDIR/$POST_BUILDSYS_SETUP" ]
   then
      . $CONFDIR/$POST_BUILDSYS_SETUP
   fi
   return 0
}

CHECK_COMPILER()
{
    #These two vars must be set in the env file for the
    #build
    if [ "$COMPILER_CHECK_STRING" != "$COMPILER_VER" ]
    then
        echo "Incorrect compiler version"
        echo "Expected - [$COMPILER_CHECK_STRING]"
        echo "Got      - [$COMPILER_VER]"
        exit 1
    fi
}

SetupBuildTmpDir()
{
   BLDTMPDIR=$WORKDIR/tmp
   export BLDTMPDIR
   if [ -d "$BLDTMPDIR" ]
   then
      Assert rm -rf $BLDTMPDIR
   fi
   Assert mkdir $BLDTMPDIR
}

SetupLogDir()
{
   if [ -z "$WORKDIR" ]
   then
      echo "WORKDIR not set, SetupLogDir must be called after ProcessArgs"
      return 1
   fi
   LOGDIR=$WORKDIR/log
   export LOGDIR
}

SetupResFile()
{
   if [ -z "$LOGDIR" ]
   then
      SetupLogDir
   fi
   RESFILE=$LOGDIR/RESULTS
}

Store()
{
   if [ "$RLOGDIR" = "" ]
   then
      echo '$RLOGDIR not set cannot store to $LOG_HOST'
      exit 1
   fi
   $RCP -rp $1 $LOG_USER@$LOG_HOST:$RLOGDIR/$2
}

Retrieve()
{
   MAXTRIES=30
   if [ "$INPUT_DIR" = "" ]
   then
      echo '$INPUT_DIR not set cannot retrieve from $LOG_HOST'
      return 1
   fi
   TRY=0
   # The log is always copied after the release, so wait for it to appear
   # to prevent downloading a part uploaded release!!
   $RCP $LOG_USER@$LOG_HOST:$INPUT_DIR/logs/$TARGET_EORBENV-create-release.txt .
   while [ $? != 0 ]
   do
      echo "Build not transfered from $LOG_HOST, build still in progess?"

      TRY=`echo $TRY 1 + p q | dc`
      if [ $TRY = $MAXTRIES ]
      then
         echo "Couldn't rcp build $1 in $MAXTRIES attempts aborting"
         return 1
      fi
      echo "Waiting..."
      sleep 600
      $RCP eorb@$LOG_HOST:$INPUT_DIR/logs/$TARGET_EORBENV-create-release.txt .
   done
   $RCP eorb@$LOG_HOST:$INPUT_DIR/$1 $2
   if [ $? != 0 ]
   then
      echo "rcp of build \"$INPUT_DIR/$1\" failed."
      return 1
   fi
}

Install()
{
   FILENAME=$1
   echo "Extracting $FILENAME"
   case $FILENAME in
      *.tar.gz)
         gzip -cd $FILENAME | tar -xf - || return 1
         ;;
      *.zip)
         unzip $FILENAME || return 1
         ;;
      *.tar.Z)
         compress -cd $FILENAME | tar -xf - || return 1
         ;;
      *)
         echo "ERROR don't know how to install $FILENAME"
         return 1
         ;;
   esac
   echo "Build Successfully Installed"
}

RunOnStore()
{
   $RSH $LOG_HOST -l $LOG_USER "$*" || return 1
}

mkdirOnStore()
{
   RunOnStore mkdir $* || return 1
}

SetupRemoteLogDir()
{
   RLOGDIR=results/$RUNTYPE/$PRODUCT/$DATE/$VER/$OSNAME/$INDEX
   Assert mkdirOnStore -p $RLOGDIR/logs
   export RLOGDIR
}


Findrm ()
{
    find $2 -type $1 -name "$3" | xargs rm -rf 2> /dev/null
    LEFTOVER=`find $2 -type $1 -name "$3"`
    if [ "$LEFTOVER" != "" ]
    then
        echo $4
        exit 1
    fi
}

ArchiveLogs ()
{
   if [ -z "$RLOGDIR" ]
   then
      SetupRemoteLogDir
   fi

   for i in $LOGDIR/*
   do
      Assert Store $i logs/
   done
}

SetState()
{
    if [ -z "$LOGDIR" ]
    then
        SetupLogDir
    fi
    echo "$1" > $LOGDIR/STATE
    ArchiveLogs
}

WaitForParentBuild()
{
    if [ "$DEP" != "none" ]
    then
        SetState "Awaiting Parent"
        MAXTRIES=150
        TRY=0
        grep Complete $DEPLOGDIR/STATE > /dev/null 2>&1
        while [ $? != 0 ]
        do
            TRY=`echo $TRY 1 + p q | dc`
            if [ $TRY = $MAXTRIES ]
            then
                echo "ERROR: Waited 5 hours for parent build - ABORTING"
	            SetState Failed
	            exit
            fi
            echo "Waiting for parent build to complete"
	        ArchiveLogs
            sleep 120
            grep Failed $DEPLOGDIR/STATE > /dev/null 2>&1
            if [ $? = 0 ]
            then
	            echo "ERROR: Parent build failed - ABORTING"
	            SetState Failed
            fi
            grep Complete $DEPLOGDIR/STATE > /dev/null 2>&1
        done
        AddParentBuildInfo
        SetState "Parent Ready"
    fi
}

AddParentBuildInfo()
{
   if [ "$DEP" != "none" ]
   then
      echo "# Details of Parent Build"
      sed 's/^\([^#]\)/PARENT_\1/' < $DEPLOGDIR/BUILDINFO >> $LOGDIR/BUILDINFO
   fi
}

LoadConfigs()
{
   if [ -z "$CONFIGFILE" ]
   then
      echo "CONFIGFILE not set, LoadConfigs must be called after ProcessArgs"
      return 1
   fi
   CONFDIR=`dirname $CONFIGFILE`
   # First the buildsystem config
   . $CONFIGFILE
   # Then the config for opensplice
   . configs/$INDEX
   return 0
}

pathcheck ()
{
    for i in $SPATH
    do
        PATHCHECK_FOUND="`echo $i | tr '\177' ' '`/$1"
        test -f "$PATHCHECK_FOUND" && return 0
    done
    PATHCHECK_FOUND=
    return 1
}

# Quick mock up of readlink (which doesn't exist on Solaris or AIX).
# @param The DIRECTORY ONLY that may be a link
#
FakeReadlink() {
    dir=$1
    cd $dir 2> /dev/null && pwd -P
}
