#!/bin/bash

DIR=$1
SP=`basename $2 .cocci`
INIT=$3
VERSION=`basename ${DIR}`
OUTPUT=${SP}_${INIT}_${VERSION}

ACC=acc_${SP}_${INIT}_${VERSION}
INPUT=input_${SP}_${INIT}_${VERSION}
TMP=tmp_${SP}_${INIT}_${VERSION}

OPTIONS="-dir ${DIR} -no_includes -use_glimpse -very_quiet -timeout 60 -allow_inconsistent_paths"
OPTIONS="-dir ${DIR} -no_includes -use_glimpse -very_quiet -timeout 60 -allow_inconsistent_paths -use_cache"
OPTIONS="-dir ${DIR} -no_includes -use_glimpse -very_quiet -timeout 60 -allow_inconsistent_paths"
DEFNS="-D alloc=${INIT} -D file=${OUTPUT} -D tmp=${TMP} -D version=${VERSION}"
CALL="spatch.opt -cocci_file ${SP}.cocci ${DEFNS} ${OPTIONS} > ${TMP}"
#CALL="spatch_linux ${SP}.cocci -very_quiet ${DEFNS} ${OPTIONS} ; mv ${SP}.out ${TMP} "
CMD="${CALL} ; cat ${TMP} >> ${OUTPUT}"

/bin/rm -f ${INPUT} ${ACC}
echo "${CMD}"
echo "${CMD}" > ${INPUT}
echo "${CMD}" > ${ACC}
while test -s ${INPUT} ; \
do \
  /bin/rm -f ${OUTPUT} ; \
  touch ${OUTPUT} ; \
  source ${INPUT} ; \
  sort -u ${OUTPUT} > ${INPUT} ; \
  diff ${ACC} ${INPUT} | grep "^> " | cut -d" " -f2- > ${OUTPUT} ; \
  mv ${OUTPUT} ${INPUT} ; \
  cat ${INPUT} >> ${ACC} ; \
  sort -u ${ACC} > ${OUTPUT} ; \
  mv ${OUTPUT} ${ACC} ; \
  wc -l ${INPUT} ${ACC} ; \
done

awk 'BEGIN {FS="[ =]"} {printf "-D fn=%s -D defining_file=%s\n", $6,$18}' ${ACC} | sort -u > ${OUTPUT}
#/bin/rm -f ${INPUT} ${ACC} ${TMP}
