[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
config.status --config
From: |
Ralf Wildenhues |
Subject: |
config.status --config |
Date: |
Thu, 10 Sep 2009 07:06:01 +0200 |
User-agent: |
Mutt/1.5.20 (2009-08-09) |
A recent bug report in GDB (after updating it to use Autoconf 2.64)
<http://thread.gmane.org/gmane.comp.gcc.patches/188435/focus=51461>
relied on `pwd`/configure not simplifying $srcdir to '.', and thus
running config.status from a different build directory to recreate a
configuration. This reminded me of the config.status --config patch:
<http://thread.gmane.org/gmane.comp.sysutils.autoconf.general/5719/focus=5731>.
So let's revive that, but not make the same mistakes again:
- variable arguments to the shell `eval' builtin need double-quoting,
to avoid globbing and flattening of white space. (Thanks Paul!)
- Since then, Autoconf has gained support for newlines in substitutions,
so that part isn't a problem any more. AS_ECHO treats backslashes
correctly and thus it should be possible to reproduce all kinds of
command line arguments, except for trailing newlines.
- Do not output the name of the configure script; not sure about this
one, but I think the most common usage case doesn't need it, and is
easier to use this way.
I think this patch should address all pending issues. OK to apply?
Note to reviewers: the backquoted code happens within a non-quoted here-
document, thus the "...`..."..."...`..." portability issue doesn't apply
here.
Thanks,
Ralf
New config.status option --config.
* lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Implement
--config.
* doc/autoconf.texi (config.status Invocation): Document it.
* NEWS: Update.
* tests/torture.at (configure invocation): Test it.
Suggested several times, by several people in the past.
diff --git a/NEWS b/NEWS
index 5c1009a..6a365c8 100644
--- a/NEWS
+++ b/NEWS
@@ -19,6 +19,8 @@ GNU Autoconf NEWS - User visible changes.
** The `$tmp' temporary directory used in config.status is documented for
public use now.
+** config.status now provides a --config option to produce the configuration.
+
* Major changes in Autoconf 2.64 (2009-07-26) [stable]
Released by Eric Blake, based on git versions 2.63b.*.
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index 33fba2d..d65ed80 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -20530,6 +20530,22 @@ config.status Invocation
Print the version number of Autoconf and the configuration settings,
and exit.
address@hidden --config
+Print the configuration settings in reusable way, quoted for the shell,
+and exit. For example, for a debugging build that otherwise reuses the
+configuration from a different build directory @var{build-dir} of a
+package in @var{src-dir}, you could use the following:
+
address@hidden
address@hidden/config.status --config`
+eval @var{src-dir}/configure "$args" CFLAGS=-g address@hidden
address@hidden example
+
address@hidden
+Note that it may be necessary to override a @option{--srcdir} setting
+that was saved in the configuration, if the arguments are used in a
+different build directory.
+
@item --silent
@itemx --quiet
@itemx -q
diff --git a/lib/autoconf/status.m4 b/lib/autoconf/status.m4
index b8652e6..84ee6c3 100644
--- a/lib/autoconf/status.m4
+++ b/lib/autoconf/status.m4
@@ -1382,6 +1382,7 @@ Usage: $[0] [[OPTION]]... [[TAG]]...
-h, --help print this help, then exit
-V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
-q, --quiet, --silent
[] do not print progress messages
-d, --debug don't remove temporary files
@@ -1424,11 +1425,12 @@ General help using GNU software:
<http://www.gnu.org/gethelp/>.])])"
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`AS_ECHO(["$ac_configure_args"]) | sed 's/^ //;
s/[[\\""\`\$]]/\\\\&/g'`"
ac_cs_version="\\
m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.status[]dnl
m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
configured by $[0], generated by m4_PACKAGE_STRING,
- with options \\"`AS_ECHO(["$ac_configure_args"]) | sed 's/^ //;
s/[[\\""\`\$]]/\\\\&/g'`\\"
+ with options \\"\$ac_cs_config\\"
Copyright (C) m4_PACKAGE_YEAR Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
@@ -1472,6 +1474,8 @@ do
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
AS_ECHO(["$ac_cs_version"]); exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ AS_ECHO(["$ac_cs_config"]); exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
m4_ifdef([_AC_SEEN_CONFIG(FILES)], [dnl
diff --git a/tests/torture.at b/tests/torture.at
index 84eeda9..fe4c131 100644
--- a/tests/torture.at
+++ b/tests/torture.at
@@ -390,8 +390,9 @@ AT_CLEANUP
# We run `./configure one=val1 --enable-two=val2 --with-three=val3'
# and verify that (i) `configure' correctly receives the arguments,
# (ii) correctly passes them to `config.status', which we check by
-# running `config.status --recheck', and (iii) correctly passes them
-# to sub-configure scripts.
+# running `config.status --recheck', (iii) correctly passes them
+# to sub-configure scripts, and (iv) correctly reproduces them with
+# `config.status --config'.
AT_SETUP([configure invocation])
@@ -425,6 +426,11 @@ AT_CHECK_CONFIGURE([one=one --enable-two=two
--with-three=three |
AT_CHECK([./config.status --recheck | sed -n 's/^result=//p'], 0,
[onetwothree
])
+AT_CHECK([args=`./config.status --config` && eval ./configure "$args" |
+ sed -n -e 's/^result=//p'], 0,
+ [m4_do([onetwothree
+], [onetwothree
+])])
AT_CHECK_CONFIGURE([one="\"'$ " --enable-two="\" ' $" --with-three=" \"'$"|
sed -n -e 's/^result=//p'], 0,
@@ -435,6 +441,11 @@ AT_CHECK([./config.status --recheck | sed -n
's/^result=//p'], 0,
["'$ " ' $ "'$
])
dnl restore font-lock: "
+AT_CHECK([args=`./config.status --config` && eval ./configure "$args" |
+ sed -n -e 's/^result=//p'], 0,
+ [m4_do(["'$ " ' $ "'$
+], ["'$ " ' $ "'$
+])])
AT_CLEANUP
- config.status --config,
Ralf Wildenhues <=