Skip to content

cabal check doesn't account for conditionals #4629

Closed
@bgamari

Description

@bgamari

In binary-serialise-cbor we are trying to provide exposed-modules for GHC 7.8, where reexported-modules is not supported. For instance,

library
  default-language:  Haskell2010
  hs-source-dirs:      src
  if impl(ghc >= 7.9)
    reexported-modules:
      Codec.Serialise            as Data.Binary.Serialise.CBOR,
      Codec.Serialise.Class      as Data.Binary.Serialise.CBOR.Class,
      Codec.Serialise.Decoding   as Data.Binary.Serialise.CBOR.Decoding,
      Codec.Serialise.Encoding   as Data.Binary.Serialise.CBOR.Encoding,
      Codec.CBOR.FlatTerm        as Data.Binary.Serialise.CBOR.FlatTerm,
      Codec.Serialise.IO         as Data.Binary.Serialise.CBOR.IO,
      Codec.CBOR.Magic           as Data.Binary.Serialise.CBOR.Magic,
      Codec.CBOR.Pretty          as Data.Binary.Serialise.CBOR.Pretty,
      Codec.Serialise.Properties as Data.Binary.Serialise.CBOR.Properties,
      Codec.CBOR.Write           as Data.Binary.Serialise.CBOR.Write,
      Codec.CBOR.Term            as Data.Binary.Serialise.CBOR.Term,
      Codec.Serialise.Tutorial   as Data.Binary.Serialise.CBOR.Tutorial
    exposed-modules: Data.Binary.Serialise.CBOR.Read
  else
    -- GHC 7.8 doesn't support module re-exports
    exposed-modules:
      Data.Binary.Serialise.CBOR,
      Data.Binary.Serialise.CBOR.Class,
      Data.Binary.Serialise.CBOR.Decoding,
      Data.Binary.Serialise.CBOR.Encoding,
      Data.Binary.Serialise.CBOR.FlatTerm,
      Data.Binary.Serialise.CBOR.IO,
      Data.Binary.Serialise.CBOR.Magic,
      Data.Binary.Serialise.CBOR.Pretty,
      Data.Binary.Serialise.CBOR.Properties,
      Data.Binary.Serialise.CBOR.Read,
      Data.Binary.Serialise.CBOR.Write,
      Data.Binary.Serialise.CBOR.Term

  build-depends:
    base < 5,
    bytestring < 1.0,
    cborg     == 0.1.*,
    serialise == 0.1.*

Unfortunately, cabal check fails on this with,

$ cabal check
The package will not build sanely due to these errors:
* Duplicate modules in library: Data.Binary.Serialise.CBOR,
Data.Binary.Serialise.CBOR.Class, Data.Binary.Serialise.CBOR.Decoding,
Data.Binary.Serialise.CBOR.Encoding, Data.Binary.Serialise.CBOR.FlatTerm,
Data.Binary.Serialise.CBOR.IO, Data.Binary.Serialise.CBOR.Magic,
Data.Binary.Serialise.CBOR.Pretty, Data.Binary.Serialise.CBOR.Properties,
Data.Binary.Serialise.CBOR.Read, Data.Binary.Serialise.CBOR.Term,
Data.Binary.Serialise.CBOR.Write

Hackage would reject this package.

It seems that Cabal doesn't account for the conditional when computing this check.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions