#! /bin/sh

DESTDIR=ocaml

SNAPSHOT=ocaml-309-cvs.tgz

HOMEDIR=http://www.pps.jussieu.fr/~henry/marshal

BRANCHURL=${HOMEDIR}/src/BRANCH
DATEURL=${HOMEDIR}/src/DATE
PATCH1URL=${HOMEDIR}/src/boot.patch
PATCH2URL=${HOMEDIR}/src/ty.patch
BOOTURL=${HOMEDIR}/src/boot

## Check curl or wget presence ...

CURL=`which curl`
WGET=`which wget`

if [ ${CURL} ]; then
  FETCH='curl -s -o '
  GET='curl -s '
elif [ ${WGET} ]; then
  FETCH='wget -q -O '
  GET='wget -q -O - '
else
  FETCH=
  GET=
fi

## Parse arguments

if [ $# -ge 1 ]; then
  DESTDIR=$1
  shift
fi
## Check DESTDIR

if [ -e ${DESTDIR} ]; then
  echo "The destination directory already exist."
  exit 1
fi

## 

if [ -f ${SNAPSHOT} ] 
then
    echo
    echo "### Uncompressing ocaml's CVS snapshot."
    echo
    mkdir ${DESTDIR}
    tar -xz -C ${DESTDIR} --strip-components 1 -f ${SNAPSHOT} || exit 1
else 

  if [ -f DATE ]
  then
    DATE=`cat DATE`
  elif [ -n "${GET}" -a -n "${DATEURL}" ]
  then
    echo "### Fetching DATE"
    DATE=`${GET} ${DATEURL}`
  fi

  if [ -f BRANCH ]
  then
    BRANCH=`cat BRANCH`
  elif [ -n "${GET}" -a -n "${BRANCHURL}" ]
  then
    echo "### Fetching BRANCH"
    BRANCH=`${GET} ${BRANCHURL}`
  fi

  if [ -n "${DATE}" -a -n "${BRANCH}" ] 
  then
    echo
    echo "### Fetching ocaml sources form CVS (DATE: ${DATE})."
    echo "### ===> Use the empty password."
    echo
    cvs -d ":pserver:anoncvs@camlcvs.inria.fr:/caml" login || exit 1
    cvs -z3 -d ":pserver:anoncvs@camlcvs.inria.fr:/caml" co \
	    -d ${DESTDIR} -r "${BRANCH}" -D "${DATE}" ocaml || exit 1
  else

    echo "###  Error ... 2 "
    exit 2

  fi

fi
if [ -f boot.patch ]
then
  PATCH=`pwd`/boot.patch
  ( cd ${DESTDIR} && patch -p1 < ${PATCH}) || exit 1
elif [ -n "${GET}" -a -n "${PATCH1URL}" ]
then
  cd ${DESTDIR}
  ${GET} ${PATCH1URL} | patch -p1 || exit 1
  cd -
else 
    echo "###  Error ... 3 "
    exit 3
fi

if [ -f ty.patch ]
then
  PATCH=`pwd`/ty.patch
  ( cd ${DESTDIR} && patch -p1 < ${PATCH}) || exit 1
elif [ -n "${GET}" -a -n "${PATCH2URL}" ]
then
  cd ${DESTDIR}
  ${GET} ${PATCH2URL} | patch -p1 || exit 1
  cd -
else 
    echo "###  Error ... 4 "
    exit 4
fi


if [ -f boot/ocamlc -a -f boot/ocamllex ]
then
  cp boot/ocamlc boot/ocamllex ${DESTDIR}/boot/ || exit 1
elif [ -n "${FETCH}" -a -n "${BOOTURL}" ]
then
  ${FETCH} ${DESTDIR}/boot/ocamlc ${BOOTURL}/ocamlc
  ${FETCH} ${DESTDIR}/boot/ocamllex ${BOOTURL}/ocamllex
else 
    echo "###  Error ... 4 "
    exit 4
fi

