1#!/bin/sh 2 3set -e 4 5get_epname() { 6 grep METHOD_ENTRY "${1}" | sed 's|.*METHOD_ENTRY[(]|| ; s|[)].*||' | grep "${2}," | awk -F ',' '{print $2}' 7} 8 9gen_fin_c() { 10 echo "#include <stdio.h>" 11 echo "#include <stdint.h>" 12 echo "#include <stdlib.h>" 13 echo "#include \"rtpp_types.h\"" 14 echo "#include \"rtpp_debug.h\"" 15 DEFNAME=`echo ${1} | sed 's|[.]|_|g'` 16 echo "#define ${DEFNAME}_fin 1" 17 echo "#include \"${1}\"" 18 19 for mname in ${MNAMES_ALL} 20 do 21 echo "static void ${mname}_fin(void *pub) {" 22 echo " fprintf(stderr, \"Method ${mname} is called after destruction\\x0a\");" 23 echo " abort();" 24 echo "}" 25 done 26 for oname in ${ONAMES} 27 do 28 echo "void ${oname}_fin(struct ${oname} *pub) {" 29 MNAMES=`grep ^DEFINE_METHOD "${1}" | sed 's|^DEFINE_METHOD[(]||' | grep "${oname}," | awk -F ',' '{print $2}'` 30 for mname in ${MNAMES} 31 do 32 epname=`get_epname "${1}" "${mname}"` 33 echo " RTPP_DBG_ASSERT(pub->${epname} != (${mname}_t)&${mname}_fin);" 34 echo " pub->${epname} = (${mname}_t)&${mname}_fin;" 35 done 36 echo "}" 37 done 38} 39 40gen_fin_h() { 41 for oname in ${ONAMES} 42 do 43 echo "void ${oname}_fin(struct ${oname} *);" 44 done 45} 46 47ONAMES=`grep ^DEFINE_METHOD "${1}" | sed 's|^DEFINE_METHOD[(]||' | awk -F ',' '{print $1}' | sort -u` 48MNAMES_ALL=`grep ^DEFINE_METHOD "${1}" | sed 's|^DEFINE_METHOD[(]||' | awk -F ',' '{print $2}' | sort -u` 49 50gen_fin_h "${1}" > "${2}" 51gen_fin_c "${1}" > "${3}" 52