#!/bin/sh

CLASSPATH_CVS=~/gjdoc/classpath
CLASSPATH_PREFIX=~/gjdoc/root/classpath
LOG=~/gjdoc.log
OUTPUT_HTML=~/gjdoc/html
OUTPUT_API=~/gjdoc/api

rm -f ${LOG} > /dev/null 2>&1
today=`date`
echo "${today}" > ${LOG}
rm -rf "${OUTPUT_HTML}" > /dev/null 2>&1
mkdir --parents "${OUTPUT_HTML}"
rm -rf "${OUTPUT_API}" > /dev/null 2>&1

_aclocal ()
{
  aclocal "$@" >> ${LOG} 2>&1
  if [ $? -ne 0 ]; then
    echo "Error running aclocal"
    exit 1
  fi
}

_autoheader ()
{
  autoheader "$@" >> ${LOG} 2>&1
  if [ $? -ne 0 ]; then
    echo "Error running autoheader"
    exit 1
  fi
}

_automake ()
{
  automake "$@" >> ${LOG} 2>&1
  if [ $? -ne 0 ]; then
    echo "Error running automake"
    exit 1
  fi
}

_autoconf ()
{
  autoconf "$@" >> ${LOG} 2>&1
  if [ $? -ne 0 ]; then
    echo "Error running autoconf"
    exit 1
  fi
}

classpath_checkout ()
{
  if [ ! -d "${CLASSPATH_CVS}" ]; then
    mkdir --parents ${CLASSPATH_CVS}
    local dir=`dirname "${CLASSPATH_CVS}"`
    cd "${dir}"
    cvs -z3 -d :pserver:anoncvs@subversions.gnu.org:/cvsroot/classpath co classpath >> ${LOG} 2>/dev/null
    if [ $? -ne 0 ]; then
      echo "Error checking out classpath"
      exit 1
    fi
  fi
}

classpath_update ()
{
  cd "${CLASSPATH_CVS}" && cvs update -d -P . >> ${LOG} 2>/dev/null
  if [ $? -ne 0 ]; then
    echo "Error checking out classpath"
    exit 1
  fi
}

classpath_clean ()
{
  if [ -d "${CLASSPATH_CVS}/build" ]; then
    rm -rf "${CLASSPATH_CVS}/build"
  fi
  if [ -d "${CLASSPATH_PREFIX}" ]; then
    rm -rf "${CLASSPATH_PREFIX}"
  fi
  mkdir --parents "${CLASSPATH_CVS}/build"
  mkdir --parents "${CLASSPATH_PREFIX}"
}

classpath_configure ()
{
  cd "${CLASSPATH_CVS}"

  _aclocal
  _autoheader
  _automake
  _autoconf

  cd "${CLASSPATH_CVS}/build" && ../configure --prefix=${CLASSPATH_PREFIX} --with-jikes >> ${LOG} 2>&1
  if [ $? -ne 0 ]; then
    echo "Error configuring"
    exit 1
  fi
}

classpath_build ()
{
  cd "${CLASSPATH_CVS}/build" && make >> ${LOG} 2>&1
  if [ $? -ne 0 ]; then
    echo "Error during make"
    exit 1
  fi
}

classpath_install ()
{
  cd "${CLASSPATH_CVS}/build" && make install >> ${LOG} 2>&1
  if [ $? -ne 0 ]; then
    echo "Error during make"
    exit 1
  fi
}

classpath_gjdoc ()
{
  cd "${CLASSPATH_CVS}"
  if [ $? -ne 0 ]; then
    echo "Error changing directory to ${CLASSPATH_CVS}"
    exit 1
  fi
  local core_packages=`find java javax -type d ! -regex .*CVS | tr '/' '.' | grep -v "^java$" | grep -v "^javax$" | grep -v "java.awt.dnd.peer" | grep -v "java.awt.peer" | xargs`
  if [ $? -ne 0 ]; then
    echo "Error during find1"
    exit 1
  fi
  cd "${CLASSPATH_CVS}/external/jaxp/source"
  if [ $? -ne 0 ]; then
    echo "Error changing directory to ${CLASSPATH_CVS}/external/jaxp/source"
    exit 1
  fi
  local jaxp_packages=`find javax org -type d ! -regex .*CVS | tr '/' '.' | grep -v "^javax$" | grep -v "^org$" | grep -v "org.w3c.dom." | xargs`
  if [ $? -ne 0 ]; then
    echo "Error during find2"
    exit 1
  fi
  local packages="$core_packages $jaxp_packages"
  ~/bin/gjdoc -sourcepath \
    "${CLASSPATH_CVS}:${CLASSPATH_CVS}/vm/reference:${CLASSPATH_CVS}/external/jaxp/source" \
    -d "${OUTPUT_HTML}" ${packages} >> ${LOG} 2>&1
  if [ $? -ne 0 ]; then
    echo "Error during gjdoc"
    exit 1
  fi
}

classpath_postdoc ()
{
  dir=`dirname "${OUTPUT_HTML}"`
  cd "${dir}"
  mv html api
  tar -czf /tmp/api.tar.gz api
  if [ $? -ne 0 ]; then
    echo "Error during tar"
    exit 1
  fi
}

#--------------------------------------------------------------------
# Update Classpath CVS
#--------------------------------------------------------------------
classpath_checkout
classpath_update

#--------------------------------------------------------------------
# Build Classpath with Jikes
#--------------------------------------------------------------------
#classpath_clean
#classpath_configure
#classpath_build
#classpath_install

#--------------------------------------------------------------------
# Execute Mauve
#--------------------------------------------------------------------
classpath_gjdoc
classpath_postdoc
