#!/bin/bash

getDeps() {
  local pkg="$1"
  local deps="$(grep "^# Depends on:" $pkg/Pkgfile 2>/dev/null| cut -d':' -f2-)"
  echo "${deps# *}"
}

getRecursiveDeps() {
  local pkg="$1"
  local deps="$(getDeps $pkg)"
  if [ -z "$deps" ]; then
    case $pkg in
      # toolchain ports must be in order
      libgmp|libmpfr|libmpc|binutils|glibc|zlib|gcc)
        ;;
      *)
        if [ ! "$(echo $BUILD_ORDER | grep " ${pkg}")" ]; then
          BUILD_ORDER="$BUILD_ORDER $pkg"
        fi
	;;
    esac
  else
    for d in ${deps[@]}; do
      getRecursiveDeps "$d"
    done

    if [ ! "$(echo $BUILD_ORDER | grep " ${pkg}")" ]; then
      BUILD_ORDER="$BUILD_ORDER $pkg"
    fi
  fi
}

ALT_START=0

# check for passed arguments
if [ $# -ne 0 ]; then
  # use package as starting point
  ALT_START=1
  START_PKG=$1
  BUILD_ORDER=""
else
  # global var to store all final deps order
  BUILD_ORDER="libgmp libmpfr libmpc binutils glibc zlib gcc"
fi

for i in $(find . -type f -name 'Pkgfile' -exec dirname {} \; | sort); do
  PKG="$(basename $i)"
  case $PKG in
    # toolchain ports must be in order
    libgmp|libmpfr|libmpc|binutils|glibc|zlib|gcc) continue ;;
  esac
  getRecursiveDeps "$PKG"
done

if [ $ALT_START -eq 0 ]; then
  echo $BUILD_ORDER | tr ' ' '\n'
else
  echo $BUILD_ORDER | sed "s|.* $START_PKG|$START_PKG|" | tr ' ' '\n'
fi

# End fo file