Tests in Cabal

Adrian Hey ahey at iee.org
Thu Jan 10 06:24:42 EST 2008

Duncan Coutts wrote:
> On Wed, 2008-01-09 at 10:27 +0000, Adrian Hey wrote:
>> Is this really the way tests are supposed to be included?
>> It doesn't seem workable to me. I wonder if it would be better to just
>> build the lib first (without tests) and then separately build one or
>> more test executables?
>> What does everyone else do about this?
> I've only seen one package that actually uses tests integrated into the
> Setup.hs. So it seems everyone just runs tests manually. This is a
> fairly large hole in the Cabal story at the moment imho.
> Part of the problem is that we don't support custom Setup.hs stuff very
> well, we encourage people to use the simple build system. But for tests,
> even if it used the simple build system we'd end up making it use the
> custom flavour just to run some tests. It's not very satisfactory.
> I wonder if we shouldn't move tests into their own file completely. The
> problem always with custom Setup.hs scripts is that they're the first
> point of entry, and if it does not compile then everything is stuffed
> and you don't get a good error message.

One thing I've been trying today is building the test program as a
separate executable and then having Setup.hs run this..

import Distribution.Simple
import Distribution.PackageDescription(PackageDescription)
import Distribution.Simple.LocalBuildInfo(LocalBuildInfo)
import System.Cmd(system)

main :: IO ()
main = defaultMainWithHooks (simpleUserHooks {runTests = myTests})

myTests:: Args -> Bool -> PackageDescription -> LocalBuildInfo -> IO ()
myTests_ _ _ _ = system "myTestProgram" >> return ()

But I don't still don't seem to be able to build myTestProgram.hs
because it depends on the lib package which has just been built
but not yet registered. But I guess there might be some cabal file
or ghc-options magic that would make this possible without ghc
trying (and failing) to recompile the entire library. Can anyone
explain how to do this?

Adrian Hey

More information about the Libraries mailing list