#!/bin/sh

# -----------------------------
# is_new_version_avail.sh
# version 1.6.2.5
# -----------------------------

# check for parameters
_usage_str="Usage: ${0} [ --short ] package-name"
if [ $# -eq 0 ] || [ "${1}" = "--help" ] || [ "${1}" = "--usage" ]; then
  printf "%s\n" "${_usage_str}"
  exit 0
fi

PKGNAME=""
SHORT_MODE_OPT=""
for arg in $@
do
  is_option=`echo ${arg} | grep '\-\-'`
  if [ -z "${is_option}" ]; then
    [ -z "${PKGNAME}" ] && PKGNAME="${arg}"
  else
    [ $arg = "--short" ] && SHORT_MODE_OPT="yes" && continue
    echo "${0}: unknown option '${arg}'"
  fi
done

if [ -z "${PKGNAME}" ]; then
  printf "%s\n" "${_usage_str}"
  exit 0
fi

# check the presence of required directories

cd `dirname "${0}"`

[ -z "${BUILD_FARM}" ] && BUILD_FARM="${HOME}/build-farm"
if [ ! -d "${BUILD_FARM}" ]; then
  echo "ERROR: base directory '${BUILD_FARM}' doesn't exist. Abort."
  exit 1
fi

[ -z "${VCHECKCMDS_DIR}" ] && VCHECKCMDS_DIR="VCHECKCMDS"
if [ ! -d ./"${VCHECKCMDS_DIR}" ]; then
  echo "ERROR: build farm is broken; version check commands directory doesn't exist. Abort."
  exit 1
fi

# A: Get the version of the current (already built) package

[ -z "${SHORT_MODE_OPT}" ] && printf "  current version of package '%s': " "${PKGNAME}"
version_of_pkg="(unknown)"

[ -z "${PACKAGES_DIR}" ] && PACKAGES_DIR="PACKAGES"

if [ -z ${ARCH_NAME} ]; then
  binpkg_dir=`find "${BUILD_FARM}/${PACKAGES_DIR}" -name "binpkg-*" | head -1`
  ARCH_NAME=`basename "${binpkg_dir}" | sed 's/binpkg-//'`
fi

if [ -z "${BINPACKAGES_DIR}" ]; then
  BINPACKAGES_DIR="${PACKAGES_DIR}"/binpkg-"${ARCH_NAME}"
  [ -d "${BUILD_FARM}/${BINPACKAGES_DIR}" ] || BINPACKAGES_DIR="${PACKAGES_DIR}"/binpkg
fi
if [ -d "${BUILD_FARM}/${BINPACKAGES_DIR}" ]; then
  package_for_pkgname=`ls -tp "${BUILD_FARM}/${BINPACKAGES_DIR}"/"${PKGNAME}"-* 2>/dev/null | head -1`
  if [ ! -z "${package_for_pkgname}" ]; then
    version_of_pkg=`basename "${package_for_pkgname}" | cut -d'-' -f2- | \
                    sed -e 's/.tar//' -e 's/.gz//' -e 's/.bz2//' \
                        -e "s/-${ARCH_NAME}//" -e 's/-${LIBC_NAME}//' \
                        -e 's/.binpkg//' -e 's/.kernelpkg//' -e 's/v//' | \
                    sed 's/-uclibc//'`

  fi
fi

echo v"${version_of_pkg}"

# B: Get the version of the available package

# check for required binaries; version check commands may be sure that they are available for them
REQD_BINS=""
which sed >/dev/null 2>&1 || type sed >/dev/null 2>&1 || REQD_BINS="sed,${REQD_BINS}"
which wget >/dev/null 2>&1 || type wget >/dev/null 2>&1 || REQD_BINS="wget,${REQD_BINS}"
which lynx >/dev/null 2>&1 || type lynx >/dev/null 2>&1 || REQD_BINS="lynx,${REQD_BINS}"
if [ -n "${REQD_BINS}" ]; then
  echo -e `basename ${0}`: "Required binaries (${REQD_BINS}\010) are not present."
  exit 1
fi

SCRIPT_DIR=`pwd`
VCHECK_TEMPDIR="${VCHECKCMDS_DIR}"/.tmp
mkdir -p "${SCRIPT_DIR}/${VCHECK_TEMPDIR}"
cd "${SCRIPT_DIR}/${VCHECK_TEMPDIR}"

if [ -f "${SCRIPT_DIR}/${VCHECKCMDS_DIR}"/vcheck-"${PKGNAME}" ]; then
  # version check commands do something and set NEW_VERSION variable
  # Note: 'source /dev/null' fails (it is not a POSIX shell feature), but '. /dev/null' works
  . "${SCRIPT_DIR}/${VCHECKCMDS_DIR}"/vcheck-"${PKGNAME}"
  if [ ! -z "${NEW_VERSION}" ]; then
    [ -z "${SHORT_MODE_OPT}" ] && printf "available version of package '%s': " "${PKGNAME}"
    printf "v%s\n" "${NEW_VERSION}"
  else
    [ -z "${SHORT_MODE_OPT}" ] && echo "Sorry, can't get available version for this package."
    [ -z "${SHORT_MODE_OPT}" ] || echo "(unknown)"
  fi
else
  [ -z "${SHORT_MODE_OPT}" ] && printf "Sorry, version check commands for '%s' cannot be found.\n" "${PKGNAME}"
  if [ -f "${BUILD_FARM}"/BUILD-SCRIPTS/SRCINFO/srcinfo-"${PKGNAME}" ]; then
    if [ -z "${SHORT_MODE_OPT}" ]; then
      printf "srcinfo for '%s' (%s):\n" "${PKGNAME}" `basename "${BUILD_FARM}"`/BUILD-SCRIPTS/SRCINFO/srcinfo-"${PKGNAME}"
      cat "${BUILD_FARM}"/BUILD-SCRIPTS/SRCINFO/srcinfo-"${PKGNAME}" | while read line; do
          printf "    %s\n" "${line}"
      done
    else
      _has_git_in_srcinfo=`cat "${BUILD_FARM}"/BUILD-SCRIPTS/SRCINFO/srcinfo-"${PKGNAME}" | grep "git" | grep -v '#'`
      [ -z "${_has_git_in_srcinfo}" ] || echo "(git)"
      [ -z "${_has_git_in_srcinfo}" ] && echo "(unknown)"
    fi
  else
    [ -z "${SHORT_MODE_OPT}" ] || echo "(unknown)"
  fi
fi

# clean up
cd "${SCRIPT_DIR}"
if [ ! -z "${VCHECK_TEMPDIR}" ]; then
  [ -d ./"${VCHECK_TEMPDIR}" ] && rm -rf ./"${VCHECK_TEMPDIR}"
fi
