From 45f473304f1a13b9909a3236d8d154316fe7eddf Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 10 Oct 2008 09:02:36 +0200 Subject: [PATCH] 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. --- ChangeLog | 7 +++++++ doc/autoconf.texi | 35 +++++++++++++++++++++++++++++++++++ lib/autoconf/status.m4 | 6 +----- lib/m4sugar/m4sh.m4 | 11 +++++++++++ 4 files changed, 54 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 418aff61..bd108add 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-10-13 Paolo Bonzini + + 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 Use consistent shell function style. diff --git a/doc/autoconf.texi b/doc/autoconf.texi index d9d82aa7..ff81c2ec 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -11943,6 +11943,41 @@ generated from, and code to sanitize the environment for the rest of the 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 diff --git a/lib/autoconf/status.m4 b/lib/autoconf/status.m4 index ddc5f47f..6d622b9e 100644 --- a/lib/autoconf/status.m4 +++ b/lib/autoconf/status.m4 @@ -1332,11 +1332,7 @@ SHELL=\${CONFIG_SHELL-$SHELL} _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 diff --git a/lib/m4sugar/m4sh.m4 b/lib/m4sugar/m4sh.m4 index 2e6b2f2c..9c09dc01 100644 --- a/lib/m4sugar/m4sh.m4 +++ b/lib/m4sugar/m4sh.m4 @@ -1695,6 +1695,17 @@ m4_define([AS_VAR_POPDEF], ## ----------------- ## +# 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. -- 2.11.4.GIT