diff --git a/judge/scripts/std-script/compile b/judge/scripts/std-script/compile new file mode 100755 --- /dev/null +++ b/judge/scripts/std-script/compile @@ -0,0 +1,107 @@ +#!/bin/sh + +############################## +# +# Standard Compile Script +# +# Supported compilers: +# gcc, g++, and fpc. +# +############################## + +talk () +{ + if [ "$TALKATIVE" != "" ]; then + echo "$1" + fi +} + +export C_COMPILER=/usr/bin/gcc +export CPLUSPLUS_COMPILER=/usr/bin/g++ +export PASCAL_COMPILER=/usr/bin/fpc + +export C_OPTIONS="-O2 -s -static -std=c99 -DCONTEST -lm -Wall" +export CPLUSPLUS_OPTIONS="-O2 -s -static -DCONTEST -lm -Wall" +export PASCAL_OPTIONS="-O1 -XS -dCONTEST" + +# Check for the correct number of arguments. Otherwise, print usage. +if [ $# -eq 0 -o $# -gt 4 ] +then + echo "Usage: $0 [] [] []" + echo + echo " is defaulted to \"source\"." + echo " is defaulted to \"a.out\"." + echo " is defaulted to \"compiler_message\"." + echo + exit 127 +fi + +# Retrieve the arguments. +if [ $# -ge 1 ] +then + export PROG_LANG=$1 + talk "programming language: ${PROG_LANG}" +fi + +if [ $# -ge 2 ] +then + export SOURCE_FILE=$2 +else + export SOURCE_FILE=source +fi +talk " source file: $SOURCE_FILE" + +if [ $# -ge 3 ] +then + export OUTPUT_FILE=$3 +else + export OUTPUT_FILE=a.out +fi +talk " output file: $OUTPUT_FILE" + +if [ $# -eq 4 ] +then + export MESSAGE_FILE=$4 +else + export MESSAGE_FILE=compiler_message +fi +talk " message file: $MESSAGE_FILE" + +# Remove any remaining output files or message files. +rm -Rf $OUTPUT_FILE +rm -Rf $MESSAGE_FILE + +# Check if the source file exists before attempt compiling. +if [ ! -f $SOURCE_FILE ] +then + talk "ERROR: The source file does not exist!" + echo "ERROR: The source file did not exist." > $MESSAGE_FILE + exit 127 +fi + +# Compile. +if [ $PROG_LANG = "c" ] +then + $C_COMPILER $SOURCE_FILE -o $OUTPUT_FILE $C_OPTIONS 2>$MESSAGE_FILE +elif [ $PROG_LANG = "c++" ] +then + $CPLUSPLUS_COMPILER $SOURCE_FILE -o $OUTPUT_FILE $CPLUSPLUS_OPTIONS 2>$MESSAGE_FILE +elif [ $PROG_LANG = "pas" ] +then + $PASCAL_COMPILER $SOURCE_FILE -ooutpas $PASCAL_OPTIONS >$MESSAGE_FILE + mv outpas $OUTPUT_FILE +else + talk "ERROR: Invalid language specified!" + echo "ERROR: Invalid language specified!" > $MESSAGE_FILE + exit 127 +fi + +# Report success or failure. +if [ -f $OUTPUT_FILE ] +then + talk "Compilation was successful!" +else + talk "ERROR: Something was wrong during the compilation!" + talk "Dumping compiler message:" + #cat $MESSAGE_FILE +fi