#!/usr/bin/env bash

flags="-Wall -Wextra"

usage() {
  echo "usage: (-l language | -n name | -o output) [-x extra]"
  exit
}

# parse arguments
while [[ $1 && $2 ]]; do
  case "$1" in
    -l)
      lang=$2
      ;;
    -n)
      name=$2
      ;;
    -o)
      output=$2
      ;;
    -x)
      extra=$2
      ;;
    *)
      usage
      exit 1
      ;;
  esac
  shift 2
done

# verify
if [[ -z $lang || -z $output ]]; then
  usage
fi

# construct makefile
case "$lang" in
  # c
  c)
cat > Makefile << EOF
CC= clang
CFLAGS= -I. ${flags}
DEPS=
LIBS=
OBJ= ${output}.o

%.o: %.c \$(DEPS)
	\$(CC) -c -o \$@ $< \$(CFLAGS)

${output}: \$(OBJ)
	\$(CC) -o ${output} \$^ \$(CFLAGS)

clean:
	@rm ${output} *.o
	@echo Done
EOF
  ;;

  # cpp
  cpp)
cat > Makefile << EOF
${output}: ${name}
	clang++ ${flags} -o ${output} ${name}

clean:
	@rm ${name}
	@echo Done
EOF
  ;;

  # java
  java)
cat > Makefile << EOF
JAVAC=javac -cp .:${extra}
sources = \$(wildcard ./*.java)
classes = \$(sources:.java=.class)

all: \$(classes)

clean:
	@rm -f *.class
	@echo Done

%.class : %.java
	\$(JAVAC) $<
EOF
  ;;

  # usage
  *)
  echo "Unsupported language"
  usage
  ;;
esac
