+2008-10-13 Paolo Bonzini <bonzini@gnu.org>
+
+ Add and document AS_INIT_GENERATED.
+ * lib/m4sugar/m4sh.m4 (AS_INIT_GENERATED): New.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Use it.
+ * doc/autoconf.texi (Initialization macros): Document it.
+
2008-10-13 Eric Blake <ebb9@byu.net>
Use consistent shell function style.
script. Finally, it changes the current diversion to @code{BODY}.
@end defmac
+@defmac AS_INIT_GENERATED
+@asindex{INIT_GENERATED}
+Initialize the M4sh environment. This macro emits again all the
+code that is generated by @code{AS_INIT}, including the expansion of
+@code{AS_BOURNE_COMPATIBLE} and @code{AS_SHELL_SANITIZE}. It is meant
+to be used in a quoted here document when generating other shell scripts.
+
+Note that @code{AS_INIT_GENERATED} does not emit the entire prolog.
+In particular, a line containing @code{#!$SHELL} must have already been
+emitted to the child script; you should not use @code{#!/bin/sh}, or the
+child script will not use the more modern shell that the parent script
+might have detected. Currently, the suggested idiom for writing a M4sh
+shell script from within another script is:
+
+@example
+m4_rename([AS_MESSAGE_LOG_FD], [save_AS_MESSAGE_LOG_FD])dnl
+cat > "@var{file}" <<__EOF__
+#! $SHELL
+# Generated by $as_me.
+# ...
+
+SHELL=\$@{CONFIG_SHELL-$SHELL@}
+__EOF__
+
+cat >>"@var{file}" <<\__EOF__
+AS_INIT_GENERATED
+# ...
+__EOF__
+m4_rename([save_AS_MESSAGE_LOG_FD], [AS_MESSAGE_LOG_FD])dnl
+@end example
+
+This, however, may change in the future as the M4sh interface is
+stabilized further.
+@end defmac
+
@defmac AS_LINENO_PREPARE
@asindex{LINENO_PREPARE}
@evindex LINENO
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-AS_SHELL_SANITIZE
-dnl Watch out, this is directly the initializations, do not use
-dnl AS_PREPARE, otherwise you'd get it output in the initialization
-dnl of configure, not config.status.
-_AS_PREPARE
+AS_INIT_GENERATED
exec AS_MESSAGE_FD>&1
# Save the log message, to keep $[0] and so on meaningful, and to
## ----------------- ##
+# AS_INIT_GENERATED
+# -----------------
+# Emit m4sh initialization code in a suitable form for a quoted
+# here document. Does not emit the `#!' sequence, which should be
+# generated with `#! $SHELL'; see the manual or autoconf/status.m4
+# for more detail.
+m4_defun([AS_INIT_GENERATED],
+[m4_require([AS_PREPARE])dnl
+AS_SHELL_SANITIZE
+_AS_PREPARE])
+
# AS_INIT
# -------
# Initialize m4sh.