problems installing nhc98-1.04 on cygwin
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
Claus Reinke writes:
[missing in nhc98-1.04\src\runtime\Builtin\cIOExtras.c] #include <errno.h>
Thanks.
You now rely on being able to distinguish between *T* and *t* (tracing and timing), right?
Yes, as we have done for more than three years. However, we have only recently added time profiling to the set of things built by 'make all' - previously you had to ask for it specially.
WIN32 can't tell the difference between files with just different case.
Unbelievable. Just unbelievable.
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 ...
Ok, ok, I believe you. So you know already what the fix for this bug is - get a /real/ operating system, not a toy! :-)
I'm not sure whether this has anything to do with the second bug, but it is a trap I would like to avoid.
It has everything to do with your reported bug, yes. Providing you do not mind losing time profiling, there is an easy workaround: . completely remove the directory targets/ix86-CYGWIN_NT-4.0/objt . in the toplevel Makefile, remove the target 'timeprofile' from the dependencies of 'all' and then 'make all' should work to build the tracing libraries and tools.
Unless you can think of any good reason not to, could you please change your suffix scheme to something that will also work on Windows-inhibited cygwin?
Ok, I think you have persuaded us to use one different suffix. We are currently thinking of changing 't' (for time profiling) to 'z' in your honour. (For 'zeit', or perhaps for your middle name Claus?). It is sad to lose the English mnemonic, but perhaps a German one will be just as good. :-) Complaints, comments, or suggestions for a different mnemonic, are welcome. Regards, Malcolm
participants (2)
-
C.Reinke -
Malcolm Wallace