#! /bin/sh

# 
# Copyright 1999-2006 University of Chicago
# 
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
# http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# 

prefix="${GLOBUS_LOCATION-/cvmfs/dirac.egi.eu/dirac/v9.0.0a40/Linux-x86_64}"
exec_prefix="${prefix}"
sbindir="${exec_prefix}/sbin"
bindir="${exec_prefix}/bin"
includedir="/cvmfs/dirac.egi.eu/dirac/v9.0.0a40/Linux-x86_64/include/globus"
datarootdir="${prefix}/share"
datadir="${datarootdir}"
libexecdir="/cvmfs/dirac.egi.eu/dirac/v9.0.0a40/Linux-x86_64/share/globus"
sysconfdir="${prefix}/etc"
sharedstatedir="${prefix}/com"
localstatedir="${prefix}/var"

. ${libexecdir}/globus-script-initializer

globus_source ${libexecdir}/globus-sh-tools.sh

# This was done by the script initializer before V2.0
# So we need to add it here
#
if [ -z "$GLOBUS_SH_VARIABLES_SET" ]; then
    for _var in `${GLOBUS_SH_SED-sed} -n '/^    GLOBUS_SH/s/=.*$//p' \
        ${libexecdir}/globus-sh-tools.sh`
    do
        export ${_var}
    done
    GLOBUS_SH_VARIABLES_SET="Y"
    export GLOBUS_SH_VARIABLES_SET
fi 
 
#
# sources the globus-sh-tools file, then executes a script provided
# by the user.
#
# Synopsis: globus-sh-exec [-l][-h] [script | https:/.../script] args
#

set -f

PROGRAM_NAME=`echo $0 | ${GLOBUS_SH_SED-sed} 's|.*/||g'`

PROGRAM_VERSION=`echo '$Revision$'| ${GLOBUS_SH_SED-sed} -e 's|\\$||g' -e 's|Revision: \(.*\)|\1|'`

VERSION="18.11"

PACKAGE="globus_common"

DIRT_TIMESTAMP="1629915172"
DIRT_BRANCH_ID="0"


short_usage="globus-sh-exec [-l][-h] [-e | script] args ..."

long_usage()
{
    ${GLOBUS_SH_CAT-cat} 1>&2 <<EOF

${short_usage}

    Defines a set of GLOBUS_SH_ variables, then sources a user script.
    The user script is a local file, or can be referred to with a GASS
    URL.

    Additional arguments "args ..." are passed on to the user script.

    Options:
        -help        Shows help and exits
        -usage       Shows help and exits
        -version     Shows version and exits
        -list (-l)   Lists the defined GLOBUS_ variables and exits
        -exec (-e)   Commands are read from the argument line 

EOF
}

globus_source ${libexecdir}/globus-args-parser-header $@

ListDefinedValues()
{
    set |
	${GLOBUS_SH_GREP-grep} "^GLOBUS_" |
	${GLOBUS_SH_SORT-sort} -u |
	${GLOBUS_SH_SED-sed} -e 's/=/="/' -e 's/$/"/'
}


FixThePath()
{
    ListDefinedValues | (
	read line
	while [ -n "$line" ]; do
	    arg=`echo $line | sed 's/^.*=//p'`
	    if [ -x "$arg" ]; then
		dir=`${GLOBUS_SH_DIRNAME-dirname} $arg`
		if [ X`echo ":${PATH}:" | sed -n "s|:$dir:||p"` = X ]; then
		    PATH="${PATH}:${dir}"
		fi
	    fi
	    read line
	done
    )
    export PATH
}


ProcessScript()
{
    if [ ! -r ${file} ]; then
	echo "Error: cannot execute ${file}. -h for help" 1>&2
	exit 1
    fi
    FixThePath
    set +f
    . ${file}
}


CleanUp()
{
    if [ "${sh_exec_cleanup_file}x" != "x" ]; then
	${GLOBUS_SH_RM-rm} -f ${sh_exec_cleanup_file}
    fi
}


# Any arguments? If not, show usage
#
if [ $# -lt 1 ]; then
    globus_args_short_usage
    exit 1
fi


trap CleanUp 0 1 2 3 9 12 13 14 15 
sh_exec_cleanup_file=""

case "$1" in
    -h|-help|-usage)
        long_usage
        exit 0
        ;;
    -l|-list)
        ListDefinedValues
        exit 0
        ;;
    -e|-exec)
        USER=`${GLOBUS_SH_WHOAMI-whoami}`
        file=/tmp/globus-sh-exec-script.${USER}.$$
        sh_exec_cleanup_file=${file}
        shift
        echo "$@" > ${file}
        ProcessScript ""
        ;;	
    https:*)
        USER=`${GLOBUS_SH_WHOAMI-whoami}`
        file=/tmp/globus-sh-exec-script.${USER}.$$
        sh_exec_cleanup_file=${file}
        ${bindir}/globus-url-copy $1 file:${file}
        status=$?
        if [ ${status} -ne 0 ]; then
            echo "Error getting remote file" 1>&2
            exit 1
        fi
        shift
        ProcessScript "$@"
        ;;
    .*|/*|*) 
        file=$1
        shift
        ProcessScript "$@"
        ;;
esac