#!/bin/bash

export SCRIPT_DIR=$(dirname "$0")

##
## Configuration Variables
##

config ()
{
    # A whitespace-separated list of executables that must be present and locatable.
    : ${REQUIRED_TOOLS="xctool"}
    
    export REQUIRED_TOOLS
}

##
## Bootstrap Process
##

main ()
{
    config

    if [ -n "$REQUIRED_TOOLS" ]
    then
        echo "*** Checking dependencies..."
        check_deps
    fi

    local submodules=$(git submodule status 2>/dev/null)
    if [ -n "$submodules" ]
    then
        echo "*** Updating submodules..."
        update_submodules
    fi
}

check_deps ()
{
    for tool in $REQUIRED_TOOLS
    do
        which -s "$tool"
        if [ "$?" -ne "0" ]
        then
            echo "*** Error: $tool not found. Please install it and bootstrap again."
            exit 1
        fi
    done
}

bootstrap_submodule ()
{
    local bootstrap="script/bootstrap"

    if [ -e "$bootstrap" ]
    then
        echo "*** Bootstrapping $name..."
        "$bootstrap" >/dev/null
    else
        update_submodules
    fi
}

update_submodules ()
{
    git submodule sync --quiet && git submodule update --init && git submodule foreach --quiet bootstrap_submodule
}

export -f bootstrap_submodule
export -f update_submodules

main
