#! /bin/bash
#
# This script is used to build slapos node from source.
#
export PATH=/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin:$PATH
if ! source /usr/share/csih/cygwin-service-installation-helper.sh ; then
    echo "Error: Missing csih package."
    exit 1
fi

# ======================================================================
# Functions
# ======================================================================
function show_usage()
{
    echo ""
    echo "Usage:"
    echo ""
    echo "    ./build-slapos.sh [slap_path]"
    echo ""
    echo "    You can specify the root path for slapos buildout, default is /opt"
    echo ""
    echo "    The following path will be created:"
    echo ""
    echo "      $slap_path/slapos               buildout.cfg will be here"
    echo "      $slap_path/download-cache       used as buildout download cache"
    echo ""
}
readonly -f show_usage

function slapos_apply_patch()
{
    local _filename=$1
    local _destpath=$2
    local _basename=$(basename ${_filename})

    [[ -f ${_filename} ]] ||
    cp /opt/git/slapos.package/windows/patches/${_basename} ${_filename} 2>/dev/null ||
    wget -c http://git.erp5.org/gitweb/slapos.package.git/blob_plain/heads/cygwin:/windows/patches/${_basename} -O ${_filename} ||
    csih_error "download ${_filename} failed"
    csih_inform "download ${_filename} OK"

    csih_inform "applay patch ${_filename}"
    (cd $(ls -d ${_destpath}) &&
        csih_inform "patch at $(pwd)" &&
        patch -f --dry-run -p1 < ${_filename} > /dev/null &&
        patch -p1 < ${_filename} &&
        csih_inform "apply patch ${_filename} OK")
}
readonly -f slapos_apply_patch

function slapos_buildout()
{
    local _home=$1/slapos
    local _cache=$1/download-cache
    local _buildcfg=${_home}/buildout.cfg
    local _bootstrap=${_home}/bootstrap.py
    local _buildurl=${2:-http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/heads/cygwin-share:/component/slapos/buildout.cfg}

    [[ -z "$1" ]] && csih_error "no slapos path specified"

    csih_inform "Starting run buildout of slapos node ..."

    csih_inform "mkdir ${_home}/log"
    mkdir -p ${_home}/log 

    csih_inform "mkdir ${_cache}"
    mkdir -p ${_cache}

    [[ ! -f ${_buildcfg} ]] &&
    echo "[buildout]
extends = ${_buildurl}
download-cache = ${_cache}
prefix = \${buildout:directory}
" > ${_buildcfg} &&
    csih_inform "${_buildcfg} generated"

    [[ -f ${_bootstrap} ]] ||
    python -S -c 'import urllib2;print urllib2.urlopen("http://git.erp5.org/gitweb/slapos.core.git/blob_plain/HEAD:/bootstrap.py").read()' > ${_bootstrap} ||
    csih_error "download bootstrap.py failed"
    csih_inform "download ${_bootstrap} OK"

    [[ -x ${_home}/bin/buildout ]] ||
    (cd ${_home} && python -S bootstrap.py) ||
    csih_error "run bootstrap.py failed"
    csih_inform  "run bootstrap.py OK"

    csih_inform "start bin/buildout"
    (cd ${_home} ; bin/buildout -v -N) || csih_error "bin/buildout failed"

    slapos_apply_patch ~/slapos-core-format.patch "${_home}/eggs/slapos.core-*.egg/"
    slapos_apply_patch ~/supervisor-cygwin.patch "${_home}/eggs/supervisor-*.egg/"

    csih_inform "Run buildout of slapos node OK"
    echo ""
}
readonly -f slapos_buildout

# -----------------------------------------------------------
# Start script
# -----------------------------------------------------------
csih_inform "Start slapos node configure ..."
echo ""

# -----------------------------------------------------------
# Local variable
# -----------------------------------------------------------
declare -r slapos_path=${1:-/opt}

# -----------------------------------------------------------
# Command line options
# -----------------------------------------------------------
while test $# -gt 0; do
    # Normalize the prefix.
    case "$1" in
    -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
    *) optarg= ;;
    esac

    case "$1" in
    -h | --help)
    show_usage
    exit 0
    ;;
    *)
    ;;
    esac

    # Next please.
    shift
done

# -----------------------------------------------------------
# Build SlapOS
# -----------------------------------------------------------
slapos_buildout ${slapos_path}

# -----------------------------------------------------------
# End script
# -----------------------------------------------------------
echo ""
csih_inform "Build slapos successfully."
echo ""

read -n 1 -t 60 -p "Press any key to exit..."
exit 0