Ivan Lazar Miljenovic wrote:

Pete Chown <[email protected]> writes:

Is there a way of making Cabal install dependencies using the system
package manager, then?

If you mean cabal-install, then no, there's no integration on either
side.

That's what I thought. As a result of this, you may find that you end up creating private builds of packages which are shipped by your distribution. You ask Cabal to install a package, which is not shipped by your distribution. Cabal will then build that package's dependencies, *even if* those dependencies should really be installed using your distribution's package manager.

This is exactly the same with C programs.

Yes and no. If I download the source of a C library and build my own shared libraries, my programs might not work on machines where the distribution's version of that library is in use. The particular problem in the Haskell world, though, is that Cabal will create this situation by default.

(I believe current versions of ghc insist on linking entirely
dynamically or entirely statically.  This makes the situation worse,
because the lack of a shared library for X prevents the use of shared
libraries for anything else.)

No, 6.12 defaults to statically but allows dynamic linking as well.

That's not what I meant. What I meant is that you can't link against some Haskell libraries statically, and some dynamically. When linking C this isn't a problem. If you don't have a shared version of a particular library, gcc will pick the static version instead. You can even choose static or dynamic for each individual library:

$ gcc foo.c -o foo -lz
$ ldd foo
        linux-gate.so.1 =>  (0x00d0b000)
        libz.so.1 => /lib/libz.so.1 (0x00dd5000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00152000)
        /lib/ld-linux.so.2 (0x00a69000)
$ gcc foo.c -o foo -Wl,-Bstatic -lz -Wl,-Bdynamic
$ ldd foo
        linux-gate.so.1 =>  (0x00918000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00db0000)
        /lib/ld-linux.so.2 (0x002e5000)

Really?  For C, Gentoo ships very few which either default or have the
option of static libraries, and I assume the same is true for binary
distributions.

Sorry I misunderstood what you were saying; you're right. I'm not familiar with Gentoo, but on Ubuntu virtually everything defaults to shared libraries. You can choose static if you really want it, though, as in the example above.

Pete

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to