[nhc-bugs] Building nhc98 on Windows 2000
Malcolm Wallace
Malcolm.Wallace@cs.york.ac.uk
Wed, 3 Apr 2002 15:56:41 +0100
> 1) what exactly is "fullname" supposed to do in configure?
>
> if fullname 2>>/dev/null # cope with symbolic links in directory
What it says in the comment... :-) If `fullname' is available it
gives the absolute pathname to its argument, i.e. it expands symbolic
links fully in the directory part.
> And where is it supposed to come from? I can't find it, and neither
> can configure:
>
> Updating targets/ix86-CYGWIN_NT-5.0/hmake3.config...
> fullname: not found
If your system doesn't have it, it won't be executed. You definitely
shouldn't see the `not found' message, because that was redirected to
/dev/null.
Curiously enough, the only reason I introduced `fullname' was because
of Cygwin. Remember the business with $(PWD) vs $(shell pwd) in
Makefiles (Cygwin requires the latter)? Well in Unix systems, the
two forms give different results if there are symbolic links in the
directory path. Hence `fullpath' is used as a hack to try to patch
up the difference.
> 2) is this really the line you want to get (in MkConfig.hs:210)?
>
> $ grep 'NHC98INCDIR' /tmp/nhc98-1.12/script/nhc98 | cut -c27-
> | cut -d'}' -f1 | head -1
No, and if you look closely it isn't the line I wrote either... :-)
It actually reads
$ grep '^NHC98INCDIR' ...
> 3) after telling hmake-config not to bother with ghc, the case of
> the failing write to /tmp/.. appears to be in the second call
> to runAndReadStdout in MkConfig.hs (see 2), and all those calls
> use the same tmpfile for output from "system" calls. If the
> "grep" is the second call, that means that one call has succeeded
> without permission problems.
I think I can see how this is failing now. Consider this code:
runAndReadStdout cmd = do
...
s <- readFile output
removeFile output -- file will not be removed until readFile closes it
return (safeinit s) -- strip trailing newline added by shell
The file-removal assumes the unix-like property that you can unlink a
file while it still has a (lazy) reader attached to it, and the file
contents will stick around until the reader has finished with it.
It is perfectly possible to create a new (different) file with the
same name as the old one whilst the old one is still being read.
Am I right in guessing that the Cygwin filesystem doesn't have these
semantics?
> Is there an easy way for me to generate MkConfig.hc from
> MkConfig.hs, so that I can do some debugging?
Provided you have a working nhc98 installed, just use
$ nhc98 -C MkConfig.hs
If there are no .hi files lying around, then it might need to be
$ hmake -nhc98 -C MkConfig.hs
Regards,
Malcolm