--- /dev/null
+dnl PSI_MACRO(macro, decl args, action-if-true)
+AC_DEFUN(PSI_MACRO, [
+ AC_CHECK_DECL(PSI_VAR_NAME($1)$2, [
+ $3
+ macro_type=PSI_VAR_TYPE($1)
+ macro_name=PSI_VAR_NAME($1)
+ ifelse([$2], [], [
+ macro_decl="()"
+ macro_call=""
+ ], [
+ macro_decl="$2"
+ macro_call="(m4_map_args_sep([PSI_VAR_NAME(], [)], [, ], m4_bregexp($2, [(\(.*\))], [\1])))"
+ ])
+ ifelse(PSI_VAR_TYPE($1), [void], [
+ macro_body="$macro_name$macro_call;"
+ ], [
+ macro_body="return $macro_name$macro_call;"
+ ])
+ psi_macro="$macro_type psi_macro_$macro_name$macro_decl { $macro_body }"
+ PSI_MACROS="$PSI_MACROS $psi_macro"
+ PSI_REDIR($macro_name, psi_macro_$macro_name)
+ ], [], PSI_INCLUDES)
+])
+
+dnl PSI_EXTVAR(type var)
+AC_DEFUN(PSI_EXTVAR, [PSI_MACRO($1)])