X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=m4%2Fpsi_macro.m4;fp=m4%2Fpsi_macro.m4;h=439098fabe4b0ec57a71532c18f1eaa6738822c4;hb=b4508f6b917660970f887894a6aaed6c220a2c72;hp=0000000000000000000000000000000000000000;hpb=3137da963d298c73ce3bc858874fdfc87fa941b7;p=m6w6%2Fext-psi diff --git a/m4/psi_macro.m4 b/m4/psi_macro.m4 new file mode 100644 index 0000000..439098f --- /dev/null +++ b/m4/psi_macro.m4 @@ -0,0 +1,26 @@ +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)])