#3780: unix-2.4.0.0 fails with base 4.1
---------------------------------+------------------------------------------
Reporter: duncan | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: libraries/unix | Version: 6.12.1
Keywords: | Difficulty: Easy (less than 1 hour)
Os: Unknown/Multiple | Testcase:
Architecture: Unknown/Multiple | Failure: Other
---------------------------------+------------------------------------------
The unix package states:
{{{
build-depends: base >=4.1 && <4.3
}}}
And while it does compile with base 4.1, using ghc-6.10, nothing can
successfully link against it.
The symptoms are:
{{{
/usr/lib64/ghc-6.10.4/base-4.1.0.0/libHSbase-4.1.0.0.a(PrelIOUtils.o): In
function `__hscore_d_name':
(.text+0x1c0): multiple definition of `__hscore_d_name'
/home/duncan/.cabal/lib/unix-2.4.0.0/ghc-6.10.4/libHSunix-2.4.0.0.a(dirUtils.o):dirUtils.c:(.text+0x0):
first defined here
/usr/lib64/ghc-6.10.4/base-4.1.0.0/libHSbase-4.1.0.0.a(PrelIOUtils.o): In
function `__hscore_free_dirent':
(.text+0x4f0): multiple definition of `__hscore_free_dirent'
/home/duncan/.cabal/lib/unix-2.4.0.0/ghc-6.10.4/libHSunix-2.4.0.0.a(dirUtils.o):dirUtils.c:(.text+0x10):
first defined here
/home/duncan/.cabal/lib/unix-2.4.0.0/ghc-6.10.4/libHSunix-2.4.0.0.a(IO.o):
In function `sk63_info':
(.text+0x30c4): undefined reference to `fcntl_read'
/home/duncan/.cabal/lib/unix-2.4.0.0/ghc-6.10.4/libHSunix-2.4.0.0.a(IO.o):
In function `sk6A_info':
(.text+0x31f0): undefined reference to `fcntl_write'
/home/duncan/.cabal/lib/unix-2.4.0.0/ghc-6.10.4/libHSunix-2.4.0.0.a(IO.o):
In function `sk8h_info':
(.text+0x36cc): undefined reference to `fcntl_read'
/home/duncan/.cabal/lib/unix-2.4.0.0/ghc-6.10.4/libHSunix-2.4.0.0.a(IO.o):
In function `sl4O_info':
(.text+0x3a52): undefined reference to `fcntl_lock'
/home/duncan/.cabal/lib/unix-2.4.0.0/ghc-6.10.4/libHSunix-2.4.0.0.a(IO.o):
In function `sl6S_info':
(.text+0x3cc2): undefined reference to `fcntl_lock'
/home/duncan/.cabal/lib/unix-2.4.0.0/ghc-6.10.4/libHSunix-2.4.0.0.a(IO.o):
In function `sl9I_info':
(.text+0x402a): undefined reference to `fcntl_lock'
}}}
There are two problems here, the duplicate `__hscore_*` symbols and and
the missing `fcntl_*` symbols.
The `__hscore_d_name` C function really is duplicated. There is one copy
in `base/include/HsBase.h` in ghc-6.10, there is another copy in
`cbits/dirUtils.c` in unix-2.4.0.0. Clearly what has happened is that the
function from base has been moved into the unix package. However that
means when building the unix package with the older base then we get both.
The solution is to rename the one in the unix package. Ideally we could
limit the visibility of symbols somehow.
The `fcntl_read` are not defined in the unix package. They are defined in
`HsBase.h` in ghc-6.12 but not in 6.10. Hence they are also missing when
unix-2.4.0.0 is built against the older base. The solution is to define
them locally.
Originally filed as Cabal ticket:
http://hackage.haskell.org/trac/hackage/ticket/620
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/3780>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs