flush
[m6w6/ext-psi] / config.psi_macro.m4
1 # arg_names(typed args)
2 arg_names() {
3 AS_ECHO_N([$1]) \
4 | tr -cd '()' \
5 | $AWK -F, '{for (i=1;i<NF;++i) print $i ","; print $NF}' \
6 | $AWK '{print $NF}' \
7 | xargs
8 }
9 PSI_MACROS=
10 # gen_macro(ret type, symbol, args)
11 gen_macro() {
12 local dargs="$3"
13 test -z "$3" && dargs="()"
14 AS_ECHO_N(["static $1 psi_macro_$2$dargs {"])
15 if test "$1" != "void"; then
16 AS_ECHO_N(["return "])
17 fi
18 arg_names "$3"
19 AS_ECHO_N(["$2`arg_names \"$3\"`;}"])
20 }
21 # add_macro(ret type, symbol, args)
22 add_macro() {
23 local psi_macro
24 psi_macro=`gen_macro "$1" "$2" "$3"`
25 PSI_MACROS="$psi_macro $PSI_MACROS"
26 PSI_REDIR([$2], [psi_macro_$2])
27 }
28
29 dnl PSI_MACRO(macro, decl args, action-if-true)
30 AC_DEFUN(PSI_MACRO, [
31 AC_CHECK_DECL($1$2, $3, [], PSI_INCLUDES)
32 ])
33
34 dnl PSI_EXTVAR(var, type)
35 AC_DEFUN(PSI_EXTVAR, [
36 AC_CHECK_DECL($1, [
37 add_macro "$2" "$1"
38 ], [], PSI_INCLUDES)
39 ])