Hi all,

today, I tried to sync the ghc-ndp branch with head. Again, I'll describe the problems I've encountered in the hope that it will be helpful.

First, I tried

  darcs pull http://darcs.haskell.org/ghc
  ./darcs-all pull
  make distclean
  <build as usual>

This failed with

  Registering filepath-1.0...
  Reading package info from "dist/inplace-pkg-config" ... done.
  ghc-pkg: dependency directory-1.0 doesn't exist (use --force to override)

Ok, make distclean hasn't been working properly for quite some time so I thought I'd get a fresh tree. After fixing (sort of) a problem with the ghc-ndp repository, I tried compiling it:

../../compiler/stage1/ghc-inplace -package-name base-2.1 -hide-all-packages -split-objs -i -idist/build/autogen -idist/build -i. -Idist/build -Iinclude -I../../includes -I../../rts -#include "HsBase.h" -odir dist/build -hidir dist/build -package rts-1.0 -O -fglasgow-exts -package-name base -cpp -idist/build -H16m -O -O -Rghc-timing -fgenerics -c GHC/Base.lhs -o dist/build/GHC/Base.o -ohi dist/build/GHC/Base.hi /tmp/ghc3117_0/ghc3117_0.split__178.s:unknown:missing indirect symbols for section (__TEXT,__symbol_stub)

This is because I forgot to copy my build.mk which turns off SPLIT_OBJS from my old tree. I didn't know that SPLIT_OBJS doesn't work on OS X, though. Anyway, after fixing this and syncing with head, I get:

../../compiler/stage1/ghc-inplace -package-name base-2.1 -hide-all-packages -split-objs -i -idist/build/autogen -idist/build -i. -Idist/build -Iinclude -I../../includes -I../../rts -#include "HsBase.h" -odir dist/build -hidir dist/build -package rts-1.0 -O -fglasgow-exts -package-name base -cpp -idist/build -H16m -O -O -Rghc-timing -fgenerics -c GHC/Base.lhs -o dist/build/GHC/Base.o -ohi dist/build/GHC/Base.hi

/tmp/ghc4105_0/ghc4105_0.split__1.s:6:0: Unknown pseudo-op: .type

/tmp/ghc4105_0/ghc4105_0.split__1.s:6:0:
    Rest of line ignored. 1st junk character valued 95 (_).

/tmp/ghc4105_0/ghc4105_0.split__1.s:17:0: Unknown pseudo-op: .type

/tmp/ghc4105_0/ghc4105_0.split__1.s:17:0:
    Rest of line ignored. 1st junk character valued 95 (_).

I assume the OS X assembler doesn't understand .type directives. On the mailing list, I find this patch which hasn't been applied to head yet:

Sat Jun 30 10:22:43 CEST 2007  Clemens Fruhwirth <[EMAIL PROTECTED]>
  * Restrict .type directives to Linux targets only

Alas, darcs apply doesn't work:

darcs: Cannot apply this patch bundle, this is a "--partial repository
We don't have the following patch:
Tue May  1 04:56:10 EST 2007  Alec Berryman <[EMAIL PROTECTED]>
  * Build arrows library if available

arrows is the only library in libraries/extra-packages not built when present

In fact, this missing patch was precisely the problem we (Manuel, rather) tried to fix in the ghc-ndp repo earlier. Alas, it seems that ghc-ndp simply inherited this from head as I get the same error if I try to darcs apply Clemens' patch to it, too. Alec's patch does appear in darcs changes, though.

Anyway, after manually changing PprMach.hs such that it doesn't spit out .type directives any more, I finally get a working build.

A summary:

1. Something seems to be not quite right with the head repository. Pulling from head and then pushing to ghc-ndp (which has been recreated only last week) used to fail complaining about the one missing patch before Manuel checkpointed it. I get the exact same failure when I darcs apply Clemens' patch to head.

2. SPLIT_OBJS doesn't seem to work on OS X. Could it perhaps only be turned on on architectures which support it (IIRC, there were other architectures which had problems with it).

2. Head doesn't build on Mac OS for me without Clemens' last patch. Perhaps the dynamic linking stuff could be done in a branch as it is bound to be quite destabilising?

3. make distclean still doesn't work properly. This is a pain, although a bearable one.

4. Trying to maintain a branch is still frustrating. I've just spend 4 hours (and had to rebuild ghc 6 or 7 times) trying to sync ghc-ndp with head. Even worse, in the last couple of months, we would have problems with building head itself more often than not. I think we lost *weeks* trying to work around this. IMO, this is a problem with the current development process. From my gcc hacking days I remember that the gcc maintainers would only accept patches if they passed the testsuite on at least two architectures. This worked wonders for the stability of gcc-head. I'd like to propose a similar policy for ghc, at least for patches which change OS-specific stuff (it's probably sufficient to test changes to the typechecker, simplifier etc. on just one architecture). Alternatively, could at least vastly destabilising changes (which the dynamic linking stuff is bound to be) be done in a branch? Concurrent development doesn't really work otherwise.

Sorry for sounding so frustrated but I really seem to spend more time on trying to get ghc to compile than doing actual NDP work.

Roman

_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to