#!/usr/bin/env sh : "${CONTAINER:=cool-session}" : "${CONTAINER_HOME:=/home/student/$USER}" : "${CONTAINER_URL:=ghcr.io/aristotelis2002/uni-cool}" : "${COOLC_PATH:=/usr/class/bin/coolc}" : "${SPIM_PATH:=/usr/class/bin/spim}" : "${EXEC_EXTENSION:=out}" container_relative_path() { __file="$(realpath "$1")" __file="$CONTAINER_HOME${__file##$HOME}" echo "$__file" } if ! command -v docker >/dev/null 2>&1 then echo 'You must install docker on your machine!' exit 1 fi if [ -z "$(docker ps -qa -f name="$CONTAINER")" ] then echo "Container image '$CONTAINER' doesn't exist, creating..." docker pull ghcr.io/aristotelis2002/uni-cool:latest docker run -td --name "$CONTAINER" --mount type=bind,src="$HOME",dst="$CONTAINER_HOME" "$CONTAINER_URL" fi if [ "$(docker inspect -f '{{.State.Running}}' "$CONTAINER")" = 'false' ] then echo "Container image '$CONTAINER' isn't running, starting..." docker start "$CONTAINER" fi files= bin= exec= for file in "$@" do [ -z "$exec" ] && exec="${file%\.*}.s" file="$(container_relative_path "$file")" files="$files $file" [ -z "$bin" ] && bin="${file%\.*}.s" done eval "docker exec -u root -w '$(container_relative_path .)' '$CONTAINER' '$COOLC_PATH' $files || exit \$?" exec="${exec%\.s}.$EXEC_EXTENSION" cat < "$exec" #!/usr/bin/env sh eval "docker exec -u root -w '$(container_relative_path .)' '$CONTAINER' '$SPIM_PATH' -file '$bin'" \ | sed '1,5d;/^COOL program successfully executed$/d;\$s/COOL program successfully executed$//' EXECUTABLE chmod +x "$exec"