[Haskell-cafe] Cabal bug? (was Re: Cabal: --enable-shared and executables)
magnus at therning.org
Sun Nov 3 05:46:04 UTC 2013
On Thu, Oct 31, 2013 at 05:16:11PM -0400, Albert Y. C. Lai wrote:
> On 13-10-31 04:26 PM, Magnus Therning wrote:
> >We've had a discussion about DSOs on the arch-haskell mailing list
> >and it made me realise one thing:
> > --enable-shared will cause the generation of DSOs for libraries, but
> > it won't cause executables to be dynamically linked
> >Is the only way to cause these executables to be dynamically linked
> >against their dependencies to pass the -dynamic flag to ghc (e.g. via
> >the --ghc-options flag when configuring the package)?
> Have you seen --enable-executable-dynamic? It's there since cabal-install
> 0.14 or earlier. It is also available to Setup.hs since Cabal 1.14 or
> earlier, which came with GHC 7.4.
> Have you done a "cabal install --help | less" lately? Also "cabal configure
> --help | less".
Now I have tried the `--enable-executable-dynamic` flag and have found
one problem with it, it doesn't work that well for packages that have
both executables and a library.
I tried it on pandoc. Here's what I got:
% file /usr/bin/pandoc
% /usr/bin/pandoc: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=bb046a49bb820ab4d592d154bd0a5064f40bba5b, stripped
So far so good, but
% pandoc --help
pandoc: error while loading shared libraries: libHSpandoc-1.12.1-ghc7.6.3.so: cannot open shared object file: No such file or directory
The DSO is installed though
% pacman -Ql haskell-pandoc|grep libHSpandoc
It just can't be found
% ldd /usr/bin/pandoc|grep libHSpandoc
libHSpandoc-1.12.1-ghc7.6.3.so => not found
libHSpandoc-types-1.12.3-ghc7.6.3.so => /usr/lib/ghc-7.6.3/site-local/pandoc-types-1.12.3/libHSpandoc-types-1.12.3-ghc7.6.3.so (0x00007f60bf3e1000)
The problem is that RPATH doesn't contain the location where the *installed* pandoc lib ends up, but only the location where the pandoc lib is *built*:
% readelf -d /usr/bin/pandoc|grep RPATH|head
0x000000000000000f (RPATH) Library rpath: [/build/haskell-pandoc/src/pandoc-1.12.1/dist/build:/usr/lib/ghc-7.6.3/site-local/zip-archive-0.1.4:/usr/lib/ghc...
Is there already a way to get Cabal to put in an RPATH such that an *installed*
executable works correctly, or is this a fairly serious bug in Cabal?
Magnus Therning OpenPGP: 0xAB4DFBA4
email: magnus at therning.org jabber: magnus at therning.org
twitter: magthe http://therning.org/magnus
Some operating systems are called 'user friendly', Linux however is
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 198 bytes
Desc: not available
More information about the Haskell-Cafe