autoconf-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Crash fix on Windows/MinGW


From: Eric PAIRE
Subject: Re: Crash fix on Windows/MinGW
Date: Tue, 18 Apr 2006 10:55:11 +0200
User-agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.0.1) Gecko/20020920 Netscape/7.0

Thanks.... But it does not work anymore on MinGW, as 'config.log' is not closed before 'configure' is called, so that config.log is not truncated before configure writes in it.

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 <address@hidden> writes:

  
What's the difference between:

exec 5>foo
cat >&5 <<END
Prologue
END

and

cat >foo <<END
Prologue
END
exec 5>>foo
    

It 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  <address@hidden>

	* 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  <address@hidden>

	* 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
  



reply via email to

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