#!/bin/sh

# MathJax is used by doxygen to display formulas in HTML
MATHJAX_INSTALLATION="@MATHJAX_INSTALLATION@"
MATHJAX_LAST_UPDATE="${MATHJAX_INSTALLATION}/.last_update"
MATHJAX_UPDATE_INTERVAL=7

# If the modification date of ${MATHJAX_LAST_UPDATE} is less than
# ${MATHJAX_UPDATE_INTERVAL} days, we will update MathJax.
MATHJAX_NEEDS_UPDATE=$( \
    if [[ -f ${MATHJAX_LAST_UPDATE} && \
          $(( $(date "+%s") \
        - $(perl -e 'printf "%u", (stat shift)[9]' ${MATHJAX_LAST_UPDATE}) )) \
        -lt $(( ${MATHJAX_UPDATE_INTERVAL} * 24 * 60 * 60 )) ]]; \
    then \
        echo 0; \
    else \
        echo 1; \
    fi)

# Update the mathjax installation, which is used by doxygen
# See http://www.mathjax.org/resources/docs/?installation.html
if [ ${MATHJAX_NEEDS_UPDATE} -ne 0 ]; then
    echo "MathJax needs update. Will sync with repository..."
    if [ -d "${MATHJAX_INSTALLATION}" ]; then
        echo "Updating mathjax git repository..."
        cd "${MATHJAX_INSTALLATION}"
        git pull origin
    else
        echo "Cloning mathjax git repositry..."
        git clone https://github.com/mathjax/MathJax.git \
            "${MATHJAX_INSTALLATION}"
        cd "${MATHJAX_INSTALLATION}"
    fi
    if [ -f fonts.zip ]; then
        if [ -d fonts ]; then
            echo "Removing old mathjax fonts directory..."
            rm -rf fonts
        fi
        echo "Unpacking mathjax fonts..."
        unzip fonts.zip
    fi
    echo "Updating timestamp of last sync with mathjax repository..."
    touch ".last_update"
    echo "Mathjax successfully updated."
else
    echo "Mathjax does not need to be updated."
fi
