gridengine/examples/jobs/ssession.sh

188 lines
4.4 KiB
Bash
Executable File

#!/bin/sh
#$ -S /bin/sh
#$ -pe make 1
#$ -N SSession
#$ -v PATH
#___INFO__MARK_BEGIN__
##########################################################################
#
# The Contents of this file are made available subject to the terms of
# the Sun Industry Standards Source License Version 1.2
#
# Sun Microsystems Inc., March, 2001
#
#
# Sun Industry Standards Source License Version 1.2
# =================================================
# The contents of this file are subject to the Sun Industry Standards
# Source License Version 1.2 (the "License"); You may not use this file
# except in compliance with the License. You may obtain a copy of the
# License at http://gridengine.sunsource.net/Gridengine_SISSL_license.html
#
# Software provided under this License is provided on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
# See the License for the specific provisions governing your rights and
# obligations concerning the Software.
#
# The Initial Developer of the Original Code is: Sun Microsystems, Inc.
#
# Copyright: 2009 by Sun Microsystems, Inc.
#
# All Rights Reserved.
#
##########################################################################
#___INFO__MARK_END__
ARCH=`$SGE_ROOT/util/arch`
ECHO="$SGE_ROOT/utilbin/$ARCH/echo_raw -e"
ssession_logging_enabled="false" # is logging enabled?
ssession_logfile="/tmp/ssession.log" # logfile
tfile="taskfile.txt" # default taskfile name if not other specified
mfile="" # makefile name
isource="tfile" # type of onput "tfile" or "mfile"
ssession_show_usage()
{
echo "usage: ssession [ taskfile | -mf makefile ]"
echo
echo " If there is neither a taskfile nor a makefile specified then"
echo " this script assumes that there is taskfile named taskfile.txt"
echo " in the current working directory."
echo
echo " taskfile - taskfile containing the tasks to be executed in the session"
echo " makefile - makefile containing the tasks an depedency definition"
}
# add start rule to makefile
ssession_makefile_add_all()
{
taskfile=$1
makefile=$2
start="all:"
line_i=1
max=`wc -l $taskfile|cut -c 1-8`
while [ $line_i -le $max ]; do
line=`head -$line_i $taskfile | tail -1`
start=`echo $start task${line_i}`
line_i=`expr $line_i + 1`
done
echo $start >>$makefile
echo "" >>$makefile
unset makefile
unset start
unset line_i
}
# add one rule for each task in taskfile
ssession_makefile_add_task()
{
taskfile=$1
makefile=$2
line_i=1
max_lines=`wc -l $taskfile|cut -c 1-8`
while [ $line_i -le $max_lines ]; do
command=`head -$line_i $taskfile | tail -1`
echo "task${line_i}:" >>$makefile
$ECHO "\t${command}" >>$makefile
echo "" >>$makefile
line_i=`expr $line_i + 1`
done
unset max_lines
unset taskfile
unset makefile
unset line_i
}
# create the makefile
ssession_makefile_create()
{
makefile=$1
if [ -f $makefile ]; then
rm -f $makefile
echo rm
fi
touch $makefile
unset makefile
}
# destroy the taskfile
ssession_makefile_destroy()
{
makefile=$1
# rm -f $makefile
unset makefile
}
# start a qmake job that executes tasks in taskfile
ssession_start_qmake()
{
makefile=$1
qmake -inherit -- -f $makefile
}
ssession_log()
{
if [ $ssession_logging_enabled = true ]; then
echo "$@" >>$ssession_logfile
fi
}
if [ $# = 1 ]; then
if [ -f "$1" ]; then
tfile="$1"
else
ssession_show_usage
exit
fi
elif [ $# = 2 ]; then
if [ "$1" = "-mf" ]; then
mfile="$2"
isource="mfile"
else
ssession_show_usage
exit
fi
else
tfile="taskfile.txt"
fi
if [ "$mfile" = "" ]; then
if [ -d "$TMPDIR" ]; then
mfile="${TMPDIR}/Makefile.$$"
else
mfile="/tmp/Makefile.$$"
fi
fi
if [ "$isource" = "tfile" ]; then
ssession_log "Using taskfile \"$tfile\""
ssession_log "Creating makefile \"$mfile\""
ssession_makefile_create $mfile
ssession_makefile_add_all $tfile $mfile
ssession_makefile_add_task $tfile $mfile
ssession_start_qmake $mfile
ssession_makefile_destroy $mfile
else
ssession_log "Using makefile \"$mfile\""
ssession_start_qmake $mfile
fi