flush
[m6w6/ext-psi] / m4 / psi_macro.m4
index 0de4fdf7894ef92873286199f993a2c6cb16bed8..337a7e55a39c6a6bfa34bcc20dfc9205ccf21cb9 100644 (file)
@@ -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])))"
-               ])
+               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)
 ])