Ticket #566 (new defect)

Opened 4 years ago

Last modified 17 months ago

Don't try and resolve dependencies for packages that are not buildable

Reported by: batterseapower Owned by:
Priority: normal Milestone:
Component: Cabal library Version: 1.6.0.1
Severity: normal Keywords:
Cc: Difficulty: hard (< 1 day)
GHC Version: Platform:

Description

I had a component like this:

Executable edit-distance-benchmark
        Main-Is:                Text/EditDistance/Benchmark.hs
        
        if flag(splitBase)
                Build-Depends:  base >= 3 && < 5, array >= 0.1, random >= 1.0, old-time >= 1.0, process >= 1.0,
                                parallel >= 1.0, unix >= 2.3
        else
                Build-Depends:  base < 3,
                                parallel >= 1.0, unix >= 2.3
        
        if !flag(benchmark)
                Buildable:      False
            
        Ghc-Options:            -O2 -fvia-C -Wall

However, I've only just found out that this meant that you couldn't install any parts of my package on Windows, because Cabal tried to resolve the "unix" dependency even if "benchmark" was False (the default)!

I've solved this like so:

Executable edit-distance-benchmark
        Main-Is:                Text/EditDistance/Benchmark.hs
        
        if !flag(benchmark)
                Buildable:      False
        else
                if flag(splitBase)
                        Build-Depends:  base >= 3 && < 5, array >= 0.1, random >= 1.0, old-time >= 1.0, process >= 1.0,
                                        parallel >= 1.0, unix >= 2.3
                else
                        Build-Depends:  base < 3,
                                        parallel >= 1.0, unix >= 2.3
            
        Ghc-Options:            -O2 -fvia-C -Wall

But really Cabal should not need to resolve dependencies for things that are not buildable.

Change History

Changed 3 years ago by duncan

  • difficulty changed from very easy (<1 hour) to hard (< 1 day)

The semantics for "buildable: False" is actually rather tricky. We don't have a precise description of what it should mean. See this discussion:  http://haskell.org/pipermail/glasgow-haskell-users/2009-December/018155.html

Changed 17 months ago by elga

Note: See TracTickets for help on using tickets.