autoconf-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 11/12] use a shell function for AC_CHECK_MEMBER


From: Paolo Bonzini
Subject: [PATCH 11/12] use a shell function for AC_CHECK_MEMBER
Date: Mon, 20 Oct 2008 15:35:47 +0200

This patch is a little bigger because AC_CHECK_MEMBER expects
a literal argument, while we must rewrite the function to work with
shell variables.  Thanks to AS_VAR_* it's not that bad though.

2008-10-12  Paolo Bonzini  <address@hidden>

        * lib/autoconf/general.m4 (AC_CHECK_MEMBER): Use a shell function.
---
 lib/autoconf/types.m4 |   45 ++++++++++++++++++++++++++++-----------------
 1 files changed, 28 insertions(+), 17 deletions(-)

diff --git a/lib/autoconf/types.m4 b/lib/autoconf/types.m4
index 3acb988..4af94bf 100644
--- a/lib/autoconf/types.m4
+++ b/lib/autoconf/types.m4
@@ -825,29 +825,40 @@ you adjust the code.])
 # AGGREGATE.MEMBER is for instance `struct passwd.pw_gecos', shell
 # variables are not a valid argument.
 AC_DEFUN([AC_CHECK_MEMBER],
-[AS_LITERAL_IF([$1], [],
-              [AC_FATAL([$0: requires literal arguments])])dnl
-m4_bmatch([$1], [\.], ,
-        [m4_fatal([$0: Did not see any dot in `$1'])])dnl
-AS_VAR_PUSHDEF([ac_Member], [ac_cv_member_$1])dnl
+[AC_REQUIRE_SHELL_FN([ac_func_]_AC_LANG_ABBREV[_check_member],
+  [AS_FUNCTION_DESCRIBE([ac_func_]_AC_LANG_ABBREV[_check_member],
+    [LINENO AGGR MEMBER INCLUDES],
+    [Tries to find the field MEMBER exists in type AGGR, after including
+     INCLUDES, setting a cache variable accordingly.])], [
+AS_LINENO_PUSH([$[]1])
+ac_aggr=[$]2
+ac_member=[$]3
+ac_includes=[$]4
+AS_VAR_PUSHDEF([ac_Member], [ac_cv_member_${ac_aggr}_${ac_member}])dnl
 dnl Extract the aggregate name, and the member name
-AC_CACHE_CHECK([for $1], [ac_Member],
-[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$4])],
-[dnl AGGREGATE ac_aggr;
-static m4_bpatsubst([$1], [\..*]) ac_aggr;
-dnl ac_aggr.MEMBER;
-if (ac_aggr.m4_bpatsubst([$1], [^[^.]*\.]))
+AC_CACHE_CHECK([for $ac_aggr.$ac_member], [ac_Member],
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$ac_includes],
+[static $ac_aggr ac_aggr;
+if (ac_aggr.$ac_member)
 return 0;])],
                [AS_VAR_SET([ac_Member], [yes])],
-[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$4])],
-[dnl AGGREGATE ac_aggr;
-static m4_bpatsubst([$1], [\..*]) ac_aggr;
-dnl sizeof ac_aggr.MEMBER;
-if (sizeof ac_aggr.m4_bpatsubst([$1], [^[^.]*\.]))
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$ac_includes],
+[static $ac_aggr ac_aggr;
+if (sizeof ac_aggr.$ac_member)
 return 0;])],
                [AS_VAR_SET([ac_Member], [yes])],
                [AS_VAR_SET([ac_Member], [no])])])])
-AS_VAR_IF([ac_Member], [yes], [$2], [$3])dnl
+AS_VAR_POPDEF([ac_Member])dnl
+AS_LINENO_POP
+])dnl
+AS_LITERAL_IF([$1], [],
+              [AC_FATAL([$0: requires literal arguments])])dnl
+m4_bmatch([$1], [\.], ,
+        [m4_fatal([$0: Did not see any dot in `$1'])])dnl
+ac_func_[]_AC_LANG_ABBREV[]_check_member "$LINENO" "m4_bpatsubst([$1], 
[\..*])" \
+       "m4_bpatsubst([$1], [^[^.]*\.])" "AS_ESCAPE([AC_INCLUDES_DEFAULT([$4], 
["])])"
+AS_VAR_PUSHDEF([ac_Member], [ac_cv_member_$1])dnl
+AS_VAR_IF([ac_Member], [yes], [$2], [$3])[]dnl
 AS_VAR_POPDEF([ac_Member])dnl
 ])# AC_CHECK_MEMBER
 
-- 
1.5.5





reply via email to

[Prev in Thread] Current Thread [Next in Thread]