#!/bin/bash

PS3="Your choice ==> "

yorn () {
  echo -n "$1 (y/n) [n] "
  read ANSWER
  if test "$ANSWER" = 'y'; then true; else false; fi
}
nory () {
  echo -n "$1 (y/n) [y] "
  read ANSWER
  if test "$ANSWER" = 'n'; then false; else true; fi
}

message () { echo -n "$@" '... '; }
info () { echo "$1"; }
warning () { echo; echo '*** Warning:'; echo "$@"; }
ERRORS=false
error () { echo; ERRORS=true; echo '*** Error:'; echo "$@"; false; }
fatal () { 
  echo; echo -n "$@"; 
  echo '
************ They were serious Errors ************

Makefile.config is likely to be incorrect. 
Maybe you just need to reconfigure. Edit Makefile.config or type:

      make config

If you wish to continue, despite errors, type:
   
      make force

Good luck.
'
  exit 1
}

nonempty () {
  if [ -z "$2" ]; then error "  $1 cannot be left empty"; fi
}

## Bash configuration

nonempty BASH "$BASH"

sed -e 's/ *= */=/' -e 's/(\([A-Z][A-Z]*\))/{\1}/' Makefile.config \
   > config.bash
source config.bash
rm config.bash

# Emacs 

nonempty 'Either EMACSDIR or XMEACSDIR' "$EMACSDIR$XEMACSDIR"

# Other directories
message "Checking other directories"

nonempty BINDIR "$BINDIR" && \
nonempty LATEXDIR "$LATEXDIR" && \
nonempty DOCDIR "$DOCDIR" && \
echo OK 

# Initex and Latex 
message "Checking initex and latex"

# BEGIN TEX
if
   nonempty INITEX "$INITEX" && \
   nonempty LATEX "$LATEX" && \
   nonempty LATEXFMT "$LATEXFMT" && \
   echo OK  
then

cat << END > dummy.tex
\documentclass{article}
\def \dummy {Testing you installation}
\def \documentclass #1\dump {\relax}
\let \dump \relax
\dump
\begin{document}
\huge {\bf \dummy}\par Don't worry, feel lucky!
\end{document}
END

# initex
message "Checking initex"

if $INITEX '&'$LATEXFMT '\input{dummy}' > initex.log
then echo OK
else 
  error "
  Command failed:

      $INITEX '&$LATEXFMT' '\dump && [ -f $LATEXFMT.fmt ] > initex.log

  $INITEX seems to have problems building format $LATEXFMT for $LATEX
  It could be a problem with $INITEX, or $LATEXFMT.fmt may not exist.
  See initex.log
"
fi 

# latex
message "Checking latex"


if [ -n "$LATEX" ]; then
  if $LATEX '&dummy' dummy.tex > latex.log
  then echo OK
  else
    error "
    Command failed:

      $LATEX '&$LATEXFMT' dummy.tex "'&&'" [ -f dummy.dvi ] > latex.log

    $LATEX installation seem to have problems. 
    See dummy.tex and latex.log
  "
  fi
fi

fi
# END TEX

# viewers
message "Checking viewers"

checkdvi () {
  DVI=$1
  EXEC=$2
  echo "Launching $DVI=$EXEC dummy.dvi&"
  $EXEC dummy.dvi &
  sleep 3
  PID=$!
  echo -n "Sending USR1 to $DVI ... "
  if kill -USR1 $PID && sleep 1 && kill -CONT $PID 
  then echo OK
  else
    warning "
  $EXEC does not respond to signal USR1

  Continuing...
"    
   unset $DVI
   fi
   kill -KILL $PID 
}

if [ -f dummy.dvi ]
then
  checkdvi ADVI "$ADVI" 
  checkdvi XDVI "$XDVI" 
  if [ -n "$DVIPS" -a -n "GV" ]; then
    if $DVIPS -o dummy.ps dummy.dvi 2>/dev/null 1>/dev/null
    then 
      $GV dummy.ps &
      PID=$!
      sleep 1
      echo -n "Sending HUP to $GV ... "
      if kill -HUP $PID && sleep 1 && kill -CONT $PID
      then echo OK
      else
        warning "
        $ADVI does not respond to signal HUP

      Continuing...
"
        unset GV
      fi
      kill -KILL $PID 
    else 
      warning "
      $DVIPS does not seem to work as expected

    Continuing...
"
      unset DVIPS
      unset GV
    fi
  fi
fi
rm -f dummy.{fmt,tex,aux,log,dvi,ps}

nonempty 'One of ADVI, XDVI or GV' "$ADVI$XDVI$GV" && \
if [ -n "$GV" ]; then
  nonempty 'When GV is nonempty DVIPS' "$DVIPS"
fi

if [ -z "$ADVI" ]; then
  warning '
    Active-DVI does not seem to be installed. (You may wish to install it.)
'
fi

if $ERRORS
then
  fatal
else
  echo 'No anomaly detected in Makefile.config.'
fi
