[Haskell-cafe] Building a Haskell project which depends on an old version of base

Steven J. Murdoch Steven.Murdoch at cl.cam.ac.uk
Tue Feb 14 21:14:09 CET 2012


I'm trying to build a Haskell project[1] which appears to be dependent
on an function in a old version of base (GHC.Handle.fillReadBuffer).
I've downgraded to Haskell platform 2010.2.0.0 which comes with GHC
6.12.3 (installed by homebrew on MacOS X 10.6.8), and ghc-pkg appears
to indicate the backwards compatible library for base is available:
$ ghc-pkg list base
/Users/ghc6/homebrew/Cellar/ghc/6.12.3/lib/ghc/package.conf.d
   base-3.0.3.2
   base-4.2.0.2
/Users/ghc6/.ghc/i386-darwin-6.12.3/package.conf.d

However, when I try to cabal build the package, I get the following error:
$ cabal -v build
Creating dist/build (and its parents)
Creating dist/build/autogen (and its parents)
Preprocessing executables for TorDNSEL-0.1.1...
Building TorDNSEL-0.1.1...
Building executable tordnsel...
Creating dist/build/tordnsel (and its parents)
Creating dist/build/tordnsel/tordnsel-tmp (and its parents)
/Users/ghc6/homebrew/bin/ghc --make -o dist/build/tordnsel/tordnsel
-hide-all-packages -fbuilding-cabal-package -package-conf
dist/package.conf.inplace -i -idist/build/tordnsel/tordnsel-tmp -isrc
-idist/build/autogen -Idist/build/autogen
-Idist/build/tordnsel/tordnsel-tmp -optP-include
-optPdist/build/autogen/cabal_macros.h -odir
dist/build/tordnsel/tordnsel-tmp -hidir
dist/build/tordnsel/tordnsel-tmp -stubdir
dist/build/tordnsel/tordnsel-tmp -package-id
HUnit-1.2.2.1-6237339c6ad5673d3cd8f82c4c7f6343 -package-id
array-0.3.0.1-438000c197b51c147f229b54edbf632e -package-id
base-3.0.3.2-260693a92016991a03206b5a55f6a411 -package-id
binary-0.5.1.0-b72d4a82a5aecd9243ff0f50456b3d47 -package-id
bytestring-0.9.1.7-64b858f95ff0dacc8acf396bb53cf4b9 -package-id
containers-0.3.0.0-ee442470d8dcc9e45f31677c400c5379 -package-id
directory-1.0.1.1-fa3418f21f42269537be694d5922dd6d -package-id
mtl-1.1.0.2-336254fecf8a77054f76cb33671a5177 -package-id
network-2.2.1.7-2eb3746f71ba30c3e4940b75df5ea8b8 -package-id
stm-2.1.2.1-95639ea16e2e2cbf4accbabda98a1809 -package-id
time-1.1.4-d9f7b7932dc3a4863006ed6b1d525856 -package-id
unix-2.4.0.2-94ca14c8a73570f9d75aca642b4de0c6 -O -O2 -Wall
-DVERSION="0.1.1-dev" src/tordnsel.hs -lcrypto
[ 4 of 39] Compiling TorDNSEL.Util    (
dist/build/tordnsel/tordnsel-tmp/TorDNSEL/Util.hs,
dist/build/tordnsel/tordnsel-tmp/TorDNSEL/Util.o )

src/TorDNSEL/Util.hsc:143:23:
    Module `GHC.Handle' does not export `fillReadBuffer'

src/TorDNSEL/Util.hsc:143:39:
    Module `GHC.Handle' does not export `readCharFromBuffer'

src/TorDNSEL/Util.hsc:145:26:
    Module `GHC.IOBase' does not export `Buffer(..)'

The flags to ghc indicate that base-3.0.3.2 is being requested, and
the documentation for base-3.0.3.2 indicates that
GHC.Handle.fillReadBuffer exists[2]. Can anyone explain why I am
getting this error message? Could it be because Util is a .hsc rather
than .hs file?

In tordnsel.cabal I've made two changes: set Build-Depends to include
"base>=2.0 && < 4" to tell ghc that I really want base-3 and removed
-Werror from GHC-Options (to ignore the deprecation warnings).
Otherwise it is as provided in this distribution[3].

Building manually has the same result (though oddly I get a
deprecation warning from building the .hs files but not the .hsc file,
which led to my suspicion about hsc being an issue.

$ hsc2hs TorDNSEL/Util.hsc
$ ghc -package-id base-3.0.3.2-260693a92016991a03206b5a55f6a411 --make
TorDNSEL/Util.hs
[1 of 3] Compiling TorDNSEL.DeepSeq ( TorDNSEL/DeepSeq.hs, TorDNSEL/DeepSeq.o )

TorDNSEL/DeepSeq.hs:1:0:
    Warning: Module `Prelude' is deprecated:
               You are using the old package `base' version 3.x.
               Future GHC versions will not support base version 3.x. You
               should update your code to use the new base version 4.x.

TorDNSEL/Util.hs:1:11:
    Warning: -#include and INCLUDE pragmas are deprecated: They no
longer have any effect
[2 of 3] Compiling TorDNSEL.Compat.Exception (
TorDNSEL/Compat/Exception.hs, TorDNSEL/Compat/Exception.o )

TorDNSEL/Compat/Exception.hs:1:0:
    Warning: Module `Prelude' is deprecated:
               You are using the old package `base' version 3.x.
               Future GHC versions will not support base version 3.x. You
               should update your code to use the new base version 4.x.
[3 of 3] Compiling TorDNSEL.Util    ( TorDNSEL/Util.hs, TorDNSEL/Util.o )

TorDNSEL/Util.hsc:143:23:
    Module `GHC.Handle' does not export `fillReadBuffer'

TorDNSEL/Util.hsc:143:39:
    Module `GHC.Handle' does not export `readCharFromBuffer'

TorDNSEL/Util.hsc:145:26:
    Module `GHC.IOBase' does not export `Buffer(..)'

Thanks in advance,
Steven.

[1] https://gitweb.torproject.org/tordnsel.git
[2] http://hackage.haskell.org/packages/archive/base/3.0.3.2/doc/html/GHC-Handle.html#v%3AfillReadBuffer
[3] https://gitweb.torproject.org/tordnsel.git/blob/HEAD:/tordnsel.cabal



More information about the Haskell-Cafe mailing list