#!/bin/sh

# Copyright (C) 2004, Thomas Esser. Public domain.

# First, work around bugs/limitations in some shells on some systems:
test -f /bin/sh5 && test -z "$RUNNING_SH5" \
  && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
  && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
unset RUNNING_SH5

test -f /bin/bsh && test -z "$RUNNING_BSH" \
  && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
  && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
unset RUNNING_BSH

# hack around a bug in zsh:
test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'

###############################################################################
# cleanup()
#   clean up the temp area and exit with proper exit status
###############################################################################
cleanup()
{
  rc=$?
  $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \
    && { rm -f "$tmpdir"/*; cd /; rmdir "$tmpdir"; }

  # set exit code in a portable way; see the autoconf manual for details:
  (exit $rc); exit $rc
}

###############################################################################
# setupTmpDir()
#   set up a temp directory and a trap to remove it
###############################################################################
setupTmpDir()
{
  $needsCleanup && return

  trap 'cleanup' 1 2 3 7 13 15
  needsCleanup=true
  (umask 077; mkdir "$tmpdir") \
    || abort "could not create directory \`$tmpdir'"
}
###############################################################################
# myexec(args)
#   execute the command given as "args"; abort on error; redirect messages to
#   log in "silent" mode; redirect stdin (</dev/null) in silent mode
###############################################################################
myexec()
{
  if $silent; then
    echo "$0: running $@"
    "$@" >$log 2>&1 </dev/null
    rc=$?
  else
    "$@"
    rc=$?
  fi
  if test $rc != 0; then
    echo "$0: command $@ returned with code $rc"
    cat <$log
    (exit $rc) # set return value
    cleanup
  fi
}

# some initializations
progname=pdflatexps
silent=true # default setting; change if you like
needsCleanup=false
tmpdir=${TMP-/tmp}/.$progname$$
log=$tmpdir/log
version="1.0"

# look for optional things first
while
  case $1 in
   --help|-h) echo "$0 [-v|-q] file"
              echo "Process LaTeX document containing PSforPDF macros."
		                  exit 0;;
   --version) echo "$progname version $version"; exit 0;;
   -q) silent=true;;
   -v) silent=false;;
    -*) echo "$progname: unknown option $1 ignored";;
    *) break;;
  esac
do
  shift
done
# remaining option: filename
file=$1

# jobname von TeX: Verzeichnisse entfernen, evtl. vorhandene Extension
# entfernen.
job=`echo "x$1" | sed 's@x@@; s@.*/@@; s@\.[^.]*$@@'`

setupTmpDir
myexec latex "$file"
myexec dvips -Ppdf -o "$job-pics.ps" "$job.dvi"
myexec ps2pdf -dAutoRotatePages=/None "$job-pics.ps" "$job-pics.pdf"
myexec pdflatex "$file"

true
cleanup
