X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=m4%2Fpsi_macro.m4;h=337a7e55a39c6a6bfa34bcc20dfc9205ccf21cb9;hb=3fe5a4c7cf3e810dcfd79475a1a3aedbe8282378;hp=439098fabe4b0ec57a71532c18f1eaa6738822c4;hpb=b4508f6b917660970f887894a6aaed6c220a2c72;p=m6w6%2Fext-psi diff --git a/m4/psi_macro.m4 b/m4/psi_macro.m4 index 439098f..337a7e5 100644 --- a/m4/psi_macro.m4 +++ b/m4/psi_macro.m4 @@ -1,23 +1,39 @@ +# psi_add_macro(macro) +# Add a pre-defined macro function to $PSI_MACROS. +psi_add_macro() { + cat >>$PSI_MACROS <<<"$1" +} + 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_add_macro "$macro_type psi_macro_$macro_name$macro_decl { $macro_body }" PSI_REDIR($macro_name, psi_macro_$macro_name) ], [], PSI_INCLUDES) ])