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