#
# Set path for message catalog file.  Set C to be default.
NLSPATH=/opt/ibm/sna/lib/nls/msg/LC_MESSAGES/%N:/opt/ibm/sna/lib/nls/msg/%L/%N
export NLSPATH=${NLSPATH}:/opt/ibm/sna/lib/nls/msg/C/%N

#
# Set path for snareadinstcat binary
READINSTCAT=/opt/ibm/sna/bin/snareadinstcat

KERNEL2614=0
KERNEL2618=0
SLES10SP1=0
if [ `uname -r | cut -c 1-3` = 2.6 ]
then
  KERNEL26=1
  # work out if the kernel is higher than 2.6.14 or 2.6.18
  . /usr/src/LiS/config.in
  VERS=`fgrep LINUX_VERSION_CODE $KSRC/include/linux/version.h | awk ' { print $3 } ' `
  if [ $VERS -gt 132621 ]
  then
    KERNEL2614=1
    if [ $VERS -gt 132625 ]
    then
      KERNEL2618=1
    fi
    SKB=`fgrep 'skb_linearize(struct sk_buff *skb)' $KSRC/include/linux/skbuff.h`
    if [[ x${SKB} != 'x' ]]
    then
      SLES10SP1=1
    fi
  fi
else
  KERNEL26=0
fi

export CCFLAGS=
export LDFLAGS=

if [ $KERNEL26 = 0 ]
then
  if [ $# -gt 0 ]
  then
    if [ -d $1 ]
    then
      LININCL=$1/include
    else
      # echo "Cannot find Linux Source directory $1"
      $READINSTCAT 2 "$1"
      exit 1
    fi
  else
    . /usr/src/LiS/config.in
    LININCL=$KSRC/include
    if [ ! -d $LININCL ]
    then
      # echo "Cannot find Linux source directory $KSRC"
      # echo " "
      # echo "Usage: cc_snalinux [<Linux source directory>]"
      # echo " "
      # Note that snareadinstcat parameter is enclosed in quotes to guard against
      # it being blank.
      $READINSTCAT 2 "$KSRC"
      $READINSTCAT 1
      $READINSTCAT 52
      $READINSTCAT 1
      exit 2
    fi
  fi
fi

# Check the machine type, we support i686, x86_64, s390 and s390x
MACH=`uname -m`
if [ x$MACH = xi686 ]
then
  ZSERIES=0
  PSERIES=0
  IS64BIT=0
else
  if [ x$MACH = xx86_64 ]
  then
    ZSERIES=0
    PSERIES=0
    IS64BIT=1
  else
    if [ x$MACH = xs390 ]
    then
      ZSERIES=1
      PSERIES=0
      IS64BIT=0
    else
      if [ x$MACH = xs390x ]
      then
        ZSERIES=1
        PSERIES=0
        IS64BIT=1
      else
        if [ x$MACH = xppc64 ]
        then
          ZSERIES=0
          PSERIES=1
          IS64BIT=1
        else
          # echo "Invalid machine type $MACH, should be i686, x86_64, s390, s390x or ppc64"
          $READINSTCAT 35 "$MACH"
          exit 3
        fi
      fi
    fi
  fi
fi

CCKOPTS="-c -DZSERIES=$ZSERIES -DPSERIES=$PSERIES -DIS64BIT=$IS64BIT -DKERNEL_26=0 -DLINUX -D__linux__ -D_KERNEL -D__KERNEL__ -DMODULE -I$LININCL -I/usr/include/linux -I/usr/src/LiS/include -I/usr/src/LiS/include"

SNAWHATDATE=`date -u +%D%t%T`
SNAWHATUNAME1=`uname -rm`
SNAWHATUNAME2=`uname -v`
cat snalinux.c.orig | sed "s?SNAWHATDATE?$SNAWHATDATE?" | \
 sed "s?SNAWHATUNAME1 SNAWHATUNAME2?$SNAWHATUNAME1 $SNAWHATUNAME2?" > snalinux.c

if [ $KERNEL26 = 1 ]
then
  . /usr/src/LiS/config.in
  if [[ (! -d /usr/src/linux ) || ( -h /usr/src/linux ) ]]
  then
     if [[ ( -f $KSRC/Makefile ) && (! x$KSRC = x/usr/src/linux ) ]]
     then
        rm -f /usr/src/linux 2> /dev/null
        ln -fs $KSRC /usr/src/linux
     fi
  fi
  mkdir -p /etc/opt/ibm/sna/drivers/snapix0 2> /dev/null
  mv snalinux.c /etc/opt/ibm/sna/drivers/snapix0/sna_linux.c
  cd /etc/opt/ibm/sna/drivers/snapix0
  echo "make -C /usr/src/linux SUBDIRS=$PWD modules" > mk
  chmod +x mk
  echo "obj-m := sna_linux.o" > Makefile
  echo "CFLAGS += -DZSERIES=$ZSERIES -DPSERIES=$PSERIES -DIS64BIT=$IS64BIT -DKERNEL_26=1 -DKERNEL_2614=$KERNEL2614 -DKERNEL_2618=$KERNEL2618 -DSLES10SP1=$SLES10SP1 -I/usr/include/LiS" >> Makefile
  ./mk > mk.erl 2>&1
  if [ $? != 0 ]
  then
    # echo "Error: Failed to compile isolation layer driver"
    # echo "Output from make:"
    # echo " "
    $READINSTCAT 61
    $READINSTCAT 62
    $READINSTCAT 1
    cat mk.erl
    exit 4
  fi
  cd ..
  #
  # Relink main drivers
  #
  if [ $ZSERIES = 1 ]
  then
    DRIVERS=trnyisqc
  else
    DRIVERS=trnyisq
  fi
  cd /opt/ibm/sna/drivers
  for i in snapix[$DRIVERS]
  do
    cd /etc/opt/ibm/sna/drivers
    mkdir $i 2> /dev/null
    cd $i
    echo "make -C /usr/src/linux SUBDIRS=$PWD modules" > mk
    chmod +x mk
    echo > $i.c
    echo "obj-m := $i.o" > Makefile
    ./mk > mk.erl 2>&1
    if [ $? != 0 ]
    then
      # echo "Error: Failed to compile dummy $i driver"
      # echo "Output from make:"
      # echo " "
      $READINSTCAT 64 $i
      $READINSTCAT 62
      $READINSTCAT 1
      cat mk.erl
      exit 5
    fi
    cd /opt/ibm/sna/drivers
  done
  sleep 1
  for i in snapix[$DRIVERS]
  do
    cd /etc/opt/ibm/sna/drivers
    cd $i
    cp /opt/ibm/sna/drivers/$i/Driver.o $i.o
    ./mk > mk.erl 2>&1
    if [ $? != 0 ]
    then
      # echo "Error: Failed to compile $i driver"
      # echo "Output from make:"
      # echo " "
      $READINSTCAT 63 $i
      $READINSTCAT 62
      $READINSTCAT 1
      cat mk.erl
      exit 6
    fi
    cd /opt/ibm/sna/drivers
  done

else
  # 2.4 kernel

  cc -O3 $CCKOPTS snalinux.c -o Driver.o

  SMP=`uname -a | awk ' { print $5 } ' `
  if [ x$SMP = xSMP ]
  then
    UNAMEINFO=`uname -a | \
      awk ' { print $3"_"$7"_"$8"_"$9"_"$10"_"$11"_"$12 } ' `
  else
    UNAMEINFO=`uname -a | \
      awk ' { print $3"_"$6"_"$7"_"$8"_"$9"_"$10"_"$11 } ' `
  fi

  mv Driver.o Driver.o.$UNAMEINFO
fi

exit 0
