[GHC] #12770: Shrink list of RUNPATH entries for GHC libraries
GHC
ghc-devs at haskell.org
Thu Oct 27 21:34:38 UTC 2016
#12770: Shrink list of RUNPATH entries for GHC libraries
-------------------------------------+-------------------------------------
Reporter: slyfox | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.1
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
Recently Cabal/GHC acquired '''dynamic-library-dirs''' file tag support
in ''' .conf''' files.
Cabal-HEAD when used with GHC-HEAD puts all shared libraries
into a single directory except the GHC itself (a fallout of
https://github.com/haskell/cabal/issues/4046 ).
In https://github.com/haskell/cabal/issues/4046#issuecomment-256603828
Christiaan explains our current sources of RUNPATH tags.
Basically, current GHC dynamic library layout is still
per-directory:
{{{
/usr/lib64/ghc-8.1.20161026/Cabal-1.25.0.0/libHSCabal-1.25.0.0-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/array-0.5.1.1/libHSarray-0.5.1.1-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/base-4.9.0.0/libHSbase-4.9.0.0-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/binary-0.8.3.0/libHSbinary-0.8.3.0-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/bytestring-0.10.8.1/libHSbytestring-0.10.8.1-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/compact-1.0.0.0/libHScompact-1.0.0.0-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/containers-0.5.7.1/libHScontainers-0.5.7.1-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/deepseq-1.4.2.0/libHSdeepseq-1.4.2.0-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/directory-1.2.6.2/libHSdirectory-1.2.6.2-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/filepath-1.4.1.0/libHSfilepath-1.4.1.0-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/ghc-8.1/libHSghc-8.1-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/ghc-boot-8.1/libHSghc-
boot-8.1-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/ghc-boot-th-8.1/libHSghc-boot-
th-8.1-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/ghc-prim-0.5.0.0/libHSghc-
prim-0.5.0.0-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/ghci-8.1/libHSghci-8.1-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/haskeline-0.7.2.3/libHShaskeline-0.7.2.3-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/hoopl-3.10.2.1/libHShoopl-3.10.2.1-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/hpc-0.6.0.3/libHShpc-0.6.0.3-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/integer-gmp-1.0.0.1/libHSinteger-
gmp-1.0.0.1-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/pretty-1.1.3.3/libHSpretty-1.1.3.3-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/process-1.4.2.0/libHSprocess-1.4.2.0-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/rts/libHSrts-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/rts/libHSrts_debug-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/rts/libHSrts_l-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/rts/libHSrts_thr-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/rts/libHSrts_thr_debug-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/rts/libHSrts_thr_l-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/template-haskell-2.11.0.0/libHStemplate-
haskell-2.11.0.0-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/terminfo-0.4.0.2/libHSterminfo-0.4.0.2-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/time-1.6.0.1/libHStime-1.6.0.1-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/transformers-0.5.2.0/libHStransformers-0.5.2.0-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/unix-2.7.2.0/libHSunix-2.7.2.0-ghc8.1.20161026.so
/usr/lib64/ghc-8.1.20161026/xhtml-3000.2.1/libHSxhtml-3000.2.1-ghc8.1.20161026.so
}}}
Could we store them exactly as Cabal does? Namely
{{{
dynamic-library-dirs: /usr/lib64/x86_64-linux-ghc-8.1.20161026
}}}
Then for globally installed packages (how distributions usually build
packages)
we would have exactly one RUNPATH.
Currently we have:
{{{
$ readelf -a /usr/bin/read-idiii | grep RUNPATH
0x000000000000001d (RUNPATH) Library runpath:
[/usr/lib64/ghc-8.1.20161026/array-0.5.1.1:/usr/lib64/ghc-8.1.20161026/base-4.9.0.0:/usr/lib64/ghc-8.1.20161026/binary-0.8.3.0:/usr/lib64/ghc-8.1.20161026/bytestring-0.10.8.1:/usr/lib64/ghc-8.1.20161026/containers-0.5.7.1:/usr/lib64/ghc-8.1.20161026/deepseq-1.4.2.0:/usr/lib64/ghc-8.1.20161026/directory-1.2.6.2:/usr/lib64/ghc-8.1.20161026/filepath-1.4.1.0:/usr/lib64/ghc-8.1.20161026
/ghc-prim-0.5.0.0:/usr/lib64/ghc-8.1.20161026/integer-
gmp-1.0.0.1:/usr/lib64/ghc-8.1.20161026/process-1.4.2.0:/usr/lib64/ghc-8.1.20161026/rts:/usr/lib64/ghc-8.1.20161026/time-1.6.0.1:/usr/lib64/ghc-8.1.20161026/transformers-0.5.2.0:/usr/lib64/ghc-8.1.20161026/unix-2.7.2.0:/usr/lib64/x86_64
-linux-ghc-8.1.20161026]
}}}
And that could be just single
{{{
/usr/lib64/x86_64-linux-ghc-8.1.20161026
}}}
It's close to ticket #11587.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12770>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list