#!/bin/zsh

setopt -o glob
setopt -o extended_glob

if [ -z "$1" ]; then
  printf "Usage:\n  prepare_release <internal_release_public_dir>\n"
  exit 1
fi


RELEASE_CANDIDATES_DIR=/srv/CGAL/www/Members/release-candidates
MANUAL_TESTS_DIR=/srv/CGAL/www/Members/Manual_doxygen_test

PUBLIC_RELEASE_DIR="$1"

INTERNAL_RELEASE=`basename ${PUBLIC_RELEASE_DIR/-public/}`

PUBLIC_RELEASE_NAME=`basename ${~${ZIP_TARBALL::="$PUBLIC_RELEASE_DIR"/*.zip}}`
PUBLIC_RELEASE_NAME=${PUBLIC_RELEASE_NAME/.zip/}
DEST_DIR="${RELEASE_CANDIDATES_DIR}/$PUBLIC_RELEASE_NAME"

if [ -z "$PUBLIC_RELEASE_NAME" ]; then 
    echo The first argument must be a public release directory, like CGAL-3.7-I-167-public.
    exit 1
fi

printf  "Preparing %s in %s...\n" "$PUBLIC_RELEASE_NAME" "$DEST_DIR"
sleep 2

printf "Copy documentation to doc_html/ and doc_html_online/...\n"

[ -d "$DEST_DIR" ] || mkdir "$DEST_DIR"
[ -d "$DEST_DIR/doc_html" ] || mkdir "$DEST_DIR/doc_html"
[ -d "/srv/CGAL/www/${PUBLIC_RELEASE_NAME#CGAL-}/Manual" ] || mkdir -p "/srv/CGAL/www/${PUBLIC_RELEASE_NAME#CGAL-}/Manual"

cp "$PUBLIC_RELEASE_DIR"/*(.) "${RELEASE_CANDIDATES_DIR}/$PUBLIC_RELEASE_NAME"
rsync -a "$MANUAL_TESTS_DIR/$INTERNAL_RELEASE"/output/* "$DEST_DIR/doc_html/"
pushd "$DEST_DIR/doc_html/Manual/search"
  for i in g n c s i; do sed -i "s/..\/BGL$i/..\/BGL\/$i/g" *; done
popd
rsync -a "$DEST_DIR/doc_html/" "$DEST_DIR/doc_html_online/"

printf "Modify \"../../MathJax\" to MathJax CDN in doc_html...\n"
pushd "$DEST_DIR/doc_html"
find -name '*.html' -exec sed -i -e 's|../../MathJax|http://cdn.mathjax.org/mathjax/latest|g' {} +
popd

printf "Create doc_html tarball...\n"
tar cf "$DEST_DIR/${PUBLIC_RELEASE_NAME}-doc_html.tar" -C "$DEST_DIR" doc_html

printf "Create doc_html zip...\n"
pushd "$DEST_DIR"
zip -q -r "$DEST_DIR/${PUBLIC_RELEASE_NAME}-doc_html.zip" doc_html
popd

printf "bzip2 doc_html tarball...\n"
bzip2 --best < "$DEST_DIR/${PUBLIC_RELEASE_NAME}-doc_html.tar" > "$DEST_DIR/${PUBLIC_RELEASE_NAME}-doc_html.tar.bz2"

printf "bzip2 source tarball...\n"
zcat "$DEST_DIR/${PUBLIC_RELEASE_NAME}.tar.gz" | bzip2 --best > "$DEST_DIR/${PUBLIC_RELEASE_NAME}.tar.bz2"

printf "xz doc_html tarball...\n"
xz --best < "$DEST_DIR/${PUBLIC_RELEASE_NAME}-doc_html.tar" > "$DEST_DIR/${PUBLIC_RELEASE_NAME}-doc_html.tar.xz"

printf "gzip doc_html tarball...\n"
gzip -f --best "$DEST_DIR/${PUBLIC_RELEASE_NAME}-doc_html.tar"

printf "Create the internal_release file\n"
printf "%s\n" "${INTERNAL_RELEASE}" > "$DEST_DIR/internal_release"

printf "Create cgal_manual.zip for the Windows installer..."
pushd "$DEST_DIR/doc_html"
zip -q -r ../cgal_manual.zip *
popd

pushd "$DEST_DIR"
printf "Compute md5sum.txt..."
md5sum *.^txt > md5sum.txt
sha256sum *.^txt > sha256sum.txt
popd

printf "Now use:\n"
printf "  cd ${DEST_DIR}\n"
printf "  mv cgal_manual.zip /srv/CGAL/www/%s/Manual/\n" "${PUBLIC_RELEASE_NAME#CGAL-}"
printf "  rsync --compress -av doc_html_online/ %s:doc.cgal.org/Manual/%s\n" \
    cgalorgmnx@ftp.cgal.org \
    "${PUBLIC_RELEASE_NAME#CGAL-}"

printf "DONE!\n"

pushd "$DEST_DIR"
ls -l
popd
