all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: "Paul Eggert" <eggert@cs.ucla.edu>, "Francesco Potortì" <pot@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: etags test is broken on MS-Windows
Date: Wed, 20 May 2015 18:38:51 +0300	[thread overview]
Message-ID: <83a8wz6yyc.fsf@gnu.org> (raw)
In-Reply-To: <83h9r8egen.fsf@gnu.org>

> Date: Tue, 19 May 2015 18:27:44 +0300
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: emacs-devel@gnu.org
> 
> (There's also an unrelated problem with the gzip-compressed file in
> f-src, which seems to be some Windows-specific glitch; I will look
> into it separately.)

I found the reason for this: etags calls 'rewind' on a FILE stream
that was created by 'popen', which is non-portable, AFAIK.  On
Windows, that caused the initial portions of the input to be skipped
by etags, i.e. some symbols were not tagged.

There are a few comments about that in the source, like this:

  /* We rewind here, even if inf may be a pipe.  We fail if the
     length of the first line is longer than the pipe block size,
     which is unlikely. */
  rewind (inf);

These comments notwithstanding, it sounds like etags expects this to
work satisfactorily at least on GNU/Linux, and at least when "length
of the first line is not longer than the pipe block size", otherwise I
don't understand why the test suite includes gzip-compressed files
(Francesco?).

So, on the assumption that this does work on Posix hosts, at least
those that use glibc, I hacked etags to provide a Windows-specific
replacement for 'rewind' that supports this expectation, assuming the
stuff read and buffered before the call to 'rewind' is less than a
full buffer of the FILE object.  Then the Windows build no longer
misses symbols in the first part of the compressed files.

However, now I see something strange in the ETAGS.good files, which
AFAIU were produced by Paul on a Posix host.  Please look at this
excerpt from ETAGS.good_1:

f-src/entry.for,172
      LOGICAL FUNCTION PRTPKG ^?3,75
       ENTRY  SETPRT ^?194,3866
       ENTRY  MSGSEL ^?395,8478
     & intensity1(^?577,12231
       character*(*) function foo(^?579,12307
^L
f-src/entry.strange_suffix,172
      LOGICAL FUNCTION PRTPKG ^?3,75
       ENTRY  SETPRT ^?194,3866
       ENTRY  MSGSEL ^?395,8478
     & intensity1(^?577,12231
       character*(*) function foo(^?579,12307
^L
f-src/entry.strange,171
      LOGICAL FUNCTION PRTPKG ^?2,2
       ENTRY  SETPRT ^?193,3793
       ENTRY  MSGSEL ^?394,8405
     & intensity1(^?576,12158
       character*(*) function foo(^?578,12234

Now, these 3 files have exactly identical contents, and the _only_
difference between the first 2 and the 3rd is that the latter is
gzip-compressed.  So that should be the only reason why all its line
counts are off by 1, and its byte counts are all off by 73, which just
happens to be the length of the first line of the (uncompressed) file.

So could it be that rewinding a 'popen'-created stream doesn't work
correctly on GNU/Linux as well?  If so, we will have to make changes
in etags to not do that, I think, and instead reuse the already-read
stuff as needed.



  parent reply	other threads:[~2015-05-20 15:38 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <83y4kmdjmj.fsf@gnu.org>
     [not found] ` <555A8E62.7060700@cs.ucla.edu>
2015-05-19 15:27   ` etags test is broken on MS-Windows Eli Zaretskii
2015-05-19 17:57     ` Paul Eggert
2015-05-19 18:26       ` Eli Zaretskii
2015-05-20 15:38     ` Eli Zaretskii [this message]
2015-05-21  5:05       ` Paul Eggert
2015-05-21 13:24       ` Francesco Potortì
2015-05-21 16:49         ` Eli Zaretskii
2015-05-23  8:46           ` Eli Zaretskii
2015-05-21 13:16     ` Francesco Potortì
2015-05-21 16:31       ` Eli Zaretskii
2015-05-21 16:37         ` Paul Eggert
2015-05-21 16:55           ` Eli Zaretskii
2015-05-21 19:03             ` Paul Eggert
2015-05-21 19:54               ` Eli Zaretskii
2015-05-21 23:28                 ` Paul Eggert
2015-05-22  8:32                   ` Eli Zaretskii
2015-05-22 13:08                     ` Francesco Potortì
2015-05-22 13:19                       ` Eli Zaretskii
2015-05-22 18:23                         ` Paul Eggert
2015-05-22 19:08                           ` Eli Zaretskii
2015-05-22 19:25                             ` Andreas Schwab
2015-05-22 19:38                               ` Eli Zaretskii
2015-05-22 19:41                                 ` Andreas Schwab
2015-05-22 19:42                                 ` Eli Zaretskii
2015-05-22 19:50                                   ` Andreas Schwab
2015-05-22 20:05                                     ` Eli Zaretskii
2015-05-22 20:30                                       ` Andreas Schwab
2015-05-22 21:26                                         ` Paul Eggert
2015-05-23  6:40                                           ` Eli Zaretskii
2015-05-23  6:39                                         ` Eli Zaretskii
2015-05-23  8:02                                           ` Andreas Schwab
2015-05-23  8:27                                             ` Eli Zaretskii
2015-05-23  9:41                                               ` Andreas Schwab
2015-05-23  9:49                                                 ` Eli Zaretskii
2015-05-23  9:59                                                   ` Andreas Schwab
2015-05-23 10:20                                                     ` Eli Zaretskii
2015-05-23 10:54                                                       ` Andreas Schwab
2015-05-23 11:31                                                         ` Eli Zaretskii
2015-05-23 12:10                                                           ` Andreas Schwab
2015-05-23 13:46                                                             ` Eli Zaretskii
2015-05-23 17:27                                                               ` Andreas Schwab
2015-05-23 17:37                                                                 ` Eli Zaretskii
2015-05-23 18:46                                                                   ` Andreas Schwab
2015-05-23 19:04                                                                     ` Eli Zaretskii
2015-05-25 12:33                                                                       ` Francesco Potortì
2015-05-23 19:01                                                               ` Paul Eggert
2015-05-23 19:27                                                                 ` Eli Zaretskii
2015-05-25 16:44                                                                   ` Paul Eggert
2015-05-25 19:33                                                                     ` Eli Zaretskii
2015-05-25 20:29                                                                       ` Paul Eggert
2015-05-22 12:40               ` Francesco Potortì

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83a8wz6yyc.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=eggert@cs.ucla.edu \
    --cc=emacs-devel@gnu.org \
    --cc=pot@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.