view candide @ 8793:fa0ae3b6f2cd

<int-e> le/rn warranty/HackEgo comes without warranty, express or implied, and is unfit for any purpose, including the purpose of being unfit for anything. Its warranty has expired.
author HackBot
date Mon, 11 Jul 2016 22:14:46 +0000
parents abfbcd1a21d5
children
line wrap: on
line source

#!/bin/bash
# compile c from stdin
# candide, kinda

readinput () {
  while read -r -e || { printf %s "$REPLY"; false; } ; do
    printf '%s\n' "$REPLY"
  done
}

c=$(readinput)
if ! [[ $c ]] || ! out=$(mktemp); then
  echo Error >&2
  exit 1
fi

# if you don't write 'main' it assumes that you're writing a full program (with free includes)
# this allows you to use other functions and stuff
# it will get false positives, but who cares?
if [[ $c != *main* ]]; then c=$(cat <<SOURCE
int main(int argc, char *argv[]) {
$c
  return 0;
}
SOURCE
); fi

# will replace -O0 with the parameters
gcc -o "$out" -x c -I /hackenv "${@--O0}" /dev/fd/0 <<SOURCE && { "$out" && { rm -f "$out"; true; }; }
#include "headers"    /* precompiled headers */
$c
SOURCE