flush
[m6w6/ext-psi] / m4 / psi_macro.m4
1 # psi_add_macro(macro)
2 # Add a pre-defined macro function to $PSI_MACROS.
3 psi_add_macro() {
4 cat >>$PSI_MACROS <<<"$1"
5 }
6
7 dnl PSI_MACRO(macro, decl args, action-if-true)
8 AC_DEFUN(PSI_MACRO, [
9 AC_CHECK_DECL(PSI_VAR_NAME($1)$2, [
10 $3
11 macro_type="PSI_VAR_TYPE($1)"
12 macro_name="PSI_VAR_NAME($1)"
13 m4_case([$2],
14 [(void)], [
15 macro_decl="(void)"
16 macro_call="()"
17 ],
18 [()], [
19 macro_decl="()"
20 macro_call="()"
21 ],
22 [], [
23 macro_decl="()"
24 macro_call=""
25 ],
26 [
27 macro_decl="$2"
28 macro_call="(m4_map_args_sep([PSI_VAR_NAME(], [)], [, ], m4_bregexp($2, [(\(.*\))], [\1])))"
29 ]
30 )
31 ifelse(PSI_VAR_TYPE($1), [void], [
32 macro_body="$macro_name$macro_call;"
33 ], [
34 macro_body="return $macro_name$macro_call;"
35 ])
36 psi_add_macro "$macro_type psi_macro_$macro_name$macro_decl { $macro_body }"
37 PSI_REDIR($macro_name, psi_macro_$macro_name)
38 ], [], PSI_INCLUDES)
39 ])
40
41 dnl PSI_EXTVAR(type var)
42 AC_DEFUN(PSI_EXTVAR, [PSI_MACRO($1)])