#!/usr/bin/env bash

# Copyright 2016 The Fuchsia Authors
# Copyright (c) 2008 Travis Geiselbrecht
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT

function HELP {
    echo "help:"
    echo "-a arg              : Pass arg to make"
    echo "-f                  : Exit on first failure"
    echo "-m                  : Build magenta targets only"
    echo "-r                  : Also build release mode builds"
    echo "-h for help"
    exit 1
}

FAIL_FAST=0
DO_RELEASE=0
MAGENTA_ONLY=0
MAKE_ARGS=

while getopts a:fhmr FLAG; do
    case $FLAG in
        a) MAKE_ARGS="${MAKE_ARGS} ${OPTARG}";;
        f) FAIL_FAST=1;;
        h) HELP;;
        r) DO_RELEASE=1;;
        m) MAGENTA_ONLY=1;;
        \?)
            echo unrecognized option
            HELP
    esac
done
shift $((OPTIND-1))

if [ "$MAGENTA_ONLY" -eq 1 ]; then
    # build everything in the projects directory
    PROJECTS=`echo kernel/project/magenta*.mk | xargs -n1 basename | sed 's/\.mk//'`
else
    PROJECTS=`echo kernel/project/*.mk | xargs -n1 basename | sed 's/\.mk//'`
fi
FAILED=""

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
STATUS=0

for p in $PROJECTS; do
  nice $DIR/make-parallel $p ${MAKE_ARGS}
  STATUS=$?
  if [ "$STATUS" -ne 0 ]; then
    FAILED="$FAILED $p"
    if [ "$FAIL_FAST" -eq 1 ]; then
      break
    fi
  fi

  if [ "$DO_RELEASE" -eq 1 ]; then
    nice $DIR/make-release $p ${MAKE_ARGS}
    STATUS=$?
    if [ "$STATUS" -ne 0 ]; then
      FAILED="$FAILED $p-release"
      if [ "$FAIL_FAST" -eq 1 ]; then
        break
      fi
    fi
  fi
done

if [ "$FAILED" != "" ]; then
  echo
  echo some projects have failed to build:
  echo $FAILED
fi

exit $STATUS
