test.
* acgeneral.m4 (AC_CHECK_SIZEOF): Don't over quote $1, some []
were left in the C code, and had the macro fail.
Use AC_INCLUDES_DEFAULT.
* doc/autoconf.texi: Mention default includes. Explain stdio.h
must always be given.
* tests/atspecific.m4 (TEST_MACRO): Updated the list of
exceptions.
(AT_CHECK_DEFINES): New macro, to check the content of config.h.
* tests/semantics.m4: All the tests are updated to use
AT_CHECK_DEFINES.
Test AC_CHECK_SIZEOF, AC_CHECK_HEADERS, and AC_CHECK_FUNCS.
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ AC_CHECK_SIZEOF: Fix a bug, use standard default headers, and
+ test.
+
+ * acgeneral.m4 (AC_CHECK_SIZEOF): Don't over quote $1, some []
+ were left in the C code, and had the macro fail.
+ Use AC_INCLUDES_DEFAULT.
+ * doc/autoconf.texi: Mention default includes. Explain stdio.h
+ must always be given.
+
+ * tests/atspecific.m4 (TEST_MACRO): Updated the list of
+ exceptions.
+ (AT_CHECK_DEFINES): New macro, to check the content of config.h.
+ * tests/semantics.m4: All the tests are updated to use
+ AT_CHECK_DEFINES.
+ Test AC_CHECK_SIZEOF, AC_CHECK_HEADERS, and AC_CHECK_FUNCS.
+
2000-02-07 Akim Demaille <akim@epita.fr>
Give explicit diagnostics when an input file (for config headers;
AC_DEFUN(AC_CHECK_SIZEOF,
[AC_VAR_PUSHDEF([ac_Sizeof], [ac_cv_sizeof_$1])dnl
AC_CACHE_CHECK([size of $1], ac_Sizeof,
-[AC_TRY_RUN([#include <stdio.h>
-[$3]
-int
+[AC_TRY_RUN(AC_INCLUDES_DEFAULT([$3])
+[int
main ()
{
FILE *f = fopen ("conftestval", "w");
if (!f)
- exit (1);
- fprintf (f, "%d\n", sizeof ([$1]));
+ exit (1);
+ fprintf (f, "%d\n", sizeof ($1));
exit (0);
}],
AC_VAR_SET(ac_Sizeof, `cat conftestval`),
])
-dnl ### Checking for types
+## ------------------ ##
+## Checking for types ##
+## ------------------ ##
# AC_CHECK_TYPE_INTERNAL(TYPE,
@c FIXME: What the heck is this macro doing here? Move it out of
@c the way, in its proper section!!!
+@c FIXME: Explain once for all how the CPP names are built, not everywhere.
@defmac AC_CHECK_SIZEOF (@var{type}, @ovar{cross-size}, @ovar{includes})
@maindex CHECK_SIZEOF
Define @code{SIZEOF_@var{uctype}} to be the size in bytes of the C (or
-C++) builtin type @var{type}, e.g. @samp{int} or @samp{char *}. If
-@samp{type} is unknown to the compiler, it gets a size of 0. @var{uctype}
-is @var{type}, with lowercase converted to uppercase, spaces changed to
-underscores, and asterisks changed to @samp{P}. If cross-compiling, the
-value @var{cross-size} is used if given, otherwise @code{configure}
-exits with an error message.
+C++) type @var{type} (e.g. @samp{int}, @samp{char *} etc.). If
+@samp{type} is unknown, it gets a size of 0. If no @var{includes} are
+provided, the default headers are used (FIXME: point to the right
+node). If you provide default header, make sure to include
+@file{stdio.h} which is required for this macro to run.
+
+@var{uctype} is @var{type}, with lowercase converted to uppercase,
+spaces changed to underscores, and asterisks changed to @samp{P}. If
+cross-compiling, the value @var{cross-size} is used if given, otherwise
+@code{configure} exits with an error message.
For example, the call
@example
@c FIXME: What the heck is this macro doing here? Move it out of
@c the way, in its proper section!!!
+@c FIXME: Explain once for all how the CPP names are built, not everywhere.
@defmac AC_CHECK_SIZEOF (@var{type}, @ovar{cross-size}, @ovar{includes})
@maindex CHECK_SIZEOF
Define @code{SIZEOF_@var{uctype}} to be the size in bytes of the C (or
-C++) builtin type @var{type}, e.g. @samp{int} or @samp{char *}. If
-@samp{type} is unknown to the compiler, it gets a size of 0. @var{uctype}
-is @var{type}, with lowercase converted to uppercase, spaces changed to
-underscores, and asterisks changed to @samp{P}. If cross-compiling, the
-value @var{cross-size} is used if given, otherwise @code{configure}
-exits with an error message.
+C++) type @var{type} (e.g. @samp{int}, @samp{char *} etc.). If
+@samp{type} is unknown, it gets a size of 0. If no @var{includes} are
+provided, the default headers are used (FIXME: point to the right
+node). If you provide default header, make sure to include
+@file{stdio.h} which is required for this macro to run.
+
+@var{uctype} is @var{type}, with lowercase converted to uppercase,
+spaces changed to underscores, and asterisks changed to @samp{P}. If
+cross-compiling, the value @var{cross-size} is used if given, otherwise
+@code{configure} exits with an error message.
For example, the call
@example
AC_DEFUN(AC_CHECK_SIZEOF,
[AC_VAR_PUSHDEF([ac_Sizeof], [ac_cv_sizeof_$1])dnl
AC_CACHE_CHECK([size of $1], ac_Sizeof,
-[AC_TRY_RUN([#include <stdio.h>
-[$3]
-int
+[AC_TRY_RUN(AC_INCLUDES_DEFAULT([$3])
+[int
main ()
{
FILE *f = fopen ("conftestval", "w");
if (!f)
- exit (1);
- fprintf (f, "%d\n", sizeof ([$1]));
+ exit (1);
+ fprintf (f, "%d\n", sizeof ($1));
exit (0);
}],
AC_VAR_SET(ac_Sizeof, `cat conftestval`),
])
-dnl ### Checking for types
+## ------------------ ##
+## Checking for types ##
+## ------------------ ##
# AC_CHECK_TYPE_INTERNAL(TYPE,
EOF
-dnl Check that AC_CHECK_MEMBERS performs the correct actions:
+
+dnl AC_CHECK_DECLS
+dnl --------------
+dnl Check that it performs the correct actions:
+dnl Must define NEED_NO_DECL, but not NEED_YES_DECL.
+AT_TEST_MACRO(AC_CHECK_DECLS,
+[AC_CHECK_DECLS((yes, no),,,
+ [int yes = 1;])],
+[AT_CHECK_DEFINES(
+[#define NEED_NO_DECL 1
+/* #undef NEED_YES_DECL */
+])])
+
+
+dnl AC_CHECK_FUNCS
+dnl --------------
+dnl Check that it performs the correct actions:
+dnl Must define HAVE_EXIT, but not HAVE_AUTOCONF_TIXE
+AT_TEST_MACRO(AC_CHECK_FUNCS,
+[AC_CHECK_FUNCS(exit autoconf_tixe)],
+[AT_CHECK_DEFINES(
+[/* #undef HAVE_AUTOCONF_TIXE */
+#define HAVE_EXIT 1
+])])
+
+
+
+dnl AC_CHECK_HEADERS
+dnl ----------------
+dnl Check that it performs the correct actions:
+dnl Must define HAVE_STDIO_H, but not HAVE_AUTOCONF_IO_H.
+AT_TEST_MACRO(AC_CHECK_HEADERS,
+[AC_CHECK_HEADERS(stdio.h autoconf_io.h)],
+[AT_CHECK_DEFINES(
+[/* #undef HAVE_AUTOCONF_IO_H */
+#define HAVE_STDIO_H 1
+])])
+
+
+
+dnl AC_CHECK_MEMBERS
+dnl ----------------
+dnl Check that it performs the correct actions.
dnl Must define HAVE_STRUCT_YES_YES, but not HAVE_STRUCT_YES_NO.
AT_TEST_MACRO(AC_CHECK_MEMBERS,
[AC_CHECK_MEMBERS((struct yes.yes, struct yes.no),,,
[struct yes { int yes ;} ;])],
-[AT_CHECK([grep HAVE_STRUCT_YES_YES config.h],,
- [#define HAVE_STRUCT_YES_YES 1
-])
-AT_CHECK([grep HAVE_STRUCT_YES_NO config.h],,
- [/* #undef HAVE_STRUCT_YES_NO */
+[AT_CHECK_DEFINES(
+[/* #undef HAVE_STRUCT_YES_NO */
+#define HAVE_STRUCT_YES_YES 1
])])
-dnl Check that AC_CHECK_TYPES performs the correct actions:
-dnl Must define HAVE_STRUCT_YES, but not HAVE_STRUCT_NO.
+
+dnl AC_CHECK_SIZEOF
+dnl --------------
+dnl Check that it performs the correct actions.
+dnl Must define HAVE_STRUCT_YES, HAVE_INT, but not HAVE_STRUCT_NO.
+dnl `int' and `struct yes' are both checked to test both the compiler
+dnl builtin types, and defined types.
AT_TEST_MACRO(AC_CHECK_TYPES,
-[AC_CHECK_TYPES((struct yes, struct no),,,
- [struct yes { int yes ;} ;])],
-[AT_CHECK([grep HAVE_STRUCT_YES config.h],,
- [#define HAVE_STRUCT_YES 1
-])
-AT_CHECK([grep HAVE_STRUCT_NO config.h],,
- [/* #undef HAVE_STRUCT_NO */
+[AC_CHECK_SIZEOF(char)
+AC_CHECK_SIZEOF(charchar,,
+[#include <stdio.h>
+typedef struct
+{
+ char a;
+ char b;
+} charchar;])],
+[AT_CHECK_DEFINES(
+[#define SIZEOF_CHAR 1
+#define SIZEOF_CHARCHAR 2
])])
-dnl Check that AC_CHECK_DECLS performs the correct actions:
-dnl Must define NEED_NO_DECL, but not NEED_YES_DECL.
-AT_TEST_MACRO(AC_CHECK_DECLS,
-[AC_CHECK_DECLS((yes, no),,,
- [int yes = 1;])],
-[AT_CHECK([grep NEED_YES_DECL config.h],,
- [/* #undef NEED_YES_DECL */
-])
-AT_CHECK([grep NEED_NO_DECL config.h],,
- [#define NEED_NO_DECL 1
+dnl AC_CHECK_TYPES
+dnl --------------
+dnl Check that it performs the correct actions.
+dnl Must define HAVE_STRUCT_YES, HAVE_INT, but not HAVE_STRUCT_NO.
+dnl `int' and `struct yes' are both checked to test both the compiler
+dnl builtin types, and defined types.
+AT_TEST_MACRO(AC_CHECK_TYPES,
+[AC_CHECK_TYPES((int, struct yes, struct no),,,
+ [struct yes { int yes ;} ;])],
+[AT_CHECK_DEFINES(
+[#define HAVE_INT 1
+/* #undef HAVE_STRUCT_NO */
+#define HAVE_STRUCT_YES 1
])])
EOF
AT_INCLUDE(macros.m4)
-dnl That miserable test comes from the old DejaGNU testsuite.
-TEST_MACRO([AC_CHECK_SIZEOF(long *)])
AT_TEST_MACRO(config.status under extreme conditions,
[AC_CONFIG_FILES(dummy)
[define]([AC_DEFUBST_VALUE], Big_Value)
+dnl The following 4 lines are a transfert from AT_DUMMY_VAR in Autotest
+dnl to AC_DUMMY_VAR in Autoconf.
[define]([AC_DUMMY_VAR],
changequote({{, }})dnl
[defn({{AT_DUMMY_VAR}})]dnl