[nhc-bugs] problems installing nhc98-1.04 on cygwin

C.Reinke C.Reinke@ukc.ac.uk
Wed, 23 May 2001 13:19:53 +0100


Hi there,

I'm trying to install the results of months of cooperative hacking,
your all new nhc98-1.04, on cygwin (Windows/NT4).  Apart from a missing
"include <errno.h>" in cIOExtras.c, there seems to be a problem with
suffixes, or a missing file, which has stopped me from finishing the
installation.

  [nhc98-1.04, cygwin, NT4; configure +docs; make all]
  Errors encountered so far:
  --
  [missing in nhc98-1.04\src\runtime\Builtin\cIOExtras.c]
  #include <errno.h>


  --
  make[3]: Entering directory `/tmp/nhc98-1.04/src/prelude/Numeric'
  /tmp/nhc98-1.04/script/nhc98 -cpp -T -dbgtrans -trusted -P/tmp/nhc98-1.04/in
  clude -DTRACING -c +CTS -part -redefine -CTS -P../Char -P../PreludeText -P..
  /PreludeList -P../Ratio  -o /dev/null LexDigits.hs
  I/O error (user-defined), call to function `userError':
    Can't open any of:
   ./IsDigit.T.hi
   /tmp/nhc98-1.04/include/IsDigit.T.hi
   ../Char/IsDigit.T.hi
   ../PreludeText/IsDigit.T.hi
   ../PreludeList/IsDigit.T.hi
   ../Ratio/IsDigit.T.hi
   when trying to read IsDigit.

  make[3]: *** [../Numeric/LexDigits.T.hi] Error 1
  make[3]: Leaving directory `/tmp/nhc98-1.04/src/prelude/Numeric'
  make[2]: *** [../Numeric/LexDigits.T.hi] Error 2
  make[2]: Leaving directory `/tmp/nhc98-1.04/src/prelude/Char'
  make[1]: *** [Char.subdir] Error 2
  make[1]: Leaving directory `/tmp/nhc98-1.04/src/prelude'
  make: *** [targets/ix86-CYGWIN_NT-4.0/traceprelude] Error 2

  [../Char/IsDigit.t.hi exists, IsDigit.T.hi doesn't; from the tar-file
  contents, it seems that *.t.hi are generated, whereas *.T.hi come
  with the sources?]


Independent of the actual error (or perhaps not independent?), there is
a problem lurking here. You now rely on being able to distinguish
between *T* and *t* (tracing and timing), right?  Unfortunately, that
might not work on cygwin/windows boxes. From the cygwin FAQ:

  (http://sources.redhat.com/cygwin/faq/faq_4.html#SEC49)
  Are mixed-case filenames possible with Cygwin?

  Several Unix programs expect to be able to use to filenames spelled the
  same way, but with different case. A prime example of this is perl's
  configuration script, which wants Makefile and makefile. WIN32 can't
  tell the difference between files with just different case, so the
  configuration fails.

  In releases prior to beta 16, mount had a special mixed case option
  which renamed files in such a way as to allow mixed case filenames. We
  chose to remove the support when we rewrote the path handling code for
  beta 16. The standard Windows apps -- explorer.exe,
  cmd.exe/command.com, etc. -- do not distinguish filenames that differed
  only in case, resulting in some (very) undesirable behavior.

  Sergey Okhapkin had maintained a mixed-case patch ('coolview') until
  about B20.1, but this has not been updated to recent versions of
  Cygwin.

In case you can't imagine this kind of silly behaviour, and just to
confirm that I'm not hallucinating and that the FAQ is not simply out
of date, here is an example (using cygwin's bash), showing that, while
some tools manage to distinguish case, this can't be relied on:

  touch t.hi T.hi
  ls
    t.hi
  rm T.hi
  ls

  touch T.hi t.hi
  ls
    T.hi
  ls | fgrep 't.hi'

  ls | fgrep 'T.hi'
    T.hi
  rm t.hi
  ls
  
(for more info on this nonsense, see a posting on the cygwin
mailing list, http://cygwin.com/ml/cygwin/2000-07/msg00590.html)

I'm not sure whether this has anything to do with the second bug, but
it is a trap I would like to avoid.  I would simply rename one of the
suffixes, and try again, but the mapping of features to suffixes seems
to be hardwired and distributed all over the place (I couldn't find a
variable TRACINGSUFFIX=T), and I don't want to try and search for all
uses of t, T, tT, and so on.

Unless you can think of any good reason not to, could you please change
your suffix scheme back to something that will also work on
Windows-inhibited cygwin?

Thanks,
Claus