#!/bin/sh

# The old version of "rebuild".  I am mostly keeping this here so for
# archival purposes.
#
#\rm -Rf coopr_release
#./coopr_install --preinstall --rebuild coopr_release 2>&1 > coopr.out
#python ./rebuild.py
#exit

set -o pipefail

PACKAGE=pyomo
INI=config

BASE_OS=`uname | cut -d'-' -f1`
if test "$BASE_OS" == "Darwin"; then
    SED_RE=-E
    XARGS_REPL='-x -L 1 -J'
    LS_COLOR=
else
    #SED_RE=-r
    #LS_COLOR=--color=none
    #XARGS_REPL='-x -L 1 -J'
    XARGS_REPL=-I
    SED_RE=-E
    LS_COLOR=
fi

USAGE="Usage: $0 --trunk|--release|--pypi [--zip-only]"

if test -z "$1"; then
    echo "Missing mode argument."
    echo "$USAGE"
    exit 1
fi
if test "$2" == "--zip-only"; then
    ZIP_ONLY=1
elif test -n "$2"; then
    echo "UNKNOWN OPTION: $2"
    echo "$USAGE"
    exit 1
fi
if test -n "$3"; then
    echo "UNKNOWN OPTION: $3"
    echo "$USAGE"
    exit 1
fi

if test "$1" == "--trunk"; then
    MODE="'--trunk'"
elif test "$1" == "--release"; then
    MODE=
elif test "$1" == "--pypi"; then
    MODE=
    PYPY=1
else
    echo "Unknown argument $1"
    echo "$USAGE"
    exit 1
fi

if test -n "$PYPI"; then
    rm -f ../${PACKAGE}.zip
    touch ${PACKAGE}.zip
fi

#if test ! -d hudson; then
#    svn co --trust-server-cert https://software.sandia.gov/svn/fast/hudson/python hudson || exit 1
#fi
if test ! -d vpy; then
    git clone https://github.com/PyUtilib/pyutilib.virtualenv.git vpy || exit 1
fi

# Leverage the Hudson/Jenkins build harness to drive vpy_install to get
# a current checkout
SCRIPT="
import sys
import os
import os.path

admin_path = os.path.join(os.environ['WORKSPACE'], 'pyomo/admin')

sys.argv = ['dummy', '--preinstall', $MODE]
sys.path.append(os.getcwd())
sys.path.append(admin_path)
os.environ['WORKSPACE'] = os.getcwd()
print(sys.path)
print(os.environ)
import driver
driver.perform_build(
    '${PACKAGE}', cat=None, config=os.path.join(admin_path, '${INI}.ini'), dest='preinstall' )
"
python -c "$SCRIPT" | tee ${PACKAGE}.log || exit 1

if test -n "$PYPI"; then
    if test -z "$ZIP_ONLY"; then
        python `dirname $0`/rebuild.py ${PACKAGE}
    fi
    exit 0
fi


cd preinstall || exit 1

# Remove the ZIP created by vpy_install
rm -f python.zip

# Promote *.txt from the ${PACKAGE} package
mkdir tmp
mv *.txt tmp
cp -p src/${PACKAGE}/*.txt .
mv tmp/*.txt .
rmdir tmp

VER=VERSION.txt
LOG=../${PACKAGE}.log
if test -z "$MODE"; then
    # release
    PKG_SVN=`grep -i -A1 "package ${PACKAGE}\$" $LOG | tail -1 | cut -d: -f2- \
        | xargs basename | tr -d ' '`
    printf "${PACKAGE} installer for release: %s\n" $PKG_SVN > $VER
    echo "This installer includes the following component versions:" >> $VER

    for PKG in `\ls src | sort`; do
        VCS=`grep -A1 "package ${PKG}\$" $LOG | tail -1 | sed 's/ //g' | cut -c1`
        if test "$VCS" == 'S'; then 
            SVN=`grep -A1 "package ${PKG}\$" $LOG | tail -1 | cut -d: -f2- \
                | xargs basename`
        elif test "$VCS" == 'G'; then 
            SVN=`grep "Git switching ${PKG}" $LOG | cut -d: -f2-`
        else
            SVN='(unknown)'
        fi
        printf '%12s  %s\n' $SVN $PKG >> $VER
    done
    echo RELEASE
else
    # trunk
    pushd ../../pyomo
    pwd
    REV=`git log -1 --format="%h"`
    popd

    printf "${PACKAGE} installer for: VOTD.%s\n" $REV > $VER
    # Update the VOTD micro version number
    VER_FILE=src/${PACKAGE}/${PACKAGE}/version/__init__.py
    cat $VER_FILE | sed $SED_RE "s/_micro=[0-9]*/_micro=$REV/" > tmp
    mv tmp $VER_FILE

    echo "This installer includes the following package revisions:" >> $VER

    for PKG in `\ls src | sort`; do
        VCS=`grep -A1 "package ${PKG}\$" $LOG | tail -1 | sed 's/ //g' | cut -c1`
        if test "$VCS" == 'S'; then 
            SVN=`grep -A1 "package ${PKG}\$" $LOG | tail -1 | cut -d: -f2- \
                | xargs svn info | grep 'Last Changed Rev' | cut -d: -f2`
        elif test "$VCS" == 'G'; then 
            pushd src/${PKG}
            SVN=`git log -1 --format="%h"`
            popd
        else
            SVN='(unknown)'
        fi
        printf '%12s  %s\n' $SVN $PKG >> $VER
    done
fi

# Remove any .git / .svn directories
find . -name .git | xargs rm -rf
find . -name .svn | xargs rm -rf


if test -z "$MODE"; then
    ZIPFILE=${PACKAGE}_${REV}.zip 
else
    ZIPFILE=${PACKAGE}_votd_${REV}.zip 
fi

# build the ZIP needed for ${PACKAGE}_install
pwd
echo $ZIPFILE
rm -f ../${PACKAGE}.zip ../${ZIPFILE}
\ls $LS_COLOR | grep -v '^bin' | grep -v '^include' | grep -v '^lib' \
    | xargs -I % zip -r ../${ZIPFILE} % -x \*.pyc 
#\ls --color=none | grep -v '^bin' | grep -v '^include' | grep -v '^lib' \
#    | xargs -i zip -r ../${PACKAGE}.zip {} -x \*.pyc 
#\ls | grep -v '^bin' | grep -v '^include' | grep -v '^lib' \
#    | xargs -J % zip -r ../${PACKAGE}.zip % -x \*.pyc
cd ..

ln -s ${ZIPFILE} ${PACKAGE}.zip 

if test -z "$ZIP_ONLY"; then
    python `dirname $0`/rebuild.py ${PACKAGE}
fi
