diff --git a/pkgs/development/haskell-modules/configuration-ghc-9.4.x.nix b/pkgs/development/haskell-modules/configuration-ghc-9.4.x.nix index 6b78a528a05b..6d2335fefe73 100644 --- a/pkgs/development/haskell-modules/configuration-ghc-9.4.x.nix +++ b/pkgs/development/haskell-modules/configuration-ghc-9.4.x.nix @@ -2,10 +2,17 @@ let inherit (pkgs) fetchpatch lib; - inherit (lib) throwIfNot versionOlder; + checkAgainAfter = pkg: ver: msg: act: + if builtins.compareVersions pkg.version ver <= 0 then act + else + builtins.throw "Check if '${msg}' was resolved in ${pkg.pname} ${pkg.version} and update or remove this"; in -self: super: { +with haskellLib; +self: super: let + doctest_0_20_broken = p: checkAgainAfter self.doctest "0.20.0" "doctest broken on 9.4" (dontCheck p); + jailbreakForCurrentVersion = p: v: checkAgainAfter p v "bad bounds" (doJailbreak p); +in { llvmPackages = lib.dontRecurseIntoAttrs self.ghc.llvmPackages; # Disable GHC core libraries. @@ -48,4 +55,173 @@ self: super: { # GHC only bundles the xhtml library if haddock is enabled, check if this is # still the case when updating: https://gitlab.haskell.org/ghc/ghc/-/blob/0198841877f6f04269d6050892b98b5c3807ce4c/ghc.mk#L463 xhtml = if self.ghc.hasHaddock or true then null else self.xhtml_3000_2_2_1; + + # Tests fail because of typechecking changes + conduit = dontCheck super.conduit; + + # 0.30 introduced support for GHC 9.2. + cryptonite = doDistribute self.cryptonite_0_30; + + # Too strict bound on base + # https://github.com/haskell/cabal/issues/8509 + # Requested versions of Cabal, Cabal-syntax and process match GHC 9.4's for now + cabal-install = doJailbreak super.cabal-install; + cabal-install-solver = doJailbreak super.cabal-install-solver; + + # Test failure due to new Cabal 3.8 version. Since the failure only pertains + # to a change in how Cabal internally represents some platforms and we depend + # on the type of representation anywhere, this failure is harmless. Can be + # removed after https://github.com/NixOS/cabal2nix/pull/571 is merged. + # TODO(@sternenseemann): merge and release a fixed version + distribution-nixpkgs = dontCheck super.distribution-nixpkgs; + cabal2nix = dontCheck super.cabal2nix; + cabal2nix-unstable = dontCheck super.cabal2nix-unstable; + + # build fails on due to ghc api changes + # unfinished PR that doesn't yet compile: + # https://github.com/sol/doctest/pull/375 + doctest = markBroken super.doctest_0_20_0; + # consequences of doctest breakage follow: + http-types = doctest_0_20_broken super.http-types; + iproute = doctest_0_20_broken super.iproute; + foldl = doctest_0_20_broken super.foldl; + prettyprinter-ansi-terminal = doctest_0_20_broken super.prettyprinter-ansi-terminal; + pretty-simple = doctest_0_20_broken super.pretty-simple; + http-date = doctest_0_20_broken super.http-date; + network-byte-order = doctest_0_20_broken super.network-byte-order; + co-log-core = doctest_0_20_broken (doJailbreak super.co-log-core); + xml-conduit = doctest_0_20_broken (dontCheck super.xml-conduit); + validation-selective = doctest_0_20_broken (dontCheck super.validation-selective); + + double-conversion = markBroken super.double-conversion; + blaze-textual = checkAgainAfter super.double-conversion "2.0.4.1" "double-conversion fails to build; required for testsuite" (dontCheck super.blaze-textual); + ghc-source-gen = checkAgainAfter super.ghc-source-gen "0.4.3.0" "fails to build" (markBroken super.ghc-source-gen); + + lucid = jailbreakForCurrentVersion super.lucid "2.11.1"; + invariant = jailbreakForCurrentVersion super.invariant "0.5.6"; + implicit-hie-cradle = jailbreakForCurrentVersion super.implicit-hie-cradle "0.5.0.0"; + + haskell-src-meta = doJailbreak super.haskell-src-meta; + + # Tests fail in GHC 9.2 + extra = dontCheck super.extra; + + # Jailbreaks & Version Updates + + aeson = self.aeson_2_1_1_0; + aeson-diff = doctest_0_20_broken (dontCheck super.aeson-diff); + lens-aeson = self.lens-aeson_1_2_2; + + assoc = doJailbreak super.assoc; + async = doJailbreak super.async; + base64-bytestring = doJailbreak super.base64-bytestring; + base-compat = self.base-compat_0_12_2; + base-compat-batteries = self.base-compat-batteries_0_12_2; + binary-instances = doJailbreak super.binary-instances; + ChasingBottoms = doJailbreak super.ChasingBottoms; + constraints = doJailbreak super.constraints; + cpphs = overrideCabal (drv: { postPatch = "sed -i -e 's,time >=1.5 && <1.11,time >=1.5 \\&\\& <1.12,' cpphs.cabal";}) super.cpphs; + data-fix = doJailbreak super.data-fix; + dec = doJailbreak super.dec; + ed25519 = doJailbreak super.ed25519; + ghc-byteorder = doJailbreak super.ghc-byteorder; + ghc-lib = doDistribute self.ghc-lib_9_4_2_20220822; + ghc-lib-parser = doDistribute self.ghc-lib-parser_9_4_2_20220822; + ghc-lib-parser-ex = doDistribute self.ghc-lib-parser-ex_9_4_0_0; + hackage-security = doJailbreak super.hackage-security; + hashable = super.hashable_1_4_1_0; + hashable-time = doJailbreak super.hashable-time; + HTTP = overrideCabal (drv: { postPatch = "sed -i -e 's,! Socket,!Socket,' Network/TCP.hs"; }) (doJailbreak super.HTTP); + integer-logarithms = overrideCabal (drv: { postPatch = "sed -i -e 's, <1.1, <1.3,' integer-logarithms.cabal"; }) (doJailbreak super.integer-logarithms); + indexed-traversable = doJailbreak super.indexed-traversable; + indexed-traversable-instances = doJailbreak super.indexed-traversable-instances; + lifted-async = doJailbreak super.lifted-async; + lukko = doJailbreak super.lukko; + lzma-conduit = doJailbreak super.lzma-conduit; + parallel = doJailbreak super.parallel; + path = doJailbreak super.path; + polyparse = overrideCabal (drv: { postPatch = "sed -i -e 's, <0.11, <0.12,' polyparse.cabal"; }) (doJailbreak super.polyparse); + primitive = dontCheck (doJailbreak self.primitive_0_7_4_0); + regex-posix = doJailbreak super.regex-posix; + resolv = doJailbreak super.resolv; + singleton-bool = doJailbreak super.singleton-bool; + + # 2022-09-02: Too strict bounds on lens + # https://github.com/GetShopTV/swagger2/pull/242 + swagger2 = doctest_0_20_broken (dontCheck (doJailbreak super.swagger2)); + + base-orphans = dontCheck super.base-orphans; + + # Note: Any compilation fixes need to be done on the versioned attributes, + # since those are used for the internal dependencies between the versioned + # hspec packages in configuration-common.nix. + hspec = self.hspec_2_10_6; + hspec-core = self.hspec-core_2_10_6; + hspec-meta = self.hspec-meta_2_10_5; + hspec-discover = self.hspec-discover_2_10_6; + + # the dontHaddock is due to a GHC panic. might be this bug, not sure. + # https://gitlab.haskell.org/ghc/ghc/-/issues/21619 + # + # We need >= 1.1.2 for ghc-9.4 support, but we don't have 1.1.x in + # hackage-packages.nix + hedgehog = doDistribute (dontHaddock super.hedgehog_1_2); + # does not work with hedgehog 1.2 yet: + # https://github.com/qfpl/tasty-hedgehog/pull/63 + tasty-hedgehog = markBroken super.tasty-hedgehog; + # due to tasty-hedgehog + retry = checkAgainAfter super.tasty-hedgehog "1.3.0.0" "tasty-hedgehog broken" (dontCheck super.retry); + + # https://github.com/dreixel/syb/issues/38 + syb = dontCheck super.syb; + + splitmix = doJailbreak super.splitmix; + th-desugar = self.th-desugar_1_14; + time-compat = doJailbreak super.time-compat; + tomland = doJailbreak super.tomland; + type-equality = doJailbreak super.type-equality; + unordered-containers = doJailbreak super.unordered-containers; + vector = dontCheck super.vector; + vector-binary-instances = doJailbreak super.vector-binary-instances; + + # fixed in 1.16.x but it's not in hackage-packages yet. + rebase = jailbreakForCurrentVersion super.rebase "1.15.0.3"; + rerebase = jailbreakForCurrentVersion super.rerebase "1.15.0.3"; + + hpack = overrideCabal (drv: { + # Cabal 3.6 seems to preserve comments when reading, which makes this test fail + # 2021-10-10: 9.2.1 is not yet supported (also no issue) + testFlags = [ + "--skip=/Hpack/renderCabalFile/is inverse to readCabalFile/" + ] ++ drv.testFlags or []; + }) (doJailbreak super.hpack); + + # lens >= 5.1 supports 9.2.1 + lens = doDistribute self.lens_5_2; + + # Apply patches from head.hackage. + language-haskell-extract = appendPatch (pkgs.fetchpatch { + url = "https://gitlab.haskell.org/ghc/head.hackage/-/raw/dfd024c9a336c752288ec35879017a43bd7e85a0/patches/language-haskell-extract-0.2.4.patch"; + sha256 = "0w4y3v69nd3yafpml4gr23l94bdhbmx8xky48a59lckmz5x9fgxv"; + }) (doJailbreak super.language-haskell-extract); + + # Tests depend on `parseTime` which is no longer available + hourglass = dontCheck super.hourglass; + + memory = super.memory_0_18_0; + + # https://github.com/sjakobi/bsb-http-chunked/issues/38 + bsb-http-chunked = dontCheck super.bsb-http-chunked; + + # need bytestring >= 0.11 which is only bundled with GHC >= 9.2 + regex-rure = doDistribute (markUnbroken super.regex-rure); + jacinda = doDistribute super.jacinda; + some = doJailbreak super.some; + + # 1.3 introduced support for GHC 9.2.x, so when this assert fails, the jailbreak can be removed + hashtables = assert super.hashtables.version == "1.2.4.2"; doJailbreak super.hashtables; + + # 2022-08-01: Tests are broken on ghc 9.2.4: https://github.com/wz1000/HieDb/issues/46 + hiedb = dontCheck super.hiedb; + } diff --git a/pkgs/top-level/release-haskell.nix b/pkgs/top-level/release-haskell.nix index 167896af4d2b..0f9c461539e6 100644 --- a/pkgs/top-level/release-haskell.nix +++ b/pkgs/top-level/release-haskell.nix @@ -53,6 +53,7 @@ let ghc8107 ghc902 ghc924 + ghc942 ]; # packagePlatforms applied to `haskell.packages.*` @@ -354,12 +355,26 @@ let # working as expected. cabal-install = released; Cabal_3_6_3_0 = released; + Cabal_3_8_1_0 = released; cabal2nix = released; cabal2nix-unstable = released; funcmp = released; - haskell-language-server = released; + haskell-language-server = [ + compilerNames.ghc884 + compilerNames.ghc8107 + compilerNames.ghc902 + compilerNames.ghc924 + # https://github.com/haskell/haskell-language-server/issues/3190 + ]; hoogle = released; - hlint = released; + hlint = [ + compilerNames.ghc884 + compilerNames.ghc8107 + compilerNames.ghc902 + compilerNames.ghc924 + # https://github.com/ndmitchell/hlint/issues/1413 + ]; + hpack = released; hsdns = released; jailbreak-cabal = released; language-nix = released;