1999-10-01 Akim Demaille <akim@epita.fr>

Moving most of the task of creating config.h.in from sh to m4.
	Getting rid of acconfig.h by supply a major new family of macros:
	AH_* which make it possible to insert arbitrary text into
	config.h.in.

	* autoheader.m4: Major rewrite: introduction of a set of macros
 	AH_ that produce code into config.h.in.  There are two sets of
 	macros: generic macros, or specialized, documented below.  The
 	basic idea is that an AC_FOO macro which needs an entry in
 	config.h.in should have a sibling AH_FOO which expands into that
 	entry.  In a near future, these macros will be moved next to their
	siblings.

	* autoheader.m4 (AH_VERBATIM, AH_DEFINE, AH_DEFINE, AH_NEED_DECLS,
 	AH_CHECK_SIZEOF, AH_CHECK_FUNCS, AH_CHECK_HEADERS,
 	AH_CHECK_HEADERS, AH_CHECK_LIB, AH_PROG_LEX, AH_FUNC_ALLOCA,
 	AH_C_CHAR_UNSIGNED, AH_AIX, AH_F77_WRAPPERS): New macros.

	* autoheader.m4 (End section): Bind AC_ macros to their
	AH_siblings.

	* autoheader.sh: Remove the sections in charge of SYMS, TYPES,
	FUNCS, HEADERS, LIBS and DECLS: autoheader.m4 is now in charge of
	these.

	* autoheader.sh (options): Added -d, --debug, which does not
	remove the temporary files.

	* autoheader.sh: Instead of redirecting stdout to the output
	stream, always output to a temporary file.  This allows to change
	slightly the consistency check: before autoheader would check that
	each non documented AC_DEFINE is templated in an acconfig.  Now it
	just checks whether the template is in the output file.

	* acconfig.h: Completely emptied, the remaining templates
	(_ALL_SOURCE, __CHAR_UNSIGNED__, F77_FUNC, F77_FUNC_,
 	HAVE_STRINGIZE, and STACK_DIRECTION) are now either associated to
 	their AC_DEFINE, or to one of the new AH_ macros.

	* acgeneral.m4: Reordering of the m4 macros which are not specific
 	to Autoconf.

	* acgeneral.m4 (AC_HAVE_LIB): Promoted from obsolete to hasbeen.

	* acgeneral.m4 (AC_TR_CPP): Fixed quoting problem, and missing ^
	in patsubst.
	(AC_TR_SH): Fixed quoting problem.
This commit is contained in:
Akim Demaille 1999-10-04 08:19:04 +00:00
parent 4341ba89a3
commit e92b805c22
8 changed files with 431 additions and 336 deletions

View File

@ -1,3 +1,53 @@
1999-10-01 Akim Demaille <akim@epita.fr>
Moving most of the task of creating config.h.in from sh to m4.
Getting rid of acconfig.h by supply a major new family of macros:
AH_* which make it possible to insert arbitrary text into
config.h.in.
* autoheader.m4: Major rewrite: introduction of a set of macros
AH_ that produce code into config.h.in. There are two sets of
macros: generic macros, or specialized, documented below. The
basic idea is that an AC_FOO macro which needs an entry in
config.h.in should have a sibling AH_FOO which expands into that
entry. In a near future, these macros will be moved next to their
siblings.
* autoheader.m4 (AH_VERBATIM, AH_DEFINE, AH_DEFINE, AH_NEED_DECLS,
AH_CHECK_SIZEOF, AH_CHECK_FUNCS, AH_CHECK_HEADERS,
AH_CHECK_HEADERS, AH_CHECK_LIB, AH_PROG_LEX, AH_FUNC_ALLOCA,
AH_C_CHAR_UNSIGNED, AH_AIX, AH_F77_WRAPPERS): New macros.
* autoheader.m4 (End section): Bind AC_ macros to their
AH_siblings.
* autoheader.sh: Remove the sections in charge of SYMS, TYPES,
FUNCS, HEADERS, LIBS and DECLS: autoheader.m4 is now in charge of
these.
* autoheader.sh (options): Added -d, --debug, which does not
remove the temporary files.
* autoheader.sh: Instead of redirecting stdout to the output
stream, always output to a temporary file. This allows to change
slightly the consistency check: before autoheader would check that
each non documented AC_DEFINE is templated in an acconfig. Now it
just checks whether the template is in the output file.
* acconfig.h: Completely emptied, the remaining templates
(_ALL_SOURCE, __CHAR_UNSIGNED__, F77_FUNC, F77_FUNC_,
HAVE_STRINGIZE, and STACK_DIRECTION) are now either associated to
their AC_DEFINE, or to one of the new AH_ macros.
* acgeneral.m4: Reordering of the m4 macros which are not specific
to Autoconf.
* acgeneral.m4 (AC_HAVE_LIB): Promoted from obsolete to hasbeen.
* acgeneral.m4 (AC_TR_CPP): Fixed quoting problem, and missing ^
in patsubst.
(AC_TR_SH): Fixed quoting problem.
1999-09-29 Akim Demaille <akim@epita.fr>
* acgeneral.m4 (AC_WRAP): Don't output an extra space after the

View File

@ -1,60 +0,0 @@
/* acconfig.h
This file is in the public domain.
Descriptive text for the C preprocessor macros that
the distributed Autoconf macros can define.
No software package will use all of them; autoheader copies the ones
your configure.in uses into your configuration header file templates.
The entries are in sort -df order: alphabetical, case insensitive,
ignoring punctuation (such as underscores). Although this order
can split up related entries, it makes it easier to check whether
a given entry is in the file.
Leave the following blank line there!! Autoheader needs it. */
/* Define if on AIX 3.
System headers sometimes define this.
We just want to avoid a redefinition error message. */
#ifndef _ALL_SOURCE
#undef _ALL_SOURCE
#endif
/* Define if type char is unsigned and you are not using gcc. */
#ifndef __CHAR_UNSIGNED__
#undef __CHAR_UNSIGNED__
#endif
/*
* Define to a macro that performs the appropriate name mangling on its
* argument to make the C identifier, which *does not* contain
* underscores, match the name mangling scheme of the Fortran 77
* compiler.
*/
#undef F77_FUNC
/*
* Define to a macro that performs the appropriate name mangling on its
* argument to make the C identifier, which *does* contain underscores,
* match the name mangling scheme of the Fortran 77 compiler.
*/
#undef F77_FUNC_
/* Define if you have the ANSI # stringizing operator in cpp. */
#undef HAVE_STRINGIZE
/* If using the C implementation of alloca, define if you know the
direction of stack growth for your system; otherwise it will be
automatically deduced at run-time.
STACK_DIRECTION > 0 => grows toward higher addresses
STACK_DIRECTION < 0 => grows toward lower addresses
STACK_DIRECTION = 0 => direction of growth unknown
*/
#undef STACK_DIRECTION
/* Leave that blank line there!! Autoheader needs it.
If you're adding to this file, keep in mind:
The entries are in sort -df order: alphabetical, case insensitive,
ignoring punctuation (such as underscores). */

View File

@ -73,16 +73,21 @@ m4_prefix([include])
m4_prefix([shift])
m4_prefix([format])
dnl ifset(COND, IF-TRUE[, IF-FALSE])
dnl --------------------------------
dnl If COND is not the empty string, expand IF-TRUE, otherwise IF-FALSE.
dnl Comparable to ifdef.
define([ifset], [ifelse([$1],,[$3],[$2])])
dnl m4_default(EXP1, EXP2)
dnl ----------------------
dnl Returns EXP1 if non empty, otherwise EXP2.
define([m4_default], [ifset([$1], [$1], [$2])])
dnl ------------------------------------------------------------
dnl Text processing in m4.
dnl ------------------------------------------------------------
dnl m4_quote(STRING)
dnl ----------------
dnl Return STRING quoted.
dnl
dnl It is important to realize the difference between `quote(exp)' and
dnl `[exp]': in the first case you obtain the quoted *result* of the
dnl expansion of EXP, while in the latter you just obtain the string
dnl `exp'.
define([m4_quote], [[$@]])
dnl m4_split(STRING)
dnl ----------------
@ -156,9 +161,26 @@ define([m4_strip],
[ \(.\)$], [\1])])
dnl ### Implementing m4 loops
dnl ------------------------------------------------------------
dnl Some additional m4 structural control.
dnl ------------------------------------------------------------
dnl ifset(COND, IF-TRUE[, IF-FALSE])
dnl --------------------------------
dnl If COND is not the empty string, expand IF-TRUE, otherwise IF-FALSE.
dnl Comparable to ifdef.
define([ifset], [ifelse([$1],,[$3],[$2])])
dnl m4_default(EXP1, EXP2)
dnl ----------------------
dnl Returns EXP1 if non empty, otherwise EXP2.
define([m4_default], [ifset([$1], [$1], [$2])])
dnl ### Implementing m4 loops
dnl Implementing loops (`foreach' loops) in m4 is much more tricky than it
dnl may seem. Actually, the example of a `foreach' loop in the m4
dnl documentation is wrong: it does not quote the arguments properly,
@ -207,6 +229,7 @@ dnl => echo c)
dnl
dnl Bingo!
dnl M4_FOREACH(VARIABLE, LIST, EXPRESSION)
dnl --------------------------------------
dnl Expand EXPRESSION assigning to VARIABLE each value of the LIST
@ -226,8 +249,45 @@ define(_m4_car, [[$1]])
define(_m4_foreach,
[ifelse($2, [()], ,
[define([$1], [_m4_car$2])$3[]_m4_foreach([$1],
[(m4_shift$2)],
[$3])])])
[(m4_shift$2)],
[$3])])])
dnl m4_list_append(LIST, ELEMENT)
dnl -----------------------------
dnl Insert ELEMENT at the end of LIST.
dnl
dnl This macro is picky on its input, especially for the empty list: it
dnl must be either the empty string, or exactly `()' (no spaces allowed).
dnl This macro is actually purely textual: it basically replaces the
dnl closing paren of LIST with `, ELEMENT)'. The hair is to preserve
dnl quotation: this macro is robust to active symbols.
dnl
dnl | define(active, ACTIVE)
dnl | m4_list_append(m4_list_append(m4_list_append((), [1 active]),
dnl | [2 active]),
dnl | [3 active])end
dnl =>(1 active, 2 active, 3 active)end
dnl
dnl The combination of this macro and m4_quote is extremely useful to
dnl build and store lists:
dnl
dnl | define(active, ACTIVE)
dnl | define(list, ())
dnl | define([list], m4_quote(m4_list_append(list, [1 active])))
dnl | define([list], m4_quote(m4_list_append(list, [2 active])))
dnl | define([list], m4_quote(m4_list_append(list, [3 active])))
dnl | list
dnl =>(1 active, 2 active, 3 active)
dnl
define([m4_list_append],
[ifelse([$1], [], [([$2])],
[$1], [()], [([$2])],
[patsubst([[$1]], [^..\(.*\)..$], [[(\1, $2)]])])])
define([m4_list_add],
[define([$1], m4_quote(m4_list_append($1, [$2])))])
dnl ### Defining macros
@ -491,10 +551,10 @@ dnl of `$ac_tr_cpp' if you change this.
define(AC_TR_CPP,
[AC_VAR_IF_INDIR([$1],
[`echo "$1" | $ac_tr_cpp`],
[patsubst(translit([$1],
[patsubst(translit([[$1]],
[*abcdefghijklmnopqrstuvwxyz],
[PABCDEFGHIJKLMNOPQRSTUVWXYZ]),
[A-Z0-9_], [_])])])
[[^A-Z0-9_]], [_])])])
dnl AC_TR_SH(EXPRESSION)
@ -507,7 +567,7 @@ dnl Make sure to update the definition of `$ac_tr_cpp' if you change this.
define(AC_TR_SH,
[AC_VAR_IF_INDIR([$1],
[`echo "$1" | $ac_tr_sh`],
[patsubst(translit([$1], [*+], [pp]),
[patsubst(translit([[$1]], [*+], [pp]),
[[^a-zA-Z0-9_]], [_])])])
@ -1740,6 +1800,8 @@ define(AC_DEFINE,
EOF
])
dnl AC_DEFINE_UNQUOTED(VARIABLE [, VALUE[, DESCRIPTION]])
dnl -----------------------------------------------------
dnl Similar, but perform shell substitutions $ ` \ once on VALUE.
@ -1750,6 +1812,7 @@ EOF
])
dnl ### Setting output variables
@ -2236,6 +2299,10 @@ dnl Use a cache variable name containing both the library and function name,
dnl because the test really is for library $1 defining function $2, not
dnl just for library $1. Separate tests with the same $1 and different $2s
dnl may have different results.
dnl
dnl FIXME: This macro is extremely suspicious. It DEFINE unconditionnally,
dnl whatever the FUNCTION, in addition to not being a *S macro. Note
dnl that the cache does depend upon the function with look for.
AC_DEFUN(AC_CHECK_LIB,
[AC_VAR_PUSHDEF([ac_Lib], [ac_cv_lib_$1_$2])dnl
AC_CACHE_CHECK([for $2 in -l$1], ac_Lib,
@ -2265,36 +2332,12 @@ AC_SHELL_IFELSE(test AC_VAR_GET(ac_Lib) = yes,
AC_VAR_POPDEF([ac_Lib])dnl
])dnl AC_CHECK_LIB
dnl AC_HAVE_LIBRARY(LIBRARY, [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND
dnl [, OTHER-LIBRARIES]]])
dnl FIXME: Remove
AC_DEFUN(AC_HAVE_LIBRARY,
[AC_OBSOLETE([$0], [; instead use AC_CHECK_LIB])dnl
changequote(<<, >>)dnl
define(<<AC_LIB_NAME>>, dnl
patsubst(patsubst($1, <<lib\([^\.]*\)\.a>>, <<\1>>), <<-l>>, <<>>))dnl
define(<<AC_CV_NAME>>, ac_cv_lib_<<>>AC_LIB_NAME)dnl
changequote([, ])dnl
AC_MSG_CHECKING([for -l[]AC_LIB_NAME])
AC_CACHE_VAL(AC_CV_NAME,
[ac_save_LIBS="$LIBS"
LIBS="-l[]AC_LIB_NAME[] $4 $LIBS"
AC_TRY_LINK( , [main()], AC_CV_NAME=yes, AC_CV_NAME=no)
LIBS="$ac_save_LIBS"
])dnl
AC_MSG_RESULT($AC_CV_NAME)
if test "$AC_CV_NAME" = yes; then
ifelse([$2], ,
[AC_DEFINE([HAVE_LIB]AC_TR_CPP(AC_LIB_NAME))
LIBS="-l[]AC_LIB_NAME[] $LIBS"
], [$2])
ifelse([$3], , , [else
$3
])dnl
fi
undefine([AC_LIB_NAME])dnl
undefine([AC_CV_NAME])dnl
])
[AC_HASBEEN([$0], [; instead use AC_CHECK_LIB])])
dnl ### Examining declarations
@ -2612,14 +2655,7 @@ $2],
[$4])])
])dnl AC_NEED_DECLS
dnl This is the pure sh version of the macro above.
dnl [for ac_sym in [$1]
dnl do
dnl AC_NEED_DECL($ac_sym,
dnl [$2],
dnl [AC_DEFINE_UNQUOTED(AC_TR_CPP(${ac_sym}_DECLARED)) $3],
dnl [$4])dnl
dnl done
dnl ### Checking for library functions
@ -2670,6 +2706,7 @@ AC_CHECK_FUNC($ac_func,
done
])
dnl AC_REPLACE_FUNCS(FUNCTION...)
AC_DEFUN(AC_REPLACE_FUNCS,
[AC_CHECK_FUNCS([$1], , [LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}"])

View File

@ -651,7 +651,7 @@ if test $ac_cv_prog_lex_yytext_pointer = yes; then
[Define if `lex' declares `yytext' as a `char *' by default,
not a `char[]'.])
fi
])
])dnl AC_DECL_YYTEXT
AC_DEFUN(AC_PROG_INSTALL,
[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
@ -1582,7 +1582,7 @@ main ()
AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction)
fi
AC_SUBST(ALLOCA)dnl
])
])dnl AC_FUNC_ALLOCA
AC_DEFUN(AC_FUNC_GETLOADAVG,
[ac_have_func=no # yes means we've found a way to get the load average.
@ -2112,7 +2112,7 @@ fi])
if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then
AC_DEFINE(__CHAR_UNSIGNED__)
fi
])
])dnl AC_C_CHAR_UNSIGNED
AC_DEFUN(AC_C_LONG_DOUBLE,
[AC_CACHE_CHECK(for long double, ac_cv_c_long_double,
@ -2271,8 +2271,12 @@ if test $ac_cv_c_volatile = no; then
fi
])
AC_DEFUN(AC_C_STRINGIZE, [
AC_REQUIRE([AC_PROG_CPP])
dnl AC_C_STRINGIZE
dnl --------------
dnl Checks if `#' can be used to glue strings together at the CPP level.
dnl Defines HAVE_STRINGIZE if positive.
AC_DEFUN(AC_C_STRINGIZE,
[AC_REQUIRE([AC_PROG_CPP])
AC_MSG_CHECKING([for preprocessor stringizing operator])
AC_CACHE_VAL(ac_cv_c_stringize,
AC_EGREP_CPP([#teststring],[
@ -2281,7 +2285,8 @@ AC_EGREP_CPP([#teststring],[
char *s = x(teststring);
], ac_cv_c_stringize=no, ac_cv_c_stringize=yes))
if test "${ac_cv_c_stringize}" = yes; then
AC_DEFINE(HAVE_STRINGIZE)
AC_DEFINE(HAVE_STRINGIZE, 1,
[Define if you have the ANSI # stringizing operator in cpp.])
fi
AC_MSG_RESULT([${ac_cv_c_stringize}])
])dnl
@ -3157,7 +3162,7 @@ AC_EGREP_CPP(yes,
[AC_MSG_RESULT(yes)
AC_DEFINE(_ALL_SOURCE)],
AC_MSG_RESULT(no))
])
])dnl AC_AIX
AC_DEFUN(AC_MINIX,
[AC_BEFORE([$0], [AC_TRY_COMPILE])dnl
@ -3173,7 +3178,7 @@ if test "$MINIX" = yes; then
AC_DEFINE(_MINIX, 1,
[Define if on MINIX.])
fi
])
])dnl AC_MINIX
AC_DEFUN(AC_ISC_POSIX,
[AC_REQUIRE([AC_PROG_CC])dnl
@ -3197,7 +3202,7 @@ else
AC_MSG_RESULT(no)
ISC=
fi
])
])dnl AC_ISC_POSIX
AC_DEFUN(AC_XENIX_DIR,
[AC_OBSOLETE([$0], [; instead use AC_HEADER_DIRENT])dnl
@ -3213,7 +3218,7 @@ if test "$XENIX" = yes; then
test $ac_header_dirent = dirent.h && LIBS="-ldir $LIBS"
LIBS="$LIBS -lx"
fi
])
])dnl AC_XENIX_DIR
AC_DEFUN(AC_DYNIX_SEQ,
[AC_OBSOLETE([$0], [; instead use AC_FUNC_GETMNTENT])dnl

View File

@ -23,6 +23,12 @@ include(acgeneral.m4)dnl
m4_include(acspecific.m4)dnl
m4_include(acoldnames.m4)dnl
dnl Autoheader is not the right program to complain about cross-compiling.
define([AC_TRY_RUN], [
$2
$3
$4])
dnl These are alternate definitions of some macros, which produce
dnl strings in the output marked with "@@@" so we can easily extract
dnl the information we want. The `#' at the end of the first line of
@ -30,94 +36,152 @@ dnl each definition seems to be necessary to prevent m4 from eating
dnl the newline, which makes the @@@ not always be at the beginning of
dnl a line.
define([AC_CHECK_FUNCS], [#
@@@funcs="$funcs $1"@@@
ifelse([$2], , , [
# If it was found, we do:
dnl AH_DEFINE(VARIABLE [, VALUE[, DESCRIPTION]])
dnl --------------------------------------------
dnl When running autoheader, this macro replaces AC_DEFINE and
dnl AC_DEFINE_UNQUOTED.
dnl
dnl We remember the symbols we already defined to avoid to define
dnl them twice. In the future we may want to use another program
dnl than sh to issue the templates. For instance with AWK, we
dnl may fill an associative array (key is $1, value is the template).
dnl This garantees that there is a unique prototype issued, and also
dnl that it will be sorted!
define([AH_DEFINE],
[ifset([$3],
[AH_TEMPLATE([$1], [$3])],
[#
dnl Ignore CPP macro arguments.
@@@syms="$syms patsubst($1, [(.*$])"@@@
])])
dnl AC_VERBATIM
define([AC_VERBATIM], [])
dnl AH_TEMPLATE(KEY, DESCRIPTION)
dnl Issue an autoheader template for KEY, i.e., a comment composed
dnl of DESCRIPTION (properly wrapped), and then #undef KEY.
define([AH_TEMPLATE],
[AH_VERBATIM([$1],
AC_WRAP(_AC_SH_QUOTE([[$2 */]]), [ ], [/* ])[
#undef $1])])
dnl AH_VERBATIM(KEY, TEMPLATE)
dnl --------------------------
dnl If KEY is direct (i.e., no indirection such as in KEY=$my_func which may
dnl occur if there is AC_CHECK_FUNCS($my_func)), issue an autoheader TEMPLATE
dnl associated to the KEY. Otherwise, do nothing.
dnl TEMPLATE is output as is, with no formating.
define([AH_VERBATIM],
[AC_VAR_IF_INDIR([$1],,
[#
@@@
ac_verbatim_$1="\
[$2]"
@@@
])])
define([AH_CHECK_LIB],
[AH_TEMPLATE(AC_TR_CPP(HAVE_$1),
[Define if you have the `]$1[' library (-l]$1[).])
# Success
$3
# Failure
$4])
define([AH_CHECK_HEADERS],
[AC_FOREACH([AC_Header], [$1],
[AH_TEMPLATE(AC_TR_CPP(HAVE_[]AC_Header),
[Define if you have the <]AC_Header[> header file.])
# Success
$2
# If it was not found, we do:
$3
])
])
# Failure
$3])])
define([AC_CHECK_HEADERS], [#
@@@headers="$headers $1"@@@
ifelse([$2], , , [
# If it was found, we do:
define([AH_NEED_DECLS],
[AC_FOREACH([AC_Symbol], [$1],
[AH_TEMPLATE(AC_TR_CPP(NEED_DECL_[]AC_Symbol),
[Define if you need the declaration of `]AC_Symbol['.])
# Success
$2
# If it was not found, we do:
$3
])
])
# Failure
$3])])
define([AC_CHECK_HEADER], [AC_CHECK_HEADERS($1,$2,$3)])
define([AC_CHECK_HEADERS_DIRENT], [#
@@@headers="$headers $1"@@@
])
define([AC_CHECK_LIB], [#
ifelse([$3], , [
@@@libs="$libs $1"@@@
], [
# If it was found, we do:
$3
# If it was not found, we do:
$4
])
])
define([AC_NEED_DECLS], [#
ifelse([$2], , [
@@@decls="$decls $1"@@@
], [
# If it was found, we do:
define([AH_CHECK_FUNCS],
[AC_FOREACH([AC_Func], [$1],
[AH_TEMPLATE(AC_TR_CPP(HAVE_[]AC_Func),
[Define if you have the `]AC_Func[' function.])
# Success
$2
# If it was not found, we do:
$3
])
])
# Failure
$3])])
define([AC_HAVE_LIBRARY], [#
changequote(<<, >>)dnl
define(<<AC_LIB_NAME>>, dnl
patsubst(patsubst($1, <<lib\([^\.]*\)\.a>>, <<\1>>), <<-l>>, <<>>))dnl
changequote([, ])dnl
ifelse([$2], , [
@@@libs="$libs AC_LIB_NAME"@@@
], [
# If it was found, we do:
$2
# If it was not found, we do:
$3
])
])
define([AC_CHECK_SIZEOF], [#
@@@types="$types,$1"@@@
])
define([AH_CHECK_SIZEOF],
[AH_TEMPLATE(AC_TR_CPP(SIZEOF_$1),
[The number of bytes in a `]$1['.])])
define([AH_PROG_LEX],
[AH_CHECK_LIB(fl)
AH_CHECK_LIB(l)])
define([AC_FUNC_ALLOCA],
[AH_VERBATIM([STACK_DIRECTION],
[/* If using the C implementation of alloca, define if you know the
direction of stack growth for your system; otherwise it will be
automatically deduced at run-time.
STACK_DIRECTION > 0 => grows toward higher addresses
STACK_DIRECTION < 0 => grows toward lower addresses
STACK_DIRECTION = 0 => direction of growth unknown */
#undef STACK_DIRECTION
])])
define([AC_C_CHAR_UNSIGNED],
[AH_VERBATIM([__CHAR_UNSIGNED__],
[/* Define if type `char' is unsigned and you are not using gcc. */
#ifndef __CHAR_UNSIGNED__
# undef __CHAR_UNSIGNED__
#endif])])
define([AH_AIX],
[AH_VERBATIM([_ALL_SOURCE],
[/* Define if on AIX 3.
System headers sometimes define this.
We just want to avoid a redefinition error message. */
#ifndef _ALL_SOURCE
# undef _ALL_SOURCE
#endif])])
define([AH_F77_WRAPPERS],
[AH_TEMPLATE([F77_FUNC],
[Define to a macro that performs the appropriate name
mangling on its argument to make the C identifier, which
*does not* contain underscores, match the name mangling
scheme of the Fortran 77 compiler.])
AH_TEMPLATE([F77_FUNC],
[Define to a macro that performs the appropriate name
mangling on its argument to make the C identifier, which
*does* contain underscores, match the name mangling
scheme of the Fortran 77 compiler.])])
define([AC_CONFIG_HEADER], [#
define([AC_CONFIG_H], patsubst($1, [ .*$], []))dnl
@@@config_h=AC_CONFIG_H@@@
])
define([AC_DEFINE], [#
ifelse([$3],,[#
dnl Ignore CPP macro arguments.
@@@syms="$syms patsubst($1, [(.*$])"@@@
], [#
@@@verbatim="$verbatim
dnl Quoted twice because there are two applications.
AC_WRAP(_AC_SH_QUOTE([[$3 */]]), [ ], [/* ])
#undef $1
"@@@
])])
define([AC_DEFINE_UNQUOTED], [AC_DEFINE($@)])
dnl Autoheader is not the right program to complain about cross-compiling
define([AC_TRY_RUN], [
$2
$3
$4])
define([AC_VERBATIM], [AH_VERBATIM($@)])
define([AC_DEFINE], [AH_DEFINE($@)])
define([AC_DEFINE_UNQUOTED], [AH_DEFINE($@)])
define([AC_NEED_DECLS], [AH_NEED_DECLS($@)])
define([AC_CHECK_SIZEOF], [AH_CHECK_SIZEOF($@)])
define([AC_CHECK_FUNCS], [AH_CHECK_FUNCS($@)])
define([AC_CHECK_HEADERS], [AH_CHECK_HEADERS($@)])
define([AC_CHECK_HEADERS_DIRENT], [AH_CHECK_HEADERS($@)])
define([AC_CHECK_LIB], [AH_CHECK_LIB($@)])
define([AC_PROG_LEX], [AH_PROG_LEX($@)])
define([AC_FUNC_ALLOCA], [AH_FUNC_ALLOCA($@)])
define([AC_C_CHAR_UNSIGNED], [AH_C_CHAR_UNSIGNED($@)])
define([AC_AIX], [AH_AIX($@)])
define([AC_F77_WRAPPERS], [AH_F77_WRAPPERS($@)])

View File

@ -69,6 +69,8 @@ ac_LF_and_DOT="`echo; echo .`"
localdir=.
show_version=no
debug=false
# Basename for temporary files.
ah_base=autoh$$
while test $# -gt 0 ; do
case "${1}" in
@ -112,8 +114,8 @@ if test $show_version = yes; then
exit 0
fi
TEMPLATES="${AC_MACRODIR}/acconfig.h"
test -r $localdir/acconfig.h && TEMPLATES="${TEMPLATES} $localdir/acconfig.h"
acconfigs="${AC_MACRODIR}/acconfig.h"
test -r $localdir/acconfig.h && acconfigs="${acconfigs} $localdir/acconfig.h"
case $# in
0) infile=configure.in ;;
@ -144,9 +146,9 @@ case `$M4 --help < /dev/null 2>&1` in
*) echo Autoconf requires GNU m4 1.1 or later >&2; exit 1 ;;
esac
# Extract assignments of SYMS, TYPES, FUNCS, HEADERS, LIBS and DECLS
# from the modified autoconf processing of the input file. The sed
# hair is necessary to win for multi-line macro invocations.
# Extract assignments of `ah_verbatim_SYMBOL' and `syms' from the
# modified autoconf processing of the input file. The sed hair is
# necessary to win for multi-line macro invocations.
$M4 -I$AC_MACRODIR $use_localdir $r autoheader.m4$f $infile |
sed -n -e '
: again
@ -156,9 +158,9 @@ $M4 -I$AC_MACRODIR $use_localdir $r autoheader.m4$f $infile |
n
s/^/@@@/
b again
}' >autoheader.decls
. ./autoheader.decls
$debug || rm ./autoheader.decls
}' >$ah_base.decls
. ./$ah_base.decls
$debug || rm ./$ah_base.decls
# Make SYMS newline-separated rather than blank-separated, and remove dups.
# Start each symbol with a blank (to match the blank after "#undef")
@ -174,22 +176,19 @@ undefined) echo "error: AC_CONFIG_HEADER not found in $infile" >&2; exit 1 ;;
*) config_h_in="${config_h}.in" ;;
esac
if test $# -eq 0; then
tmpout=autoh$$
trap "rm -f $tmpout; exit 1" 1 2 15
exec > $tmpout
fi
tmpout=$ah_base.out
$debug || trap "rm -f $ah_base*; exit 1" 1 2 15
# Don't write "do not edit" -- it will get copied into the
# config.h, which it's ok to edit.
cat <<EOF
/* ${config_h_in}. Generated automatically from $infile by autoheader. */
cat <<EOF >$tmpout
/* ${config_h_in}. Generated automatically from $infile by aheader. */
EOF
test -r ${config_h}.top && cat ${config_h}.top
test -r ${config_h}.top && cat ${config_h}.top >>$tmpout
test -r $localdir/acconfig.h &&
grep @TOP@ $localdir/acconfig.h >/dev/null &&
sed '/@TOP@/,$d' $localdir/acconfig.h
sed '/@TOP@/,$d' $localdir/acconfig.h >>$tmpout
# This puts each template paragraph on its own line, separated by @s.
if test -n "$syms"; then
@ -198,7 +197,7 @@ if test -n "$syms"; then
# be removed.
# Undocumented useless feature: stuff outside of @TOP@ and @BOTTOM@
# is ignored in the systemwide acconfig.h too.
for t in $TEMPLATES; do
for t in $acconfigs; do
sedscript=""
grep @TOP@ $t >/dev/null && sedscript="1,/@TOP@/d;"
grep @BOTTOM@ $t >/dev/null && sedscript="$sedscript /@BOTTOM@/,\$d;"
@ -222,97 +221,55 @@ if test -n "$syms"; then
# Some fgrep's have limits on the number of lines that can be in the
# pattern on the command line, so use a temporary file containing the
# pattern.
(fgrep_tmp=${TMPDIR-/tmp}/autoh$$
(fgrep_tmp=$ah_base.fgrep
trap "rm -f $fgrep_tmp; exit 1" 1 2 15
cat > $fgrep_tmp <<EOF
$syms
EOF
fgrep -f $fgrep_tmp
rm -f $fgrep_tmp) |
tr @. "$ac_LF_and_DOT"
tr @. "$ac_LF_and_DOT" >>$tmpout
fi
echo "$types" | tr ,. "$ac_LF_and_DOT" | sort | uniq | while read ctype; do
test -z "$ctype" && continue
sym="`echo "${ctype}" | tr 'abcdefghijklmnopqrstuvwxyz *' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_P'`"
echo "
/* The number of bytes in a \`${ctype}'. */
#undef SIZEOF_${sym}"
for verb in `(set) 2>&1 | sed -n -e '/^ac_verbatim/s/^\([^=]*\)=.*$/\1/p'`; do
echo >>$tmpout
eval echo >>$tmpout '"${'$verb'}"'
done
# /bin/sh on the Alpha gives `for' a random value if $funcs is empty.
if test -n "$funcs"; then
for func in `for x in $funcs; do echo $x; done | sort | uniq`; do
sym="`echo ${func} | sed 's/[^a-zA-Z0-9_]/_/g' | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`"
echo "
/* Define if you have the \`${func}' function. */
#undef HAVE_${sym}"
done
fi
if test -n "$headers"; then
for header in `for x in $headers; do echo $x; done | sort | uniq`; do
sym="`echo ${header} | sed 's/[^a-zA-Z0-9_]/_/g' | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`"
echo "
/* Define if you have the <${header}> header file. */
#undef HAVE_${sym}"
done
fi
if test -n "$libs"; then
for lib in `for x in $libs; do echo $x; done | sort | uniq`; do
sym="`echo ${lib} | sed 's/[^a-zA-Z0-9_]/_/g' | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`"
echo "
/* Define if you have the \`${lib}' library (-l${lib}). */
#undef HAVE_LIB${sym}"
done
fi
if test -n "$decls"; then
for decl in `for x in $decls; do echo $x; done | sort | uniq`; do
sym="`echo ${decl} | sed 's/[^a-zA-Z0-9_]/_/g' | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`"
echo "
/* Define if you need the declaration of \`${decl}'. */
#undef NEED_DECL_${sym}"
done
fi
if test -n "$verbatim"; then
echo "$verbatim"
fi
# Handle the case where @BOTTOM@ is the first line of acconfig.h.
test -r $localdir/acconfig.h &&
grep @BOTTOM@ $localdir/acconfig.h >/dev/null &&
sed -n '/@BOTTOM@/,${/@BOTTOM@/!p;}' $localdir/acconfig.h
test -f ${config_h}.bot && cat ${config_h}.bot
sed -n '/@BOTTOM@/,${/@BOTTOM@/!p;}' $localdir/acconfig.h >>$tmpout
test -f ${config_h}.bot && cat ${config_h}.bot >>$tmpout
# Check that all the symbols have a template
status=0
if test -n "$syms"; then
for sym in $syms; do
if grep "^#[a-z]*[ ][ ]*$sym[ ]*$" $TEMPLATES >/dev/null; then
if grep "^#[a-z]*[ ][ ]*$sym[ ]*$" $tmpout >/dev/null; then
: # All is well.
else
echo "$0: Symbol \`${sym}' is not covered by $TEMPLATES" >&2
echo "$0: No template for symbol \`${sym}'" >&2
status=1
fi
done
fi
if test $# -eq 0; then
# Force $tmpout to close to avoid Windows file sharing conflicts.
exec 1>&2
if test $status -eq 0; then
# If the run was successful, output the result.
if test $status -eq 0; then
if test $# -eq 0; then
# Output is a file
if test -f ${config_h_in} && cmp -s $tmpout ${config_h_in}; then
rm -f $tmpout # File didn't change, so don't update its mod time.
: # File didn't change, so don't update its mod time.
else
mv -f $tmpout ${config_h_in}
fi
else
rm -f $tmpout
# Output is stdout
cat $tmpout
fi
fi
rm -f $tmpout
exit $status

View File

@ -73,16 +73,21 @@ m4_prefix([include])
m4_prefix([shift])
m4_prefix([format])
dnl ifset(COND, IF-TRUE[, IF-FALSE])
dnl --------------------------------
dnl If COND is not the empty string, expand IF-TRUE, otherwise IF-FALSE.
dnl Comparable to ifdef.
define([ifset], [ifelse([$1],,[$3],[$2])])
dnl m4_default(EXP1, EXP2)
dnl ----------------------
dnl Returns EXP1 if non empty, otherwise EXP2.
define([m4_default], [ifset([$1], [$1], [$2])])
dnl ------------------------------------------------------------
dnl Text processing in m4.
dnl ------------------------------------------------------------
dnl m4_quote(STRING)
dnl ----------------
dnl Return STRING quoted.
dnl
dnl It is important to realize the difference between `quote(exp)' and
dnl `[exp]': in the first case you obtain the quoted *result* of the
dnl expansion of EXP, while in the latter you just obtain the string
dnl `exp'.
define([m4_quote], [[$@]])
dnl m4_split(STRING)
dnl ----------------
@ -156,9 +161,26 @@ define([m4_strip],
[ \(.\)$], [\1])])
dnl ### Implementing m4 loops
dnl ------------------------------------------------------------
dnl Some additional m4 structural control.
dnl ------------------------------------------------------------
dnl ifset(COND, IF-TRUE[, IF-FALSE])
dnl --------------------------------
dnl If COND is not the empty string, expand IF-TRUE, otherwise IF-FALSE.
dnl Comparable to ifdef.
define([ifset], [ifelse([$1],,[$3],[$2])])
dnl m4_default(EXP1, EXP2)
dnl ----------------------
dnl Returns EXP1 if non empty, otherwise EXP2.
define([m4_default], [ifset([$1], [$1], [$2])])
dnl ### Implementing m4 loops
dnl Implementing loops (`foreach' loops) in m4 is much more tricky than it
dnl may seem. Actually, the example of a `foreach' loop in the m4
dnl documentation is wrong: it does not quote the arguments properly,
@ -207,6 +229,7 @@ dnl => echo c)
dnl
dnl Bingo!
dnl M4_FOREACH(VARIABLE, LIST, EXPRESSION)
dnl --------------------------------------
dnl Expand EXPRESSION assigning to VARIABLE each value of the LIST
@ -226,8 +249,45 @@ define(_m4_car, [[$1]])
define(_m4_foreach,
[ifelse($2, [()], ,
[define([$1], [_m4_car$2])$3[]_m4_foreach([$1],
[(m4_shift$2)],
[$3])])])
[(m4_shift$2)],
[$3])])])
dnl m4_list_append(LIST, ELEMENT)
dnl -----------------------------
dnl Insert ELEMENT at the end of LIST.
dnl
dnl This macro is picky on its input, especially for the empty list: it
dnl must be either the empty string, or exactly `()' (no spaces allowed).
dnl This macro is actually purely textual: it basically replaces the
dnl closing paren of LIST with `, ELEMENT)'. The hair is to preserve
dnl quotation: this macro is robust to active symbols.
dnl
dnl | define(active, ACTIVE)
dnl | m4_list_append(m4_list_append(m4_list_append((), [1 active]),
dnl | [2 active]),
dnl | [3 active])end
dnl =>(1 active, 2 active, 3 active)end
dnl
dnl The combination of this macro and m4_quote is extremely useful to
dnl build and store lists:
dnl
dnl | define(active, ACTIVE)
dnl | define(list, ())
dnl | define([list], m4_quote(m4_list_append(list, [1 active])))
dnl | define([list], m4_quote(m4_list_append(list, [2 active])))
dnl | define([list], m4_quote(m4_list_append(list, [3 active])))
dnl | list
dnl =>(1 active, 2 active, 3 active)
dnl
define([m4_list_append],
[ifelse([$1], [], [([$2])],
[$1], [()], [([$2])],
[patsubst([[$1]], [^..\(.*\)..$], [[(\1, $2)]])])])
define([m4_list_add],
[define([$1], m4_quote(m4_list_append($1, [$2])))])
dnl ### Defining macros
@ -491,10 +551,10 @@ dnl of `$ac_tr_cpp' if you change this.
define(AC_TR_CPP,
[AC_VAR_IF_INDIR([$1],
[`echo "$1" | $ac_tr_cpp`],
[patsubst(translit([$1],
[patsubst(translit([[$1]],
[*abcdefghijklmnopqrstuvwxyz],
[PABCDEFGHIJKLMNOPQRSTUVWXYZ]),
[A-Z0-9_], [_])])])
[[^A-Z0-9_]], [_])])])
dnl AC_TR_SH(EXPRESSION)
@ -507,7 +567,7 @@ dnl Make sure to update the definition of `$ac_tr_cpp' if you change this.
define(AC_TR_SH,
[AC_VAR_IF_INDIR([$1],
[`echo "$1" | $ac_tr_sh`],
[patsubst(translit([$1], [*+], [pp]),
[patsubst(translit([[$1]], [*+], [pp]),
[[^a-zA-Z0-9_]], [_])])])
@ -1740,6 +1800,8 @@ define(AC_DEFINE,
EOF
])
dnl AC_DEFINE_UNQUOTED(VARIABLE [, VALUE[, DESCRIPTION]])
dnl -----------------------------------------------------
dnl Similar, but perform shell substitutions $ ` \ once on VALUE.
@ -1750,6 +1812,7 @@ EOF
])
dnl ### Setting output variables
@ -2236,6 +2299,10 @@ dnl Use a cache variable name containing both the library and function name,
dnl because the test really is for library $1 defining function $2, not
dnl just for library $1. Separate tests with the same $1 and different $2s
dnl may have different results.
dnl
dnl FIXME: This macro is extremely suspicious. It DEFINE unconditionnally,
dnl whatever the FUNCTION, in addition to not being a *S macro. Note
dnl that the cache does depend upon the function with look for.
AC_DEFUN(AC_CHECK_LIB,
[AC_VAR_PUSHDEF([ac_Lib], [ac_cv_lib_$1_$2])dnl
AC_CACHE_CHECK([for $2 in -l$1], ac_Lib,
@ -2265,36 +2332,12 @@ AC_SHELL_IFELSE(test AC_VAR_GET(ac_Lib) = yes,
AC_VAR_POPDEF([ac_Lib])dnl
])dnl AC_CHECK_LIB
dnl AC_HAVE_LIBRARY(LIBRARY, [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND
dnl [, OTHER-LIBRARIES]]])
dnl FIXME: Remove
AC_DEFUN(AC_HAVE_LIBRARY,
[AC_OBSOLETE([$0], [; instead use AC_CHECK_LIB])dnl
changequote(<<, >>)dnl
define(<<AC_LIB_NAME>>, dnl
patsubst(patsubst($1, <<lib\([^\.]*\)\.a>>, <<\1>>), <<-l>>, <<>>))dnl
define(<<AC_CV_NAME>>, ac_cv_lib_<<>>AC_LIB_NAME)dnl
changequote([, ])dnl
AC_MSG_CHECKING([for -l[]AC_LIB_NAME])
AC_CACHE_VAL(AC_CV_NAME,
[ac_save_LIBS="$LIBS"
LIBS="-l[]AC_LIB_NAME[] $4 $LIBS"
AC_TRY_LINK( , [main()], AC_CV_NAME=yes, AC_CV_NAME=no)
LIBS="$ac_save_LIBS"
])dnl
AC_MSG_RESULT($AC_CV_NAME)
if test "$AC_CV_NAME" = yes; then
ifelse([$2], ,
[AC_DEFINE([HAVE_LIB]AC_TR_CPP(AC_LIB_NAME))
LIBS="-l[]AC_LIB_NAME[] $LIBS"
], [$2])
ifelse([$3], , , [else
$3
])dnl
fi
undefine([AC_LIB_NAME])dnl
undefine([AC_CV_NAME])dnl
])
[AC_HASBEEN([$0], [; instead use AC_CHECK_LIB])])
dnl ### Examining declarations
@ -2612,14 +2655,7 @@ $2],
[$4])])
])dnl AC_NEED_DECLS
dnl This is the pure sh version of the macro above.
dnl [for ac_sym in [$1]
dnl do
dnl AC_NEED_DECL($ac_sym,
dnl [$2],
dnl [AC_DEFINE_UNQUOTED(AC_TR_CPP(${ac_sym}_DECLARED)) $3],
dnl [$4])dnl
dnl done
dnl ### Checking for library functions
@ -2670,6 +2706,7 @@ AC_CHECK_FUNC($ac_func,
done
])
dnl AC_REPLACE_FUNCS(FUNCTION...)
AC_DEFUN(AC_REPLACE_FUNCS,
[AC_CHECK_FUNCS([$1], , [LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}"])

View File

@ -651,7 +651,7 @@ if test $ac_cv_prog_lex_yytext_pointer = yes; then
[Define if `lex' declares `yytext' as a `char *' by default,
not a `char[]'.])
fi
])
])dnl AC_DECL_YYTEXT
AC_DEFUN(AC_PROG_INSTALL,
[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
@ -1582,7 +1582,7 @@ main ()
AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction)
fi
AC_SUBST(ALLOCA)dnl
])
])dnl AC_FUNC_ALLOCA
AC_DEFUN(AC_FUNC_GETLOADAVG,
[ac_have_func=no # yes means we've found a way to get the load average.
@ -2112,7 +2112,7 @@ fi])
if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then
AC_DEFINE(__CHAR_UNSIGNED__)
fi
])
])dnl AC_C_CHAR_UNSIGNED
AC_DEFUN(AC_C_LONG_DOUBLE,
[AC_CACHE_CHECK(for long double, ac_cv_c_long_double,
@ -2271,8 +2271,12 @@ if test $ac_cv_c_volatile = no; then
fi
])
AC_DEFUN(AC_C_STRINGIZE, [
AC_REQUIRE([AC_PROG_CPP])
dnl AC_C_STRINGIZE
dnl --------------
dnl Checks if `#' can be used to glue strings together at the CPP level.
dnl Defines HAVE_STRINGIZE if positive.
AC_DEFUN(AC_C_STRINGIZE,
[AC_REQUIRE([AC_PROG_CPP])
AC_MSG_CHECKING([for preprocessor stringizing operator])
AC_CACHE_VAL(ac_cv_c_stringize,
AC_EGREP_CPP([#teststring],[
@ -2281,7 +2285,8 @@ AC_EGREP_CPP([#teststring],[
char *s = x(teststring);
], ac_cv_c_stringize=no, ac_cv_c_stringize=yes))
if test "${ac_cv_c_stringize}" = yes; then
AC_DEFINE(HAVE_STRINGIZE)
AC_DEFINE(HAVE_STRINGIZE, 1,
[Define if you have the ANSI # stringizing operator in cpp.])
fi
AC_MSG_RESULT([${ac_cv_c_stringize}])
])dnl
@ -3157,7 +3162,7 @@ AC_EGREP_CPP(yes,
[AC_MSG_RESULT(yes)
AC_DEFINE(_ALL_SOURCE)],
AC_MSG_RESULT(no))
])
])dnl AC_AIX
AC_DEFUN(AC_MINIX,
[AC_BEFORE([$0], [AC_TRY_COMPILE])dnl
@ -3173,7 +3178,7 @@ if test "$MINIX" = yes; then
AC_DEFINE(_MINIX, 1,
[Define if on MINIX.])
fi
])
])dnl AC_MINIX
AC_DEFUN(AC_ISC_POSIX,
[AC_REQUIRE([AC_PROG_CC])dnl
@ -3197,7 +3202,7 @@ else
AC_MSG_RESULT(no)
ISC=
fi
])
])dnl AC_ISC_POSIX
AC_DEFUN(AC_XENIX_DIR,
[AC_OBSOLETE([$0], [; instead use AC_HEADER_DIRENT])dnl
@ -3213,7 +3218,7 @@ if test "$XENIX" = yes; then
test $ac_header_dirent = dirent.h && LIBS="-ldir $LIBS"
LIBS="$LIBS -lx"
fi
])
])dnl AC_XENIX_DIR
AC_DEFUN(AC_DYNIX_SEQ,
[AC_OBSOLETE([$0], [; instead use AC_FUNC_GETMNTENT])dnl