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

Reply via email to