+# psi_add_macro(macro)
+# Add a pre-defined macro function to $PSI_MACROS.
+psi_add_macro() {
+ cat >>$PSI_MACROS <<EOF
+$1
+EOF
+}
+
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])))"
- ])
+ macro_type="PSI_VAR_TYPE($1)"
+ macro_name="PSI_VAR_NAME($1)"
+ m4_case([$2],
+ [(void)], [
+ macro_decl="(void)"
+ macro_call="()"
+ ],
+ [()], [
+ macro_decl="()"
+ macro_call="()"
+ ],
+ [], [
+ 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_add_macro "$macro_type _psi_redir_$macro_name$macro_decl { $macro_body }"
+ PSI_REDIR($macro_name, _psi_redir_$macro_name)
], [], PSI_INCLUDES)
])