From bb09823ea70b0468852ba0e8c2b288eddd406a80 Mon Sep 17 00:00:00 2001 From: Ralf Wildenhues Date: Fri, 11 Sep 2009 06:53:17 +0200 Subject: [PATCH] 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. Signed-off-by: Ralf Wildenhues --- ChangeLog | 10 ++++++++++ NEWS | 2 ++ doc/autoconf.texi | 16 ++++++++++++++++ lib/autoconf/status.m4 | 6 +++++- tests/torture.at | 15 +++++++++++++-- 5 files changed, 46 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9ea4ed66..af08473e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2009-09-11 Ralf Wildenhues + + 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. + 2009-09-10 Eric Blake Document that AS_INIT is automatically used. diff --git a/NEWS b/NEWS index b8620b63..262be0c1 100644 --- a/NEWS +++ b/NEWS @@ -24,6 +24,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 4203cd0f..098d512e 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -20502,6 +20502,22 @@ files, and exit. Print the version number of Autoconf and the configuration settings, and exit. +@item --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: + +@example +args=`@var{build-dir}/config.status --config` +eval @var{src-dir}/configure "$args" CFLAGS=-g --srcdir=@var{src-dir} +@end example + +@noindent +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 b8652e6e..84ee6c3d 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: .])])" _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 84eeda9b..fe4c131f 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