# Locate source file.
# If no parameter is given, locate it in SDIR and return name as SRCN and extension as SRCEXT
# Or a file name can be given and then SDIR, SRCN and SRCEXT are set.
+# Beware, SDIR and SRCN can contain spaces and other strange user-supplied characters.
function locate-source
{
pstart "Finding source... "
+ local SBASE
if [ -n "$1" ] ; then
- SRCBASE=$(echo $1 | sed 's/\.\([^.]\+\)//')
- SRCEXT=$(echo $1 | sed 's/.*\.\([^.]\+\)/\1/')
+ SDIR=`dirname "$1"`
+ local S=`basename "$1"`
+ SBASE=$(echo "$S" | sed 's/\.\([^.]\+\)//')
+ SRCEXT=$(echo "$S" | sed '/\./!d; s/.*\.\([^.]\+\)/\1/')
if [ -n "$SRCEXT" ] ; then
# Full name given, so just check the extension and existence
- SRCN=$1
- if [ ${SRCN:0:1} == / ] ; then
- SRCN=${SRCN:1}
- SDIR=
- fi
+ SRCN="$S"
[ -f "$SDIR/$SRCN" ] || die "Cannot find source file $SDIR/$SRCN"
SRCEXT_OK=
for a in $EXTENSIONS ; do
SBASE=$PROBLEM
fi
for a in $EXTENSIONS ; do
- if [ -f $SDIR/$SBASE.$a ] ; then
+ if [ -f "$SDIR/$SBASE.$a" ] ; then
[ -z "$SRCN" ] || die "Multiple source files found: $SDIR/$PROBLEM.$a and $SDIR/$SRCN. Please fix."
- SRCN=$SBASE.$a
+ SRCN="$SBASE.$a"
SRCEXT=$a
fi
done
pstart "Compiling... "
# Beware, the original SRCN can be a strange user-supplied name
SRC=$PROBLEM.$SRCEXT
- cp -a $SDIR/$SRCN $TDIR/$SRC
+ cp "$SDIR/$SRCN" $TDIR/$SRC
if [ -n "$COMP_EXTRAS" ] ; then
echo "Extras: $COMP_EXTRAS"
for a in $COMP_EXTRAS ; do cp $PDIR/$a $TDIR/ ; done
}
# Locate output of open data problem, test case TEST
+# Beware, SDIR and SRCN can contain spaces and other strange user-supplied characters.
function open-locate
{
[ -f $PDIR/$TEST.in ] || die "Unknown test $TEST"
if [ -n "$1" ] ; then
- SRCN=$1
+ SDIR=`dirname "$1"`
+ SRCN=`basename "$1"`
else
SRCN=$SDIR/$PROBLEM$TEST.out
fi
if [ $TASK_TYPE == open-data ] ; then
[ -n "$TEST" ] || die "You need to specify test number for open data problems."
pstart "Checking $TEST: "
- open-locate $SRCFILE
- ln $SRCN $TDIR/$TEST.out
+ open-locate "$SRCFILE"
+ ln "$SRCN" $TDIR/$TEST.out
syntax-check
test-result 1 OK
else
[ -z "$TEST" ] || die "Test number should be given only for open data problems."
- locate-source $SRCFILE
+ locate-source "$SRCFILE"
compile
RC=0
for TEST in $SAMPLE_TESTS ; do
[ -n "$PART" ] || die "You need to specify test number for open data problems."
TEST=$PART
pstart "Test case $TEST: "
- open-locate $SRCFILE
+ open-locate "$SRCFILE"
(
- ln $SRCN $TDIR/$TEST.out
+ ln "$SDIR/$SRCN" $TDIR/$TEST.out
syntax-check
test-result 1 OK
) || FAILED=1
else
[ -z "$PART" ] || die "Test number should be given only for open data problems."
- locate-source $SRCFILE
+ locate-source "$SRCFILE"
compile
for TEST in $SAMPLE_TESTS ; do
(
if [ -n "$REMOTE_SUBMIT" ] ; then
pstart "Submitting to the server... "
- $MO_ROOT/bin/remote-submit $PROBLEM $PART $SDIR/$SRCN
+ $MO_ROOT/bin/remote-submit $PROBLEM $PART "$SDIR/$SRCN"
pend "OK"
exit 0
fi
mkdir -p ~/.submit
if [ $TASK_TYPE == open-data ] ; then
mkdir -p ~/.submit/$PROBLEM
- cp $SRCN ~/.submit/$PROBLEM/$PART.out
+ cp "$SDIR/$SRCN" ~/.submit/$PROBLEM/$PART.out
else
rm -rf ~/.submit/$PROBLEM
mkdir -p ~/.submit/$PROBLEM
- cp $SRCN ~/.submit/$PROBLEM/
+ cp "$SDIR/$SRCN" ~/.submit/$PROBLEM/
fi
pend "OK"