#!/bin/sh
#
# The checkreqs script checks for the EUROPA2 build requirements 
# (jam, java, gcc, doxygen) and runs them to check that the correct
# versions are in the path.
#
JAMVERSTR="Minimum Jam version is 2.4"
MINJAM_I=2
MINJAM_J=4
JAMPATH="/usr/local/beta/bin"
BADJAM=0
BADOSTYPE=1
GCCVERSTR="Minimum gcc version is 3.3.3"
MINGCC_I=3
MINGCC_J=3
MINGCC_K=3
GCCPATH="/usr/local/beta/gcc-3.3.3/bin"
BADGCC=0
JAVAVERSTR="Minimum Java version is 1.4.2"
MINJAVA_I=1
MINJAVA_J=4
MINJAVA_K=2
JAVAPATH="/usr/local/jdk1.5.0/bin"
BADJAVA=0
DOXVERSTR="Minimum Doxygen version is 1.2.14"
MINDOX_I=1
MINDOX_J=2
MINDOX_K=14
DOXPATH="/usr/local/bin"
BADDOX=0
BADPATH=0
BADENVV=0
BADJH=0
BADBAL=0
BADLL=0

echo "Checking for required software versions:"

#Check for minimum Jam version
JAMVER=`jam -v | egrep "Jam [0-9]\.[0-9]+" | cut -d" " -f2`
if [ -n "$JAMVER" ]
then
  i=`echo $JAMVER | cut -d. -f1`
  j=`echo $JAMVER | cut -d. -f2`
# ignore version info after the "r" as in 2.5rc3
  j=`echo $j | cut -dr -f1`
  if [ $i -lt $MINJAM_I ]
  then 
    BADJAM=1 
  else
    if [ $i -eq $MINJAM_I -a $j -lt $MINJAM_J ]
    then
      BADJAM=1 
    fi
  fi
  if [ $BADJAM -eq 1 ]
  then
    echo "  Jam version found is too old for build: version " $JAMVER 
    echo " " $JAMVERSTR
  fi
else
  echo "Did not find any version of Jam in search path"
  BADJAM=1 
fi
if [ $BADJAM -eq 0 ]
then
  echo "  Found Jam version $JAMVER"
fi

#Check for minimum gcc version
GCCVER=`gcc -v 2>&1 | egrep 'gcc version [0-9]\.[0-9]+' | cut -d" " -f3`
if [ -n "$GCCVER" ]
then
  i=`echo $GCCVER | cut -d. -f1`
  j=`echo $GCCVER | cut -d. -f2`
  k=`echo $GCCVER | cut -d. -f3`
# ignore version info after the "_" as in 3.3.3_01
  k=`echo $k | cut -d_ -f1`
  if [ $i -lt $MINGCC_I ]
  then 
    BADGCC=1 
  else
    if [ $i -le $MINGCC_I -a $j -lt $MINGCC_J ]
    then
      BADGCC=1 
    else
      if [ $OSTYPE != darwin ]
      then
        if [ $i -le $MINGCC_I -a $j -le $MINGCC_J -a $k -lt $MINGCC_K ]
        then
          BADGCC=1 
        fi
      fi
    fi
  fi
  if [ $BADGCC -eq 1 ]
  then
    echo "  gcc version found is too old for build: version " $GCCVER 
    echo " " $GCCVERSTR
  fi
else
  BADGCC=1 
  echo "Did not find any version of gcc in search path"
fi
if [ $BADGCC -eq 0 ]
then
  echo "  Found gcc version $GCCVER"
fi

#Check for minimum Java version
JAVAVER=`java -version 2>&1 | egrep 'java version .[0-9]\.[0-9]+\.[0-9]+' | cut -d"\"" -f2`
if [ -n "$JAVAVER" ]
then
  i=`echo $JAVAVER | cut -d. -f1`
  j=`echo $JAVAVER | cut -d. -f2`
  k=`echo $JAVAVER | cut -d. -f3`
# ignore version info after the "_" as in 1.4.2_05
  k=`echo $k | cut -d_ -f1`
  if [ $i -lt $MINJAVA_I ]
  then 
    BADJAVA=1 
  else
    if [ $i -le $MINJAVA_I -a $j -lt $MINJAVA_J ]
    then
      BADJAVA=1 
    else
      if [ $i -le $MINJAVA_I -a $j -le $MINJAVA_J -a $k -lt $MINJAVA_K ]
      then
        BADJAVA=1 
      fi
    fi
  fi
  if [ $BADJAVA -eq 1 ]
  then
    echo "  Java version found is too old for build: version " $JAVAVER 
    echo " " $JAVAVERSTR
  fi
else
  BADJAVA=1 
  echo "Did not find any version of java in search path"
fi

if [ $BADJAVA -eq 0 ]
then
  echo "  Found java version $JAVAVER"
fi

#Check for minimum Doxygen version
DOXVER=`doxygen -h 2>&1 | egrep 'Doxygen version [0-9]\.[0-9]+\.[0-9]+' | cut -d" " -f3`
if [ -n "$DOXVER" ]
then
  i=`echo $DOXVER | cut -d. -f1`
  j=`echo $DOXVER | cut -d. -f2`
  k=`echo $DOXVER | cut -d. -f3`
# ignore version info after the "_" as in 1.2.16_xx
  k=`echo $k | cut -d_ -f1`
  if [ $i -lt $MINDOX_I ]
  then 
    BADDOX=1 
  else
    if [ $i -le $MINDOX_I -a $j -lt $MINDOX_J ]
    then
      BADDOX=1 
    else
      if [ $i -le $MINDOX_I -a $j -le $MINDOX_J -a $k -lt $MINDOX_K ]
      then
        BADDOX=1 
      fi
    fi
  fi
  if [ $BADDOX -eq 1 ]
  then
    echo "  Doxygen version found is too old for build: version " $DOXVER 
    echo " " $DOXVERSTR
  fi
else
  BADDOX=1 
  echo "Did not find any version of Doxygen in search path"
fi

if [ $BADDOX -eq 0 ]
then
  echo "  Found doxygen version $DOXVER"
fi

#These are some suggested actions if version is missing or too old
if [ $BADJAM -eq 1 ]
then
  echo "Your path to Jam may be set wrong."
  if [ $OSTYPE = solaris ]
  then
    echo "Be sure to include $JAMPATH in your path."
  else  
    if [ $OSTYPE = linux ]
    then
      echo "Use: find /usr -name 'jam2.*'"
      echo "to help locate the required Jam executable."
    fi
  fi
fi


if [ $BADGCC -eq 1 ]
then
  echo "Your path to gcc may be set wrong."
  if [ $OSTYPE = solaris ]
  then
    echo "Be sure to include $GCCPATH in your path."
  else  
    if [ $OSTYPE = linux ]
    then
      echo "Use: find /usr -name gcc-3.3.3"
      echo "to help locate the required gcc executable."
    fi
  fi
fi


if [ $BADJAVA -eq 1 ]
then
  echo "Your path to Java may be set wrong."
  if [ $OSTYPE = solaris ]
  then
    echo "Be sure to include $JAVAPATH in your path."
  else  
    if [ $OSTYPE = linux ]
    then
      echo "Use: find /usr -name 'jdk1.*'"
      echo "to help locate the required gcc executable."
    fi
  fi
fi

if [ $BADDOX -eq 1 ]
then
  echo "Your path to Doxygen may be set wrong."
  if [ $OSTYPE = solaris ]
  then
    echo "Be sure to include $DOXPATH in your path."
  else  
    if [ $OSTYPE = linux ]
    then
      echo "Use: find /usr -name doxygen"
      echo "to help locate the required doxygen executable."
    fi
  fi
fi

if [ $BADJAM -eq 1 -o $BADGCC -eq 1 -o $BADJAVA -eq 1  -o $BADDOX -eq 1 ]
then
  BADPATH=1
else
  echo "Path includes required versions to build EUROPA2"
fi

echo "Checking for required environment variables:"

#Check OS type set to a known OS
if [ $OSTYPE = darwin ]
then
  BADOSTYPE=0
fi

if [ $OSTYPE = solaris ]
then
  BADOSTYPE=0
fi

if [ $OSTYPE = linux ]
then
  BADOSTYPE=0
fi

if [ $BADOSTYPE -eq 1 ]
then
 echo " [PROBLEM!] Unknown OSTYPE " $OSTYPE
 echo "            Known values are darwin, solaris, and linux." 
else 
 echo "  OSTYPE is set to " $OSTYPE
fi


if [ -z "$JAVA_HOME" ]
then
  echo "JAVA_HOME environment variable missing or not set"
  BADJH=1
else
  echo "  JAVA_HOME is set to " $JAVA_HOME
fi

#check load library
if [ $OSTYPE = darwin ]
then 
  if [ -z "$DYLD_LIBRARY_PATH" ] 
  then
    echo "  DYLD_LIBRARY_PATH environment variable missing or not set"
    BADLL=1
  else 
    echo "  DYLD_LIBRARY_PATH is set to " $DYLD_LIBRARY_PATH
  fi
else 
  if [ -z "$LD_LIBRARY_PATH" ] 
    then
      echo "  LD_LIBRARY environment variable missing or not set"
      BADLL=1
    else 
      echo "  LD_LIBRARY_PATH is set to " $LD_LIBRARY_PATH
    fi
fi

if [ $OSTYPE = darwin ]
then
  if [ "$DYLD_BIND_AT_LAUNCH"  != YES ]
  then
    echo "DYLD_BIND_AT_LAUNCH environment variable missing or not set to YES" 
    BADENV=1
  else
    echo "  DYLD_BIND_AT_LAUNCH is set to " $DYLD_BIND_AT_LAUNCH
  fi
fi

if [ $BADJH -eq 1 -o $BADPATH -eq 1 -o $BADLL -eq 1 ]
then
  BADENVV=1
  echo "Environment variables may not be set correctly to build EUROPA2"
else
  echo "Required environment variables are present"
fi

if [ $BADPATH -eq 1 -o $BADENVV -eq 1 ]
then
  exit 1
fi

exit 0
