#!/bin/sh
# Shell wrapper for R executable.

R_HOME_DIR=
if test -n "${R_HOME}" && \
   test "${R_HOME}" != "${R_HOME_DIR}"; then
  echo "WARNING: ignoring environment value of R_HOME"
fi
R_HOME="${R_HOME_DIR}"
export R_HOME

## NOTE:
## We must set this here rather than in the main binary.
: ${R_LD_LIBRARY_PATH=${R_HOME}/bin:@R_LD_LIBRARY_PATH@}
if test -z "${@shlibpath_var@}"; then
  @shlibpath_var@="${R_LD_LIBRARY_PATH}"
else
  @shlibpath_var@="${R_LD_LIBRARY_PATH}:${@shlibpath_var@}"
fi
export @shlibpath_var@

usage="
Usage: R [options] [< infile] [> outfile]
   or: R CMD command [arguments]

Start R, a system for statistical computation and graphics, with the
specified options, or invoke an R tool via the 'R CMD' interface.

Options:
  -h, --help            Print short help message and exit
  --version             Print version info and exit
  RHOME			Print path to R home directory and exit
  --save                Do save workspace at the end of the session
  --no-save             Don't save it
  --no-environ          Don't read the site and user environment files
  --no-site-file        Don't read the site-wide Rprofile
  --no-init-file        Don't read the .Rprofile or ~/.Rprofile files
  --restore             Do restore previously saved objects at startup
  --no-restore-data     Don't restore previously saved objects
  --no-restore-history  Don't restore the R history file
  --no-restore          Don't restore anything
  --vanilla		Combine --no-save, --no-restore, --no-site-file,
			--no-init-file and --no-environ
  --no-readline         Don't use readline for command-line editing
  --min-vsize=N         Set vector heap min to N bytes; '4M' = 4 MegaB
  --max-vsize=N         Set vector heap max to N bytes;
  --min-nsize=N         Set min number of cons cells to N
  --max-nsize=N         Set max number of cons cells to N
  --max-ppsize=N        Set max size of protect stack to N
  -q, --quiet           Don't print startup message
  --silent              Same as --quiet
  --slave               Make R run as quietly as possible
  --verbose             Print more information about progress
  -d, --debugger=NAME   Run R through debugger NAME
  --debugger-args=ARGS  Pass ARGS as arguments to the debugger
  -g, --gui=TYPE	Use TYPE as GUI; possible values are 'X11'
			(default), 'none' and 'gnome'
  --args                Skip the rest of the command line

Commands:
  BATCH			Run R in batch mode
  COMPILE		Compile files for use with R
  SHLIB			Build shared library for dynamic loading
  INSTALL		Install add-on packages
  REMOVE		Remove add-on packages
  build			Build add-on packages
  check			Check add-on packages
  LINK			Front-end for creating executable programs
  Rprof			Post-process R profiling files
  Rdconv		Convert Rd format to various other formats
  Rd2dvi		Convert Rd format to DVI/PDF
  Rd2txt		Convert Rd format to pretty text
  Sd2Rd			Convert S documentation to Rd format
  config                Obtain configuration information about R

The first five tools (i.e., BATCH, COMPILE, SHLIB, INSTALL, and REMOVE)
can currently be invoked without the 'CMD' option, but this usage is
deprecated.

Please use 'R CMD command --help' to obtain further information about
the usage of 'command'.

Report bugs to <r-bugs@r-project.org>."

version="R REPLACE_BY_VERSION.
Copyright (C) REPLACE_BY_YEAR R Development Core Team

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the GNU
General Public License.  For more information about these matters,
see http://www.gnu.org/copyleft/gpl.html."

error () {
  echo "ERROR: $*" >&2
  exit 1
}

### Argument loop
args=
debugger=
debugger_args=
while test -n "${1}"; do
  case ${1} in
    RHOME|--print-home)
      echo "${R_HOME}"; exit 0 ;;
    BATCH|COMPILE|INSTALL|REMOVE|SHLIB)
      echo "**** Use of R ${1} rather than R CMD ${1} is deprecated ****"
      exec sh "${R_HOME}/bin/Rcmd" "${@}" ;;
    CMD)
      shift;
      exec sh "${R_HOME}/bin/Rcmd" "${@}" ;;
    --gnome)
      error "option '${1}' is defunct, use '--gui=gnome'"
      ;;
    -d|--debugger)
      if test -n "`echo ${2} | sed 's/^-.*//'`"; then      
	debugger="${2}"; shift
      else
	error "option '${1}' requires an argument"
      fi
      ;;
    --debugger=*)
      debugger=`echo "${1}" | sed -e 's/[^=]*=//'` ;;
    --debugger-args=*)
      debugger_args=`echo "${1}" | sed -e 's/[^=]*=//'` ;;
    -h|--help)
      echo "${usage}"; exit 0 ;;
    --version)
      echo "${version}"; exit 0 ;;
    *)
      args="${args} ${1}" ;;
  esac
  shift
done

## R_HOME may have moved, so check
## (or you get "GUI X11 is not supported")
if test -x "${R_HOME}"; then
  :
else
  error "R_HOME ('${R_HOME}') not found"
fi

## Create a per-session dir
: ${TMPDIR=/tmp}
{ tmp=`(umask 077 && mktemp -d -q "${TMPDIR}/RtmpXXXXXX") 2>/dev/null` \
    && test -n "${tmp}" && test -d "${tmp}" ; } ||
  { test -n "${RANDOM}" && tmp=${TMPDIR}/Rtmp$$-${RANDOM} \
      && (umask 077 && mkdir "${tmp}") ; } ||
  { tmp=${TMPDIR}/Rtmp$$ && (umask 077 && mkdir "${tmp}") ; } ||
  error "cannot create temporary R session directory"
R_SESSION_TMPDIR="${tmp}"
export R_SESSION_TMPDIR

## Startup
R_binary="${R_HOME}/bin/R.bin"
if test -z "${debugger}"; then
  exec ${R_binary} @R_BATCHSAVE@ ${args}
else
  ## Ideally, we would like the debugger to start R with additional
  ## ('inferior') arguments, but not all debuggers can do this.  We know
  ## about valgrind and some versions of GDB , and deal with these.
  ## Otherwise, to be on the safe side, we disregard non-debugger
  ## command line args.
  args_ok=no
  case "`${debugger} --version 2>/dev/null`" in
    "GNU gdb"*)
      if ${debugger} --help 2>/dev/null | \
          grep ' *--args' >/dev/null; then
	args_ok=yes
	debugger_args="${debugger_args} --args"
      fi
      ;;
    valgrind*)
      args_ok=yes
      ;;
  esac
  if test -n "${args}" && test "${args_ok}" = no; then
    echo "*** Further command line arguments ('${args}') disregarded"
    echo "*** (maybe use 'run ${args}' from *inside* ${debugger})"
    echo ""
    exec ${debugger} ${debugger_args} ${R_binary}
  else
    exec ${debugger} ${debugger_args} ${R_binary} ${args}
  fi
fi

### Local Variables: ***
### mode: sh ***
### sh-indentation: 2 ***
### End: ***
