[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)
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:

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


   New config.status option --config.

   * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Implement
   * doc/autoconf.texi (config.status Invocation): Document it.
   * NEWS: Update.
   * tests/ (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/config.status --config`
+eval @var{src-dir}/configure "$args" CFLAGS=-g address@hidden
address@hidden example
+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: 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`AS_ECHO(["$ac_configure_args"]) | sed 's/^ //; 
 m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.status[]dnl
 configured by $[0], generated by m4_PACKAGE_STRING,
-  with options \\"`AS_ECHO(["$ac_configure_args"]) | sed 's/^ //; 
+  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/ b/tests/
index 84eeda9..fe4c131 100644
--- a/tests/
+++ b/tests/
@@ -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,
+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(["'$ " '  $     "'$
+],             ["'$ " '  $     "'$

reply via email to

[Prev in Thread] Current Thread [Next in Thread]