[GHC] #11042: Template Haskell / GHCi does not respect extra-lib-dirs
GHC
ghc-devs at haskell.org
Sat Oct 22 13:35:33 UTC 2016
#11042: Template Haskell / GHCi does not respect extra-lib-dirs
-------------------------------------+-------------------------------------
Reporter: mboes | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.10.2
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: Compile-time | Unknown/Multiple
crash | Test Case:
Blocked By: 11238 | Blocking:
Related Tickets: #10458 #5289 | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by trommler):
Replying to [comment:10 rwbarton]:
> This seems fairly bad and shouldn't block forever on a redesign if
there's a way to fix it in the short term.
>
> However, I don't understand the issue precisely. The ticket title has a
kind of type error, since `extra-lib-dirs` is a flag that is only
meaningful to Cabal, not to ghc. Could someone provide a reproducer that
does not involve stack or Cabal, or characterize the interaction between
Cabal and ghc?
Let me describe the issue and perhaps you could help me turn this into a
regression test:
1. We have a Haskell package that calls out to a C library. In this ticket
the zlib package calls the C library `libz.so`.
1. We want to compile a module that depends on the Haskell package (from
1) and also uses Template Haskell.
1. To compile the module Template Haskell loads all packages that are
specified as dependencies (in the Cabal file or on the ghc command line).
Currently this means loading all transitive dependencies of each package
to be loaded. Package loading fails because `libz.so` cannot be found in
any standard directory because on the system @mboes describes it is
installed elsewhere.
The title of the ticket suggests to specify the directory where `libz.so`
is located in the cabal file (of the package using zlib). I think this
would violate abstraction: As a client of package zlib I expect zlib to be
self-contained and provide all information that is needed to use it.
In fact for a dynamically linked zlib package that is indeed the case.
When building a dynamically linked package we record an R(UN)PATH for C
libraries that are not installed in standard locations. If we just loaded
the shared library of package zlib (`libHSzlib<...>.so` we would not need
to know where to find `libz.so` because the system runtime loader takes
care of that. But currently GHC's dynamic linker mimics the behavior of
the (static) RTS linker and would load `libz.so` before it loads
`libHSzlib<...>.so`.
I could extract a patch from my work on #11238 that implements what I said
in the third paragraph of comment:6. It would not only be a short term fix
but also be a step in the right direction.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11042#comment:12>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list