On Thu, May 30, 2019 at 06:37:50PM -0400, Daniel Moerner wrote:
> Thanks a lot for your work on this. I just built some of ghc 8.6.4 on
> a machine running -current using your patches.
> 
> Unfortunately, devel/hs-async doesn't build with this version of ghc
> and base (4.12):
> 
> Configuring async-2.2.1...
> [...]
> Setup: Encountered missing dependencies:
> base >=4.3 && <4.12, hashable >=1.1.1.0 && <1.3, stm >=2.2 && <2.5
> 
> Looking into this a bit, hackage says that async 2.2.1 supports base
> (>=4.3 && <4.13) (https://hackage.haskell.org/package/async), but this
> just seems to be a mistake in hackage. At present async supports base
> 4.12 only in git (and there's a fairly old issue request for a new
> release https://github.com/simonmar/async/issues/89).

The cabal / hackage / library people are clueless if it comes to
version limits in dependencies and when which part of a library
should be bumped. Instead of correcting this, they invented a
mechanism to publish "revised" meta data for a package via hackage.
For async-2.2.1, the "revised" package description can be found at

http://hackage.haskell.org/package/async-2.2.1/async.cabal

If you compare this against the package description contained in the
distfile (or at
http://hackage.haskell.org/package/async-2.2.1/src/async.cabal), you'll
see that the revised onealready as less strict dependencies (but of
course, this will fail again with the next update of ghc):

--- async.cabal-dist Fri May 31 11:09:12 2019
+++ async.cabal-hackage Fri May 31 11:10:12 2019
@@ -1,5 +1,6 @@
 name:                async
 version:             2.2.1
+x-revision:          2
 -- don't forget to update ./changelog.md!
 synopsis:            Run IO operations asynchronously and wait for their 
results
 
@@ -50,14 +51,14 @@
     if impl(ghc>=7.1)
         other-extensions: Trustworthy
     exposed-modules:     Control.Concurrent.Async
-    build-depends:       base >= 4.3 && < 4.12, hashable >= 1.1.1.0 && < 1.3, 
stm >= 2.2 && < 2.5
+    build-depends:       base >= 4.3 && < 4.13, hashable >= 1.1.1.0 && < 1.4, 
stm >= 2.2 && < 2.6
 
 test-suite test-async
     default-language: Haskell2010
     type:       exitcode-stdio-1.0
     hs-source-dirs: test
     main-is:    test-async.hs
-    build-depends: base >= 4.3 && < 4.12,
+    build-depends: base >= 4.3 && < 4.13,
                    async,
                    stm,
                    test-framework,

See http://hackage.haskell.org/package/async-2.2.1/revisions/ for that
concept of 'revised' package descriptions.

In other words: when doing operating system distribution packages
(like our ports), you have to fetch the distfile *and* also watch
for revised package descriptions, and if there are differences,
patch the package description contained in the distfile. An example
of this ist devel/hs-echo/patches/patch-echo_cabal in our ports
tree.

The haskell eco system is extremely hostile to people who try to
provide operating system distribution packages -- they think everyone
just uses cabal-install. That's the reason I try to keep the number
of hs-ports as low as possible (but to still provide some more or
less useful tools like darcs or xmonad).

Ciao,
        Kili

Reply via email to