Hi all,

today, I tried to build the ghc-ndp branch from a fresh tree after two weeks off. Ultimately, it sort of worked, but not without some pain. I'll describe what I did and the problems I've encountered in the hope that it will be helpful.

  darcs get http://darcs.haskell.org/ghc-ndp --partial
  cd ghc-ndp
  chmod u+x darcs-all
  ./darcs-all get

Fails with

== running darcs get --partial http://darcs.haskell.org/ghc-ndp/packages/base
Invalid repository:  http://darcs.haskell.org/ghc-ndp/packages/base

This is because darcs-all determines the base url of the repository by removing a trailing "ghc". However, our url ends with "ghc-ndp" so this doesn't work. The workaround is to change _darcs/prefs/defaultrepo to http://darcs.haskell.org/ghc. I assume this is going to be problematic for all branches.

  cd libraries
  darcs get http://darcs.haskell.org/packages/ndp
  cd ..
  <set up mk/build.mk>
  autoreconf
  sh boot

This step is new and, of course, I skipped it on first try. The README mentions it but why is it necessary at all? Couldn't this be done as part of configure?

  configure

Works, but the first line of output is strange:

checking for GHC version date... darcs: getFdStatus: invalid argument (Bad file descriptor)

  make

Fails with

Running Haddock for ndp-0.1...
dist/build/tmp/./Data/Array/Parallel/Unlifted.hs:"dist/build/tmp/./Data/Array/Parallel/Unlifted.hs": 28:4: Parse error
make[1]: *** [doc.library.ndp] Error 1
make: *** [stage1] Error 2

The parse error is because ndp uses some ghc extensions which Haddock doesn't understand. But why is Haddock run at all here? IMO, a separate make doc step is preferable to running it automatically. In any case, I assume it can be turned off but the build documentation doesn't seem to say how. Also, IMO Haddock errors should never be treated as fatal by the build system.

A related question: is there a way for a package to say that it doesn't want to be processed with Haddock? From the Cabal documentation, I'd guess the answer is no.

In any case,

  cd compiler
  make stage=2 boot
  make stage=2

seems to give me a working compiler (thanks to Manuel for suggesting this).

In addition to the above, I've noticed the following problems.

1. Is there a way to get a clean tree? Both make clean and make distclean fail to clean any subdirectories (compiler, rts) and libraries. This is not really what I expect (and not what they used to do, IIRC).

Also, my attempt to make distclean a second time failed with

mk/boilerplate.mk:53: mk/config.mk: No such file or directory
make: *** No rule to make target `mk/config.mk'.  Stop.

IMO, cleaning should not require me to rerun configure.

2. Parallel make (i.e., make -j) doesn't work at all for me. It seems to try to build all (or at least some) packages simultaneously which causes Cabal to be built several times and ultimately falls over completely. IIUC, this is because libraries/Makefile does not define dependencies between packages (which is understandable) and does not force them to be built in the right order (which it used to do, IIRC). This is quite unfortunate, as make -j used to be quite a bit faster than plain make on my dual-core Mac. It would be less of a win now that the libraries use ghc --make, I guess, but would still speed up the compilation of the compiler itself.


Finally, I'd like to point out that the recent changes to the build system have caused and continue to cause a lot of problems for us. I understand that refactoring the build system is a worthwhile task but it would be really great if it was less disruptive. Perhaps significant changes (like running Haddock by default) could be discussed or at least publicised. Also, the lack of support for parallel make is really unfortunate as it significantly increases turn-around times in some cases (and is confusing to novice users, I guess).

Roman

_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to