#! /bin/sh
#
#  Checks that the GCC major and minor versions, previously stored in file $1
#  is the same than those expressed by the arguments $2 and $3.
#
#  File $1 may contain up to 7 lines. At least one must match $2 and $3.
#
#  É. Canot -- IPR/CNRS -- Nov 2019
#
#-----------------------------------------------------------------------

# needs at least 3 args: 1 filename and 2 strings
if [ $# -lt 3 ]; then
  echo
  echo "  usage: `basename $0` file arg2 arg3"
  echo "         (where file contains old value arg)"
  echo
  exit 1
fi

FILE=$1

MAJOR_VERSION=$2
MINOR_VERSION=$3

# read FILE (it should always exist!)
if [ -f $FILE ]; then
  if [ -s $FILE ]; then # FILE exists and has a size greater than zero
    :
  else
    exit 0
  fi
else
  echo
  echo "  ERROR: the file 'make_opt.inc' should always exist!"
  echo
  echo "         try to type 'make clean' before..."
  echo
  exit 1
fi
set `cat $FILE`

ARG1_OLD=$1
ARG2_OLD=$2
ARG3_OLD=$3
ARG4_OLD=$4
ARG5_OLD=$5
ARG6_OLD=$6
ARG7_OLD=$7

IFS="=" # new Internal Field Separator

#========================== process major version ==========================

MAJOR_FOUND=0
MAJOR_OK=0

if [ -n "$ARG1_OLD" ]; then
  set $ARG1_OLD
  ARG_NAME_OLD=$1
  VERSION_OLD=$2
  if [ "GCC_FAMILY_MAJOR" = "$ARG_NAME_OLD" ]; then
    MAJOR_FOUND=1
    if [ "$MAJOR_VERSION" = "$VERSION_OLD" ]; then
      MAJOR_OK=1
    else
      echo
      echo "  ERROR: GCC major version mismatched !"
      echo
      echo "         old: $VERSION_OLD but new: $MAJOR_VERSION"
    fi
  fi
fi

if [ -n "$ARG2_OLD" ]; then
  set $ARG2_OLD
  ARG_NAME_OLD=$1
  VERSION_OLD=$2
  if [ "GCC_FAMILY_MAJOR" = "$ARG_NAME_OLD" ]; then
    MAJOR_FOUND=1
    if [ "$MAJOR_VERSION" = "$VERSION_OLD" ]; then
      MAJOR_OK=1
    else
      echo
      echo "  ERROR: GCC major version mismatched !"
      echo
      echo "         old: $VERSION_OLD but new: $MAJOR_VERSION"
    fi
  fi
fi

if [ -n "$ARG3_OLD" ]; then
  set $ARG3_OLD
  ARG_NAME_OLD=$1
  VERSION_OLD=$2
  if [ "GCC_FAMILY_MAJOR" = "$ARG_NAME_OLD" ]; then
    MAJOR_FOUND=1
    if [ "$MAJOR_VERSION" = "$VERSION_OLD" ]; then
      MAJOR_OK=1
    else
      echo
      echo "  ERROR: GCC major version mismatched !"
      echo
      echo "         old: $VERSION_OLD but new: $MAJOR_VERSION"
    fi
  fi
fi

if [ -n "$ARG4_OLD" ]; then
  set $ARG4_OLD
  ARG_NAME_OLD=$1
  VERSION_OLD=$2
  if [ "GCC_FAMILY_MAJOR" = "$ARG_NAME_OLD" ]; then
    MAJOR_FOUND=1
    if [ "$MAJOR_VERSION" = "$VERSION_OLD" ]; then
      MAJOR_OK=1
    else
      echo
      echo "  ERROR: GCC major version mismatched !"
      echo
      echo "         old: $VERSION_OLD but new: $MAJOR_VERSION"
    fi
  fi
fi

if [ -n "$ARG5_OLD" ]; then
  set $ARG5_OLD
  ARG_NAME_OLD=$1
  VERSION_OLD=$2
  if [ "GCC_FAMILY_MAJOR" = "$ARG_NAME_OLD" ]; then
    MAJOR_FOUND=1
    if [ "$MAJOR_VERSION" = "$VERSION_OLD" ]; then
      MAJOR_OK=1
    else
      echo
      echo "  ERROR: GCC major version mismatched !"
      echo
      echo "         old: $VERSION_OLD but new: $MAJOR_VERSION"
    fi
  fi
fi

if [ -n "$ARG6_OLD" ]; then
  set $ARG6_OLD
  ARG_NAME_OLD=$1
  VERSION_OLD=$2
  if [ "GCC_FAMILY_MAJOR" = "$ARG_NAME_OLD" ]; then
    MAJOR_FOUND=1
    if [ "$MAJOR_VERSION" = "$VERSION_OLD" ]; then
      MAJOR_OK=1
    else
      echo
      echo "  ERROR: GCC major version mismatched !"
      echo
      echo "         old: $VERSION_OLD but new: $MAJOR_VERSION"
    fi
  fi
fi

if [ -n "$ARG7_OLD" ]; then
  set $ARG7_OLD
  ARG_NAME_OLD=$1
  VERSION_OLD=$2
  if [ "GCC_FAMILY_MAJOR" = "$ARG_NAME_OLD" ]; then
    MAJOR_FOUND=1
    if [ "$MAJOR_VERSION" = "$VERSION_OLD" ]; then
      MAJOR_OK=1
    else
      echo
      echo "  ERROR: GCC major version mismatched !"
      echo
      echo "         old: $VERSION_OLD but new: $MAJOR_VERSION"
    fi
  fi
fi

if [ "$MAJOR_FOUND" = "0" ]; then
  # GCC_FAMILY_MAJOR not found: ERROR
  echo
  echo "  ERROR: GCC_FAMILY_MAJOR not found in $FILE !"
  echo "         (corrupted file?)"
  exit 1
fi

if [ "$MAJOR_OK" = "0" ]; then
  # GCC_FAMILY_MAJOR is not the same: ERROR
  echo
  echo "         you should type 'make clean' before,"
  exit 1
fi

#========================== process minor version ==========================

MINOR_FOUND=0
MINOR_OK=0

if [ -n "$ARG1_OLD" ]; then
  set $ARG1_OLD
  ARG_NAME_OLD=$1
  VERSION_OLD=$2
  if [ "GCC_FAMILY_MINOR" = "$ARG_NAME_OLD" ]; then
    MINOR_FOUND=1
    if [ "$MINOR_VERSION" = "$VERSION_OLD" ]; then
      MINOR_OK=1
    else
      echo
      echo "  ERROR: GCC minor version mismatched !"
      echo
      echo "         old: $VERSION_OLD but new: $MINOR_VERSION"
    fi
  fi
fi

if [ -n "$ARG2_OLD" ]; then
  set $ARG2_OLD
  ARG_NAME_OLD=$1
  VERSION_OLD=$2
  if [ "GCC_FAMILY_MINOR" = "$ARG_NAME_OLD" ]; then
    MINOR_FOUND=1
    if [ "$MINOR_VERSION" = "$VERSION_OLD" ]; then
      MINOR_OK=1
    else
      echo
      echo "  ERROR: GCC minor version mismatched !"
      echo
      echo "         old: $VERSION_OLD but new: $MINOR_VERSION"
    fi
  fi
fi

if [ -n "$ARG3_OLD" ]; then
  set $ARG3_OLD
  ARG_NAME_OLD=$1
  VERSION_OLD=$2
  if [ "GCC_FAMILY_MINOR" = "$ARG_NAME_OLD" ]; then
    MINOR_FOUND=1
    if [ "$MINOR_VERSION" = "$VERSION_OLD" ]; then
      MINOR_OK=1
    else
      echo
      echo "  ERROR: GCC minor version mismatched !"
      echo
      echo "         old: $VERSION_OLD but new: $MINOR_VERSION"
    fi
  fi
fi

if [ -n "$ARG4_OLD" ]; then
  set $ARG4_OLD
  ARG_NAME_OLD=$1
  VERSION_OLD=$2
  if [ "GCC_FAMILY_MINOR" = "$ARG_NAME_OLD" ]; then
    MINOR_FOUND=1
    if [ "$MINOR_VERSION" = "$VERSION_OLD" ]; then
      MINOR_OK=1
    else
      echo
      echo "  ERROR: GCC minor version mismatched !"
      echo
      echo "         old: $VERSION_OLD but new: $MINOR_VERSION"
    fi
  fi
fi

if [ -n "$ARG5_OLD" ]; then
  set $ARG5_OLD
  ARG_NAME_OLD=$1
  VERSION_OLD=$2
  if [ "GCC_FAMILY_MINOR" = "$ARG_NAME_OLD" ]; then
    MINOR_FOUND=1
    if [ "$MINOR_VERSION" = "$VERSION_OLD" ]; then
      MINOR_OK=1
    else
      echo
      echo "  ERROR: GCC minor version mismatched !"
      echo
      echo "         old: $VERSION_OLD but new: $MINOR_VERSION"
    fi
  fi
fi

if [ -n "$ARG6_OLD" ]; then
  set $ARG6_OLD
  ARG_NAME_OLD=$1
  VERSION_OLD=$2
  if [ "GCC_FAMILY_MINOR" = "$ARG_NAME_OLD" ]; then
    MINOR_FOUND=1
    if [ "$MINOR_VERSION" = "$VERSION_OLD" ]; then
      MINOR_OK=1
    else
      echo
      echo "  ERROR: GCC minor version mismatched !"
      echo
      echo "         old: $VERSION_OLD but new: $MINOR_VERSION"
    fi
  fi
fi

if [ -n "$ARG7_OLD" ]; then
  set $ARG7_OLD
  ARG_NAME_OLD=$1
  VERSION_OLD=$2
  if [ "GCC_FAMILY_MINOR" = "$ARG_NAME_OLD" ]; then
    MINOR_FOUND=1
    if [ "$MINOR_VERSION" = "$VERSION_OLD" ]; then
      MINOR_OK=1
    else
      echo
      echo "  ERROR: GCC minor version mismatched !"
      echo
      echo "         old: $VERSION_OLD but new: $MINOR_VERSION"
    fi
  fi
fi

if [ "$MINOR_FOUND" = "0" ]; then
  # GCC_FAMILY_MINOR not found: ERROR
  echo
  echo "  ERROR: GCC_FAMILY_MINOR not found in $FILE !"
  echo "         (corrupted file?)"
  exit 1
fi

if [ "$MINOR_OK" = "0" ]; then
  # GCC_FAMILY_MINOR is not the same: ERROR
  echo
  echo "         you should type 'make clean' before,"
  exit 1
fi

