#!/bin/bash

CACHED=0
TYPES=./*
JPATH=/tmp/lcmtypes

usage() {
  echo "run-lcm-spy.sh"
  echo -e "\t-c\t\t\tUse cached compiled type classes, if available."
  echo -e "\t-t [./*]\t\tpath to LCM types to compile"
  echo -e "\t-j [/tmp/lcmtypes]\tpath to put java code generated by lcm-gen"
}

while getopts "hct:j:" opt; do
  case $opt in
    h)
      usage
      exit 0
      ;;
    c)
      echo "will look for cached compiled type classes"
      CACHED=1
      ;;
    t)
      LPATH=$OPTARG
      ;;
    j)
      JPATH=$OPTARG
      ;;
    \?)
      usage
      exit 1
      ;;
  esac
done

CLASSPATH=/usr/local/share/java/lcm.jar:$JPATH

if test "$CACHED" = 0; then
  echo "Cleaning any cached .java and .class files from $JPATH"
  find $JPATH -type f \( -name "*.java" -o -name "*.class" \) -delete
fi

if test -n "$(find $JPATH -type f -name "*.class" -print -quit)"; then
  echo "Using existing .class files in $JPATH"
else
	if test -n "$(find $JPATH -type f -name "*.java" -print -quit)"; then
    echo "Using existing .java files in $JPATH"
  else
    echo "Generating new .java files in $JPATH"
    find $TYPES -type f -name "*.lcm" -exec lcm-gen --java --jpath $JPATH {} \;
  fi
  echo "Compiling new .class files in $JPATH"
  find $JPATH -type f -name "*.java" -exec javac -cp $CLASSPATH {} \;
fi

CLASSPATH=$CLASSPATH lcm-spy # some OS want classpath set in same line