EVAL_GROUP=mo-eval
TEST_USERS="mo-test1 mo-test2"
-# Currently used test user
-TEST_USER=mo-test1
+# Test user for sandboxing
+TEST_USER=${TEST_USER:mo-test1}
### all of the following variables can be overriden in per-task config file
# Known source file extensions
EXTENSIONS="c C cpp p pas"
+# Extra compiler flags (null, but can be overriden)
+EXTRA_CFLAGS=
+
# For each source extension, we must give compiler command
-COMP_c='/usr/bin/gcc -O2 -g -o $EXE $SRC'
-COMP_C='/usr/bin/g++ -O2 -g -o $EXE $SRC'
+COMP_c='/usr/bin/gcc -O2 -g -o $EXE $EXTRA_CFLAGS $SRC'
+COMP_C='/usr/bin/g++ -O2 -g -o $EXE $EXTRA_CFLAGS $SRC'
COMP_cpp="$COMP_C"
-COMP_p='/usr/bin/fpc -Ci -Cr -g -O2 -So -Sg -o$EXE $SRC'
+COMP_p='/usr/bin/fpc -Ci -Cr -g -O2 -So -Sg -o$EXE $EXTRA_CFLAGS $SRC'
COMP_pas="$COMP_p"
# Sandbox options used when compiling
COMP_SANDBOX_OPTS='-m65536 -t60 -w -e'
# Sandbox options used when testing
-TEST_SANDBOX_OPTS='-a2 -f -m$MEM_LIMIT -t$TIME_LIMIT -w'
+TEST_SANDBOX_OPTS='-a2 -f -m$MEM_LIMIT -t$TIME_LIMIT'
+# -w for wall clock measuring
# For stdio tasks append '-i$PROBLEM.in -o$PROBLEM.out'
. $MO_PUBLIC/bin/lib
. $MO_PUBLIC/config
-[ -n "$1" ] || die "Usage: compile <problem>"
-PROBLEM=$1
-public-setup
-. $PDIR/config
-locate-source
-if compile ; then
- mv $TDIR/$PROBLEM .
+[ -n "$1" ] || die "Usage: compile (<problem> | <file> [<options>])"
+if [ "${1%%.*}" == "$1" ] ; then
+ # Compiling problem
+ PROBLEM=$1
+ public-setup
+ . $PDIR/config
+ locate-source
+ if compile ; then
+ mv $TDIR/$PROBLEM .
+ else
+ echo >&2
+ sed <log >&2 '1,/^Compiler output:/d;/^Compiler output files:/,$d;/^Exited /d'
+ fi
else
- echo >&2
- sed <log >&2 '1,/^Compiler output:/d;/^Compiler output files:/,$d;/^Exited /d'
+ SRC=$1
+ [ -f $SRC ] || die "$SRC doesn't exist"
+ EXE=${1%%.*}
+ SRCEXT=${1/*./}
+ shift
+ EXTRA_CFLAGS="$@"
+ CCMD=COMP_$SRCEXT
+ [ -n "${!CCMD}" ] || die "Don't know how to compile $SRC"
+ CCMD="`eval echo ${!CCMD}`"
+ echo "$CCMD"
+ $CCMD
fi