#! /bin/sh

if [ -z "$PACKAGES_FILE" ]; then
  PACKAGES_FILE="$CONFDIR/packages"
fi

packages_loaded=

printpackage()
{
  echo "Found configuration for package \"$PACKAGE\""
  if [ "$PACKAGE" != "$PACKAGE_REPO" ]; then
    echo "  Package repository: $PACKAGE_REPO"
  fi
  echo "  Package configure flags: $PACKAGE_CONFIGURE_FLAGS"
}

resetPackages()
{
  packages_loaded=
  if ! [ -f "$PACKAGES_FILE" ]; then
    logprint "Package file does not exist"
    return 1
  fi
}

packageHasFlag()
{
  local SEARCHFLAG="$1"

  local FLAGS="${PACKAGE_FLAGS},"
  while [ -n "$FLAGS" ]; do
    local FLAG="${FLAGS%%,*}"
    FLAGS="${FLAGS#*,}"
    if echo $FLAG | grep "=" > /dev/null 2>&1; then
      export FLAGARG=${FLAG#*=}
    else
      export FLAGARG=""
    fi
    FLAG=${FLAG%%=*}
    if [ "$SEARCHFLAG" = "$FLAG" ]; then
      return 0
    fi
  done

  return 1
}

getPackage()
{
  if [ "$packages_loaded" = "" ]; then
    if ! exec 4<$PACKAGES_FILE; then
      return 1
    fi
    packages_loaded=1
    echo "$PACKAGES_FILE loaded"
  fi

  export PACKAGE=
  export PACKAGE_FLAGS=
  export PACKAGE_CONFIGURE_FLAGS=
  export PACKAGE_REPO=
  export PACKAGE_TYPE=

  while <&4 read -r REPLY; do
    REPLY=${REPLY##\#*}
    if [ -z "$REPLY" ]; then
      if ! [ -z "$PACKAGE" ]; then
        printpackage
        return 0
      fi
      continue;
    fi
    if [ -z "$PACKAGE" ]; then
      if [ "${REPLY#-}" != "$REPLY" ]; then
        export PACKAGE_TYPE="-"
        REPLY=${REPLY#-}
      fi
      export PACKAGE="${REPLY%/*}"
      export PACKAGE_REPO="${REPLY#*/}"

      <&4 read -r REPLY
      export PACKAGE_FLAGS="$REPLY"
    elif [ -z "$PACKAGE_CONFIGURE_FLAGS" ]; then
      export PACKAGE_CONFIGURE_FLAGS="$REPLY"
    elif echo "$PACKAGE_CONFIGURE_FLAGS" | grep '\\$' 2>&1 > /dev/null; then
      export PACKAGE_CONFIGURE_FLAGS="${PACKAGE_CONFIGURE_FLAGS%*\\} $REPLY"
    else
      echo "Unexpected line: $REPLY"
      return 1
    fi
  done

  if ! [ -z "$PACKAGE" ]; then
    printpackage
    return 0
  fi

  return 1
}

