#!/bin/bash

#set -x

echo check whether all.ast is up-to-date
make -C elsa all.ast
if cvs status elsa/all.ast | grep -q Up-to-date ; then
    echo all.ast is up-to-date
else
    echo please update elsa/all.ast before continuing the snapshot
    exit 1
fi

last_merge_tag=$(cvs status -v ChangeLog | grep merged-svn | head -1 | tr '-' ' ')
svn_stack=$(echo $last_merge_tag | (read -a a; echo ${a[7]}))
svn_smbase=$(echo $last_merge_tag | (read -a a; echo ${a[9]}))
svn_ast=$(echo $last_merge_tag | (read -a a; echo ${a[11]}))
svn_elkhound=$(echo $last_merge_tag | (read -a a; echo ${a[13]}))
svn_elsa=$(echo $last_merge_tag | (read -a a; echo ${a[15]}))

svnbase=https://svn.cubewano.org/repos
elsarep=solo:/vol/cvsd/robin
repdir=elsa
create_tar_cache=1
snapshot_base="elsa-$svn_stack-$svn_smbase-$svn_ast-$svn_elkhound-$svn_elsa"
snapshot_name=$(date +"$snapshot_base-olmar-%Y-%m-%d")
snapshot_tar=$snapshot_name.tar.gz

dir=/tmp/tews/elsa
elsa_orig=$(dirname $dir)/orig-elsa
cvscache=elsa.tar.gz
svncache=orig-elsa.tar.gz

rm -rf $(dirname $dir)/elsa*olmar*
rm -rf $dir
rm -rf $elsa_orig
rm -rf $(dirname $dir)/build

elsa_cvs_dir=$(pwd)


echo ===========================================================================
echo ==========================     get orig elsa    ===========================
echo ===========================================================================

pushd $(dirname $elsa_orig)

if [ $create_tar_cache = 1 -a -f $svncache ] ; then
    tar -xzf $svncache
else
    svn export -r $svn_stack    --ignore-externals \
	$svnbase/elsa-stack/trunk $(basename $elsa_orig)
    svn export -r $svn_smbase   --ignore-externals \
	$svnbase/smbase/trunk $(basename $elsa_orig)/smbase
    svn export -r $svn_ast      --ignore-externals \
	$svnbase/ast/trunk $(basename $elsa_orig)/ast
    svn export -r $svn_elkhound --ignore-externals \
	$svnbase/elkhound/trunk $(basename $elsa_orig)/elkhound
    svn export -r $svn_elsa     --ignore-externals \
	$svnbase/elsa/trunk $(basename $elsa_orig)/elsa
    if [ $create_tar_cache = 1 ] ; then
	tar -czf $svncache $(basename $elsa_orig)
    fi
fi

popd

echo ===========================================================================
echo ============================     make doc    ==============================
echo ===========================================================================

make doc

echo ===========================================================================
echo ============================     export    ================================
echo ===========================================================================


pushd $(dirname $dir)


if [ $create_tar_cache = 1 -a -f $cvscache ] ; then
    tar -xzf $cvscache
else
    cvs -d $elsarep export -d $(basename $dir) -r HEAD $repdir
    if [ $create_tar_cache = 1 ] ; then
	tar -czf $cvscache $(basename $dir)
    fi
fi

cd $dir

for d in smbase ast elkhound elkhound/c elsa asttools ; do
    cp $d/Makefile.in $d/Makefile
done

make distclean

# cp gendoc dirs
for d in smbase ast elkhound elsa ; do
    cp -a $elsa_cvs_dir/$d/gendoc $d
done

set -x
set -e
make -C $elsa_cvs_dir/asttools/doc \
    TARGETDIR=$dir/asttools/doc SNAPSHOTNAME=$snapshot_name \
    copydoc-tar
set +e
set +x

echo ===========================================================================
echo ============================     ADDED FILES    ===========================
echo ===========================================================================

# added elsa/ChangeLog
# added elsa/ast/ast_util.ml
# added elsa/ast/ocamlhelp.cc
# added elsa/ast/ocamlhelp.h
# added elsa/ast/ocsstr.cc
# added elsa/ast/ocsstr.h
# added elsa/elsa/all.ast
# added elsa/elsa/ast_annotation.ml
# added elsa/elsa/ast_marshal.ml
# added elsa/elsa/caml_callbacks.ml
# added elsa/elsa/cc_ml_constructors.ml
# added elsa/elsa/cc_ml_types.ml
# added elsa/elsa/cc_ocaml.cc
# added elsa/elsa/cc_ocaml.h
# added elsa/elsa/doc/tracing-options.txt
# added elsa/elsa/elsa_util.ml
# added elsa/elsa/gnu_attribute_hack.ast
# added elsa/elsa/in/c/.cvsignore
# added elsa/elsa/in/c99/.cvsignore
# added elsa/elsa/in/gnu/bugs/.cvsignore
# added elsa/elsa/in/gnu/cil/.cvsignore
# added elsa/elsa/in/kandr/.cvsignore
# added elsa/elsa/in/msvc/.cvsignore
# added elsa/elsa/in/std/.cvsignore
# added elsa/elsa/ml_ctype.ast
# added elsa/elsa/ml_ctype_constructors.ml
# added elsa/elsa/ml_ctype.ml
# added elsa/elsa/mldeps.mk
# added elsa/asttools
# added elsa/snapshot
# added elsa/addcheck_ignored_files
#
# generated /tmp/tews/elsa-2005.08.22b/ast/agrampar.codes.h
# generated /tmp/tews/elsa-2005.08.22b/ast/agrampar.tab.cc
# generated /tmp/tews/elsa-2005.08.22b/ast/agrampar.tab.h
# generated /tmp/tews/elsa-2005.08.22b/elkhound/c/lexer1yy.cc
# generated /tmp/tews/elsa-2005.08.22b/elkhound/examples/arith/arithyy.cc
# generated /tmp/tews/elsa-2005.08.22b/elkhound/grampar.codes.h
# generated /tmp/tews/elsa-2005.08.22b/elkhound/grampar.tab.cc
# generated /tmp/tews/elsa-2005.08.22b/elkhound/grampar.tab.h
# compile errors	/tmp/tews/elsa-2005.08.22b/ast/exampletest.cc
# ?? /tmp/tews/elsa-2005.08.22b/elsa/gendoc/.xvpics
#       the file in there is also in elsa/doc


cd $(dirname $dir)
diff -rq $(basename $dir) $elsa_orig | \
    grep -v -e 'differ$' | \
    sed -e 's/Only in //' -e 's|: |/|' | \
    grep -v -f $elsa_cvs_dir/addcheck_ignored_files

mv $(basename $dir) $snapshot_name

tar -czf $snapshot_tar $snapshot_name 

echo ===========================================================================
echo ===========================     tar generated    ==========================
echo ===========================================================================


echo -n "test distribution [Y/n]:"
read answer

if [  ${answer:=y} = y -o $answer = Y ] ; then
    rm -rf build
    mkdir build
    cd build
    tar -xzf ../$snapshot_tar
    cd $snapshot_name
    $elsa_cvs_dir/reconfigure
    (cd asttools; CC="ccache gcc-4.1" CXX="ccache g++-4.1" \
	./configure -memcheck=/home/tews/src/memcheck -no-dash-O2)
    make

    echo
    echo =======================================================================
    echo -n "run tests [Y/n]:"
    read answer
    if [  ${answer:=y} = y -o $answer = Y ] ; then
	(cd elsa; ./regrtest -ocaml)

	echo
	echo ===================================================================
	echo -n "continue tests [Y/n]:"
	read answer
	if [  ${answer:=y} = y -o $answer = Y ] ; then
	    echo ===============================================================
	    echo ============== Files
	    (cd asttools; ./regtest-files)
	    echo ===============================================================
	    echo ============== Count
	    (cd asttools; ./regtest-count)
	    echo ===============================================================
	    echo ============== Check oast
	    (cd asttools; ./regtest-oast)
	    echo ===============================================================
	    echo ============== Graph
	    (cd asttools; ./regtest-graph -parse)
	fi
    fi
fi


cd $elsa_cvs_dir
echo -n "copy olmar docs [y/N]:"
read answer

if [  ${answer:=n} = y -o $answer = Y ] ; then
    make -C asttools/doc OLMARTAR=$snapshot_tar SNAPSHOTNAME=$snapshot_name \
	new-doc
fi

