#!/bin/bash
# Execute this file in the context of your shell, such as with
#  . @EMC2_HOME@/scripts/rip-environment
# and your shell environment will be properly configured to run commands like
# halcompile, halcmd, halrun, iosh, and python with the emc modules available.
#
# Alternately, use it as a wrapper to invoke a linuxcnc command that requires
# the environment to be set:
#  @EMC2_HOME@/scripts/rip-environment latency-test
#
#    Copyright 2006, 2007, 2008, 2009, 2014 Jeff Epler <jepler@unpythonic.net>
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

case "$0" in
    rip-environment|*/rip-environment)
        as_command=true
        if [ $# -eq 0 ]; then
                cat <<-EOF
			This script can be used in one of two ways.

			It can be loaded in the context of your shell, by executing
			    . $0
			after this, commands like 'linuxcnc', 'halrun' and so on refer to the
			version in this directory, instead of to an installed version of
			linuxcnc (if any)

			Second, it can be used to run a command in this directory without
			modifying the environment of the calling shell:
			    $0 command...
			such as
			    $0 halrun foo.hal
			    $0 linuxcnc configs/.../foo.ini
		EOF
	exit 1
        fi ;;
    *) as_command=false
esac

if ! test "xyes" = "x@RUN_IN_PLACE@"; then
    echo "This script is only useful on run-in-place systems."
    return
fi

case "$PATH" in
    @EMC2_BIN_DIR@:*|*:@EMC2_BIN_DIR@:*)
        if ! $as_command; then
            echo "This script only needs to be run once per shell session."
            return
        fi ;;
esac

EMC2_HOME=@EMC2_HOME@; export EMC2_HOME
EMC2VERSION="@EMC2VERSION@"; export EMC2VERSION
LINUXCNCVERSION="@EMC2VERSION@"; export LINUXCNCVERSION
LINUXCNC_NCFILES_DIR="@EMC2_NCFILES_DIR@"; export LINUXCNC_NCFILES_DIR
LINUXCNC_EMCSH=@WISH@; export LINUXCNC_EMCSH
PATH=@EMC2_BIN_DIR@:$EMC2_HOME/scripts:$EMC2_HOME/tcl:"$PATH"
GLADE_ICON_THEME_PATH=$EMC2_HOME/share/glade/pixmaps:"$GLADE_ICON_THEME_PATH"; export GLADE_ICON_THEME_PATH

if [ -z "$TCLLIBPATH" ]; then
    TCLLIBPATH=$EMC2_HOME/tcl
else
    TCLLIBPATH=$EMC2_HOME/tcl:$TCLLIBPATH
fi

if [ -z "$LD_LIBRARY_PATH" ]; then
    LD_LIBRARY_PATH=$EMC2_HOME/lib
else
    LD_LIBRARY_PATH=$EMC2_HOME/lib:"$LD_LIBRARY_PATH"
fi

if [ -z "$PYTHONPATH" ]; then
    PYTHONPATH=$EMC2_HOME/lib/python
else
    PYTHONPATH=$EMC2_HOME/lib/python:"$PYTHONPATH"
fi

if [ -z "$MANPATH" ]; then
    if type -path manpath > /dev/null 2>&1; then
	MANPATH=$EMC2_HOME/docs/man:"$(manpath)"
    else
	MANPATH=$EMC2_HOME/docs/man:/usr/local/man:/usr/local/share/man:/usr/share/man
    fi
else
    MANPATH=$EMC2_HOME/docs/man:"$MANPATH"
fi

if [ -z "$GLADE_CATALOG_SEARCH_PATH" ]; then
    GLADE_CATALOG_SEARCH_PATH=$EMC2_HOME/lib/python/gladevcp
else
    GLADE_CATALOG_SEARCH_PATH=$EMC2_HOME/lib/python/gladevcp:"$GLADE_CATALOG_SEARCH_PATH"
fi

if ! $as_command; then
    # TODO: if these completion directives give trouble for any versions
    # of bash actively in use, protect them with checks of BASH_VERSINFO
    if [ $BASH_VERSINFO -eq 2 ]; then
        complete -o dirnames -f -X '!*.ini' emc axis mdi
        complete -o dirnames -f -X '!*.hal' halrun halcmd
        complete -W 'start stop restart status' realtime
        complete -C "halcmd -C" halcmd
    else
        _iningc () {
            case "$3" in
            *.ini) COMPREPLY=($(compgen -o plusdirs -f -X '!*.ngc' -- "$2")) ;;
            *) COMPREPLY=($(compgen -o plusdirs -f -X '!*.ini' -- "$2"))
            esac
        }
        complete -o plusdirs -F _iningc emc axis
        complete -o plusdirs -f -X '!*.ini' mdi
        complete -o plusdirs -f -X '!*.hal' halrun halcmd
        complete -W 'start stop restart status' realtime
        complete -C "halcmd -C" halcmd
    fi

    if [ -f $EMC2_HOME/src/Makefile ]; then
        build () { make -C $EMC2_HOME/src "$@"; }
    fi
fi

export PYTHONPATH MANPATH LD_LIBRARY_PATH TCLLIBPATH GLADE_CATALOG_SEARCH_PATH

if $as_command; then exec "$@"; fi
