flush
[m6w6/ext-psi] / m4 / psi_struct.m4
index ce04f3d393657d91666e8f6a498bfaccdde6b8ac..fcee59c3d08e18bb0a61b91b36883ee2a8e88a8e 100644 (file)
@@ -1,24 +1,36 @@
+# psi_add_struct(struct members)
+# Add a pre-defined struct to $PSI_STRUCTS.
+psi_add_struct() {
+       cat >>$PSI_STRUCTS <<<" $1, {0}, "
+}
+
+dnl PSI_STRUCT_MEMBER(struct name, decl member)
+dnl INTERNAL: build $psi_struct_members
 AC_DEFUN(PSI_STRUCT_MEMBER, [
        m4_define([member_name], PSI_VAR_NAME($2))
        m4_define([member_type], PSI_VAR_TYPE($2))
-       PSI_CHECK_SIZEOF(AS_TR_SH($1)[_]member_name, PSI_INCLUDES
+       PSI_CHECK_SIZEOF(AS_TR_SH($1)[_]member_name,
                [#define ]AS_TR_SH($1)[_]member_name (($1 *)0)->member_name
        )
-       if test -n "$AS_TR_SH([ac_cv_sizeof_$1][_]member_name)" \
-       && test "$AS_TR_SH([ac_cv_sizeof_$1][_]member_name)" -gt 0; then
+       if PSI_SH_TEST_SIZEOF($1 member_name); then
                PSI_CHECK_OFFSETOF($1, member_name)
                PSI_TYPE_INDIRECTION($2, [$AS_TR_SH([ac_cv_sizeof_]$1[_]member_name)], pl, as)
                psi_struct_members="[$psi_struct_members, {]PSI_TYPE_PAIR(member_type)[, \"]member_name[\", $]AS_TR_SH([ac_cv_offsetof_]$1[_]member_name)[, $]AS_TR_SH([ac_cv_sizeof_]$1[_]member_name), $pl, $as[}]"
        fi
 ])
 
+dnl PSI_STRUCT(struct name, struct members)
+dnl Check a struct and its members and add a pre-defined struct and possibly a
+dnl pre-defined type for this struct.
+dnl Calls PSI_CHECK_SIZEOF for the struct and each member.
+dnl Calls PSI_CHECK_OFFSETOF and PSI_TYPE_INDIRECTON for each member.
 AC_DEFUN(PSI_STRUCT, [
-       PSI_CHECK_SIZEOF($1, PSI_INCLUDES)
+       PSI_CHECK_SIZEOF($1)
        psi_struct_name=m4_bregexp([$1], [^\(struct \)?\(\w+\)], [\2])
        psi_struct_members="{PSI_T_STRUCT, \"struct\", \"$psi_struct_name\", 0, $AS_TR_SH([ac_cv_sizeof_]$1), 0, 0}"
        ifelse([$2],,,[m4_map_args_sep([PSI_STRUCT_MEMBER($1, m4_normalize(], [))], [], $2)])
-       cat >>$PSI_STRUCTS <<<" $psi_struct_members, {0}, "
+       psi_add_struct "$psi_struct_members"
        if test "$1" = "$psi_struct_name"; then
-               cat >>$PSI_TYPES <<<"   {PSI_T_STRUCT, \"$1\", \"$1\"}, "
+               psi_add_type "{PSI_T_STRUCT, \"$1\", \"$1\"}"
        fi
 ])