I still think that you have to close 'AS_MESSAGE_LOG_FD' before rechecking...
Thanks,
Eric
BTW, 'exec AS_MESSAGE_LOG_FD>&-' was running correctly on my WindowsXP, and looking at a manual of sh (not bash), it is part of the POSIX shell command sytax.
Paul Eggert wrote:
Stepan Kasal <[EMAIL PROTECTED]> writes:What's the difference between: exec 5>foo cat >&5 <<END Prologue END and cat >foo <<END Prologue END exec 5>>fooIt affects whether O_APPEND is set in the file description corresponding to file descriptor 5. O_APPEND causes all output to be appended to the file, regardless of where the current seek position is.Can you imagine an Autoconf bug which would be caused by this?Yes. In the former case a misbehaving script can lose parts of the log. The most common error is something like this, executed after the above code: echo log1 >>foo echo log2 >&5 In the former case, "log1" will be overwritten and lost, which is bad. Even in the latter case, a misbehaving script can lose parts of the log by invoking fcntl to clear O_APPEND. But this is far, far less likely in practice: I've never seen it, but I have seen problems like the above in the former case.The reason is that I think we are in a ``freeze'' now.We are not adding features, but we are fixing bugs. At this point, we need not limit ourselves to bugs reported by users; we can fix bugs that we find ourselves. The old code wasn't consistent about using ">>" to append to logs leading problems like the one mentioned above. The new code is consistent.(A particular concern/superstition is about 5>&- to close a file descriptor;Fair enough. I'll remove that. Though the usage is quite portable in practice: it was in 7th edition Unix and I've never seen a shell where it didn't work.A patch is attached below. What do you think about it?Looks OK. Thanks. You did a deeper analysis of the problem than I did. I installed it, along with the 5>&- removal, as follows (with a slight reworking of comments): 2006-04-16 Paul Eggert <[EMAIL PROTECTED]> * lib/autoconf/general.m4 (_AC_INIT_CONFIG_LOG): Don't use ">&-" since we're only 99.999% sure that this is portable, and since the MinGW bug is fixed in a different way. * lib/autotest/general.m4 (AT_INIT): Likewise. 2006-04-16 Stepan Kasal <[EMAIL PROTECTED]> * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Handle --recheck before opening config.log, to avoid hitting a bug on MinGW. --- lib/autoconf/general.m4 15 Apr 2006 01:13:32 -0000 1.907 +++ lib/autoconf/general.m4 17 Apr 2006 06:01:22 -0000 @@ -1103,7 +1103,6 @@ fi])dnl m4_define([_AC_INIT_CONFIG_LOG], [m4_divert_text([INIT_PREPARE], [m4_define([AS_MESSAGE_LOG_FD], 5)dnl -exec AS_MESSAGE_LOG_FD>&- # Work around a MinGW bug. cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. --- lib/autotest/general.m4 15 Apr 2006 01:13:33 -0000 1.210 +++ lib/autotest/general.m4 17 Apr 2006 06:01:22 -0000 @@ -601,7 +601,6 @@ m4_define([AS_MESSAGE_LOG_FD], [5]) if $at_debug_p; then at_suite_log=/dev/null else - exec AS_MESSAGE_LOG_FD>&- # Work around a MinGW bug. : >"$at_suite_log" fi exec AS_MESSAGE_LOG_FD>>"$at_suite_log" --- lib/autoconf/status.m4 12 Apr 2006 20:40:21 -0000 1.95 +++ lib/autoconf/status.m4 17 Apr 2006 06:01:22 -0000 @@ -1270,6 +1270,19 @@ if $ac_cs_silent; then ac_configure_extra_args="$ac_configure_extra_args --silent" fi +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +dnl Check this before opening the log, to avoid a bug on MinGW, +dnl which prohibits the recursive instance from truncating an open log. +if \$ac_cs_recheck; then + echo "running CONFIG_SHELL=$SHELL $SHELL $[0] " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&AS_MESSAGE_FD + CONFIG_SHELL=$SHELL + export CONFIG_SHELL + exec $SHELL "$[0]" $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF dnl Open the log: m4_rename([_AC_save_AS_MESSAGE_LOG_FD], [AS_MESSAGE_LOG_FD])dnl exec AS_MESSAGE_LOG_FD>>config.log @@ -1281,12 +1294,6 @@ exec AS_MESSAGE_LOG_FD>>config.log _ACEOF cat >>$CONFIG_STATUS <<_ACEOF -if \$ac_cs_recheck; then - echo "running CONFIG_SHELL=$SHELL $SHELL $[0] " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&AS_MESSAGE_FD - CONFIG_SHELL=$SHELL - export CONFIG_SHELL - exec $SHELL "$[0]" $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -fi m4_ifdef([_AC_OUTPUT_COMMANDS_INIT], [# # INIT-COMMANDS
