configure: add --enable-psi-maintainer-mode
[m6w6/ext-psi] / m4 / psi / psi_macro.m4
index d26a888774a5a7a2c094ecfeb58a92521620a6d4..35af8a4251e2f19d4a1e464c6264d9dd906cbc3e 100644 (file)
@@ -11,6 +11,14 @@ AC_DEFUN(PSI_MACRO, [
        AC_CHECK_DECL(PSI_VAR_NAME($1)$2, [
                macro_type="PSI_VAR_TYPE($1)"
                macro_name="PSI_VAR_NAME($1)"
+               PSI_TYPE_INDIRECTION([$1],, macro_pointer_level, macro_array_size)
+               if test "$macro_array_size" -gt 0; then
+                       macro_array="@<:@$macro_array_size@:>@"
+                       macro_return="$macro_type*"
+               else
+                       macro_array=""
+                       macro_return="$macro_type"
+               fi
                m4_case([$2],
                        [(void)], [
                                macro_decl="(void)"
@@ -39,24 +47,25 @@ AC_DEFUN(PSI_MACRO, [
                        macro_body="return $macro_name$macro_call;"
                ])
                $3
-               psi_add_macro "$macro_type _psi_${macro_action}_$macro_name$macro_decl { $macro_body }"
+               psi_add_macro "$macro_return _psi_${macro_action}_$macro_name$macro_decl { $macro_body }"
                PSI_REDIR($macro_name, _psi_${macro_action}_$macro_name)
-       ], [], PSI_INCLUDES)
+       ], [], [PSI_INCLUDES])
 ])
 
 dnl PSI_EXTVAR(type var)
 AC_DEFUN(PSI_EXTVAR, [
-       dnl just a getter
        PSI_MACRO($1, [], [
+               dnl just a getter
                PSI_DECL_ARGS($1)
                psi_add_decl "$psi_decl_args"
-               dnl explicit getter & setter
+               dnl explicit getter
                PSI_REDIR([${macro_name}_get], [_psi_get_$macro_name])
-               PSI_DECL_ARGS($1_get)
+               PSI_DECL_ARGS([PSI_VAR_TYPE_RETURN($1) PSI_VAR_NAME($1)_get])
                psi_add_decl "$psi_decl_args"
-               psi_add_macro "void _psi_set_${macro_name}($macro_type value) { memcpy(&$macro_name, &value, sizeof(value)); }"
+               dnl setter
+               psi_add_macro "void _psi_set_${macro_name}($macro_type value$macro_array) { memcpy(&$macro_name, &value, sizeof($macro_type$macro_array)); }"
                PSI_REDIR([${macro_name}_set], [_psi_set_${macro_name}])
-               PSI_DECL_ARGS([void PSI_VAR_NAME($1)_set], [(PSI_VAR_TYPE($1) _v)])
+               PSI_DECL_ARGS([void PSI_VAR_NAME($1)_set], [($1)])
                psi_add_decl "$psi_decl_args"
        ])
 ])