Like every weekend when I try to build a GHC RPM, things have been broken 
again, this time by ghc-pkg not taking DESTDIR into account, but the details 
do not matter. Fixing the RPM build every weekend again and again and again 
is extremely frustrating. What can we do to improve this? "make validate" is 
obviously not enough.

First of all, I think there have to be automatic nightly RPM builds, using the 
ghc.spec from the repository (well, a configured version of it). Are there 
any volunteers to set this up? Although I have a continuously running Linux 
server hosted at a provider, its RAM is far too small for building GHC, so 
this is no option.

Furthermore, the root of all evil is the arcane logic regarding paths in our 
build system/tools, which has over the years grown beyond anything a single 
sane human can comprehend. For a proof of this, just look at the number of 
commits having to do with fixing build/install/Haddock/whatever paths. 
Therefore I think that this area need some *serious* cleanup. I suggest the 
following route:

   * We have to adhere *strictly* to GNU convention, so lines like

       datadir     := $(datadir0)/ghc-$(ProjectVersion)
       libdir      := $(libdir0)/ghc-$(ProjectVersion)

     are a complete no-no. This would have 2 advantages: a) Everybody knows 
immediately what e.g. "$(libdir)" means. b) Deviating from GNU standards will 
undoubtely lead to bug reports for packagers later. Responding with "libdir 
has a totally different meaning for our project" is not OK.

   * We have to make ourselves, the Makefiles and the tools aware of the fact 
that there are *3* kind of paths: paths at build time, paths at temporary 
installation time (normally below DESTDIR, where rpmbuild picks things up), 
and paths at final installation time (nomally below /usr and friends, done by 
e.g. rpm). Currently there are a few hacks in our system, e.g. ghc-pkg is 
validating final installation paths at temporary installation time, which of 
course fails (unless the $topdir hack in ghc-pkg is triggered). Perhaps some 
options are missing in the tools? What is $topdir all about? When should we 
substitute what into which paths? This is all done in a very ad-hoc fashion 
currently.

   * Windows installations seem to be a very special beast, so we should 
collect all those deviations from the GNU standards in a single place, so it 
is very obvious where we willingly deviate from the standards.

Cheers,
   S.

P.S.: To be exact, there is even one more kind of path when we take 
relocatable RPMs into account, but these can be handled in the .spec file via 
some sed magic.

P.P.S.: </RantMode> ;-)

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

Reply via email to