bug-make
[Top][All Lists]
Advanced

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

[bug #45476] cygwin: stderr redirect append does not work with native Wi


From: marco atzeri
Subject: [bug #45476] cygwin: stderr redirect append does not work with native Windows programs
Date: Sun, 05 Jul 2015 20:36:12 +0000
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0

URL:
  <http://savannah.gnu.org/bugs/?45476>

                 Summary: cygwin: stderr redirect append does not work with
native Windows programs
                 Project: make
            Submitted by: matzeri
            Submitted on: Sun 05 Jul 2015 08:36:11 PM GMT
                Severity: 3 - Normal
              Item Group: Bug
                  Status: None
                 Privacy: Public
             Assigned to: None
             Open/Closed: Open
         Discussion Lock: Any
       Component Version: 4.1
        Operating System: MS Windows
           Fixed Release: None
           Triage Status: None

    _______________________________________________________

Details:

First reported at
https://cygwin.com/ml/cygwin/2015-05/msg00140.html

I was not able to bisect make code to identify when
the issue was introduced.
Attached test case

--- original message ----

Using 32-bit cygwin 2.0.2 and make 4.1-1, in a recipe, redirecting
stderr in append mode does not work if the program being invoked on a
shell line is a native Windows executable.  Instead of appending, the
stderr output is written to the top of the file, corrupting it. This
happens only if the 'make' process has its own stdout/err redirected to
a pipe.

Example recipe:

    all:
            echo first > output
            echo
secondxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx >> output
            /cygdrive/c/Windows/System32/sort.exe nonexist 2>> output; true

When "make" is run, the "output" file should be:

    first
    secondxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    nonexistThe system cannot find the file specified.

and in fact it is.  But when "make 2>&1 | cat" is run, the output is:

    nonexistThe system cannot find the file specified.
    xxxxxxxxxxxxxx

even though it should be the same as before.  The error message written
by sort.exe went to the top of the file instead of the end.

The problem does not happen if 'sort.exe' is replaced with a cygwin
program such as /usr/bin/sort.

The problem does not happen if stdout is redirected instead of stderr.

The problem does not happen if the output of 'make' is redirected to
a file instead of a pipe.

The problem does not happen if the sequence of commands in the recipe
is copied into a shell script and the shell invoked with its output
redirected to a pipe.  That is why I am filing this against 'make'.
However, it is possible the bug is in the shell (or a different shell?)
and I just don't know how to invoke it properly to imitate what 'make'
does.

I am attaching a reproducer Makefile.  Run "make 2>&1 | cat" to see
the incorrect output:

    $ make 2>&1 | cat
    echo first > output
    echo secondxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx >>
output
    /cygdrive/c/Windows/System32/sort.exe nonexist 2>> output; true
    ----- BEGIN output -----
    nonexistThe system cannot find the file specified.
    xxxxxxxxxxxxxx
    ----- END output -----

The bug happens with both make 4.1 and make 4.0 on cygwin 2.0.2.  It
does not happen with make 3.82.90 and cygwin 1.7.23.



    _______________________________________________________

File Attachments:


-------------------------------------------------------
Date: Sun 05 Jul 2015 08:36:11 PM GMT  Name: Makefile  Size: 293B   By:
matzeri

<http://savannah.gnu.org/bugs/download.php?file_id=34383>

    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?45476>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/




reply via email to

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