On Fri, May 7, 2010 at 5:33 AM, David Fox <[email protected]> wrote: > Sometimes the "Setup build" command gets run twice, and in some mysterious > way this causes unresolved symbols when loading a library compiled against a > library to which this has happened, like this: > > Loading package syb-with-class-instances-text-0.0.1 ... linking ... done. > ghc: > /usr/lib/haskell-packages/ghc6/lib/happstack-extra-0.87/ghc-6.12.1/HShappstack-extra-0.87.o: > unknown symbol > `sybzmwithzmclasszm0zi6zi1_DataziGenericsziSYBziWithClassziInstances_constrZMada0ZN_closure' > ghc: unable to load package `happstack-extra-0.87' > > This is saying that while loading happstack-extra, it had to load the > dependent library syb-with-class-instances-text, and during that load it > expected a symbol to appear in syb-with-class which did not. That symbol > was in the library produced during the first Setup build, but it came out > with a different name during the second. How did > syb-with-class-instances-text find out about this old symbol name? I have > no idea. > > I do know that the second run occurs because the directory dist-ghc6 is > being used as a make rule target in hlibrary.mk, rather than using a stamp > file whose date won't change once it is created. The attached patch > replaces the uses of dist-ghc6 as a make target. Instead, it uses the stamp > file dist-ghc6/dist-ghc6-stamp. I am currently rebuilding all of our > packages with this fix. I've verified that the build is now only happening > once in syb-with-class, and the libraries with the unknown symbol above are > being shipped. >
A matching patch to hscolour is required, attached.
--- hscolour-1.16/debian/rules~ 2010-05-07 06:51:48.000000000 -0700 +++ hscolour-1.16/debian/rules 2010-05-07 06:48:57.000000000 -0700 @@ -26,7 +26,7 @@ chmod u+x $@ # Force generation of the wrapper script. -dist-ghc6 : hscolour-wrapper +dist-ghc6/dist-ghc6-stamp : hscolour-wrapper clean :: rm -f hscolour-wrapper
