From 5682212ae09e079c057c28b2f72ba191e0511af3 Mon Sep 17 00:00:00 2001 From: "(cdep)illabout" Date: Sat, 29 Feb 2020 23:32:44 +0900 Subject: [PATCH] haskellPackages.stack: get compiling with ghc882 --- .../haskell-modules/configuration-common.nix | 24 +++- .../configuration-hackage2nix.yaml | 1 - .../haskell-modules/hackage-packages.nix | 2 - .../patches/stack-ghc882-support.patch | 104 ++++++++++++++++++ 4 files changed, 126 insertions(+), 5 deletions(-) create mode 100644 pkgs/development/haskell-modules/patches/stack-ghc882-support.patch diff --git a/pkgs/development/haskell-modules/configuration-common.nix b/pkgs/development/haskell-modules/configuration-common.nix index 0e7aa40272e..55eb4f47cda 100644 --- a/pkgs/development/haskell-modules/configuration-common.nix +++ b/pkgs/development/haskell-modules/configuration-common.nix @@ -1072,8 +1072,28 @@ self: super: { # Generate shell completion. cabal2nix = generateOptparseApplicativeCompletion "cabal2nix" super.cabal2nix; - stack = generateOptparseApplicativeCompletion "stack" (super.stack.overrideScope (self: super: { - })); + + stack = + generateOptparseApplicativeCompletion + "stack" + (appendPatches super.stack [ + # This PR fixes stack up to be able to build with Cabal-3. This patch + # can probably be dropped when the next stack release is made after + # 2.1.3.1. + (pkgs.fetchpatch { + url = "https://github.com/commercialhaskell/stack/pull/5156.diff"; + sha256 = "0knk6f9fh1b4fxkhvx5gfrwclal4vi2va4zy34gpmwnjr7knf42y"; + excludes = [ + "snapshot-lts-12.yaml" + "snapshot-nightly.yaml" + "snapshot.yaml" + ]; + }) + # This patch fixes stack up to be able to build various GHC-8.8 changes. + # This can hopefully be dropped when the next stack release is made + # after 2.1.3.1 (assuming the next stack release uses GHC-8.8). + ./patches/stack-ghc882-support.patch + ]); # musl fixes # dontCheck: use of non-standard strptime "%s" which musl doesn't support; only used in test diff --git a/pkgs/development/haskell-modules/configuration-hackage2nix.yaml b/pkgs/development/haskell-modules/configuration-hackage2nix.yaml index 5dc173ae632..995363b5012 100644 --- a/pkgs/development/haskell-modules/configuration-hackage2nix.yaml +++ b/pkgs/development/haskell-modules/configuration-hackage2nix.yaml @@ -9572,7 +9572,6 @@ broken-packages: - stable-marriage - stable-memo - stable-tree - - stack - stack-bump - stack-fix - stack-hpc-coveralls diff --git a/pkgs/development/haskell-modules/hackage-packages.nix b/pkgs/development/haskell-modules/hackage-packages.nix index b2775227fb9..ed7b9d772da 100644 --- a/pkgs/development/haskell-modules/hackage-packages.nix +++ b/pkgs/development/haskell-modules/hackage-packages.nix @@ -226938,8 +226938,6 @@ self: { ''; description = "The Haskell Tool Stack"; license = stdenv.lib.licenses.bsd3; - hydraPlatforms = stdenv.lib.platforms.none; - broken = true; }) {}; "stack-bump" = callPackage diff --git a/pkgs/development/haskell-modules/patches/stack-ghc882-support.patch b/pkgs/development/haskell-modules/patches/stack-ghc882-support.patch new file mode 100644 index 00000000000..0d906638e7f --- /dev/null +++ b/pkgs/development/haskell-modules/patches/stack-ghc882-support.patch @@ -0,0 +1,104 @@ +diff --git a/src/Stack/Coverage.hs b/src/Stack/Coverage.hs +index d95fa332..f80e121a 100644 +--- a/src/Stack/Coverage.hs ++++ b/src/Stack/Coverage.hs +@@ -235,7 +235,7 @@ generateHpcReportForTargets opts tixFiles targetNames = do + case nc of + CTest testName -> + liftM (pkgPath ) $ parseRelFile (T.unpack testName ++ "/" ++ T.unpack testName ++ ".tix") +- _ -> fail $ ++ _ -> liftIO $ fail $ + "Can't specify anything except test-suites as hpc report targets (" ++ + packageNameString name ++ + " is used with a non test-suite target)" +diff --git a/src/Stack/Package.hs b/src/Stack/Package.hs +index b69337ce..08eb9b9f 100644 +--- a/src/Stack/Package.hs ++++ b/src/Stack/Package.hs +@@ -463,7 +463,7 @@ makeObjectFilePathFromC + makeObjectFilePathFromC cabalDir namedComponent distDir cFilePath = do + relCFilePath <- stripProperPrefix cabalDir cFilePath + relOFilePath <- +- parseRelFile (replaceExtension (toFilePath relCFilePath) "o") ++ parseRelFile (System.FilePath.replaceExtension (toFilePath relCFilePath) "o") + return (componentOutputDir namedComponent distDir relOFilePath) + + -- | Make the global autogen dir if Cabal version is new enough. +diff --git a/src/Stack/Script.hs b/src/Stack/Script.hs +index c63c9f62..70257be1 100644 +--- a/src/Stack/Script.hs ++++ b/src/Stack/Script.hs +@@ -172,8 +172,8 @@ scriptCmd opts = do + + toExeName fp = + if osIsWindows +- then replaceExtension fp "exe" +- else dropExtension fp ++ then System.FilePath.replaceExtension fp "exe" ++ else System.FilePath.dropExtension fp + + getPackagesFromImports + :: FilePath -- ^ script filename +diff --git a/src/Stack/Setup.hs b/src/Stack/Setup.hs +index 8bbfc45c..5c5b028c 100644 +--- a/src/Stack/Setup.hs ++++ b/src/Stack/Setup.hs +@@ -876,7 +876,7 @@ buildGhcFromSource getSetupInfo' installed (CompilerRepository url) commitId fla + (_,files) <- listDir (cwd bindistPath) + let + isBindist p = "ghc-" `isPrefixOf` (toFilePath (filename p)) +- && fileExtension (filename p) == ".xz" ++ && (maybe "" id (fileExtension (filename p))) == ".xz" + mbindist = filter isBindist files + case mbindist of + [bindist] -> do +diff --git a/src/Stack/Storage/Project.hs b/src/Stack/Storage/Project.hs +index dc5318d8..984e6259 100644 +--- a/src/Stack/Storage/Project.hs ++++ b/src/Stack/Storage/Project.hs +@@ -12,6 +12,9 @@ + {-# LANGUAGE UndecidableInstances #-} + {-# OPTIONS_GHC -Wno-unused-top-binds -Wno-identities #-} + ++{-# LANGUAGE DerivingStrategies #-} ++{-# LANGUAGE StandaloneDeriving #-} ++ + -- | Work with SQLite database used for caches across a single project. + module Stack.Storage.Project + ( initProjectStorage +diff --git a/src/Stack/Storage/User.hs b/src/Stack/Storage/User.hs +index 3845b094..09695344 100644 +--- a/src/Stack/Storage/User.hs ++++ b/src/Stack/Storage/User.hs +@@ -12,6 +12,9 @@ + {-# LANGUAGE UndecidableInstances #-} + {-# OPTIONS_GHC -Wno-unused-top-binds -Wno-identities #-} + ++{-# LANGUAGE DerivingStrategies #-} ++{-# LANGUAGE StandaloneDeriving #-} ++ + -- | Work with SQLite database used for caches across an entire user account. + module Stack.Storage.User + ( initUserStorage +diff --git a/src/Stack/Types/Config.hs b/src/Stack/Types/Config.hs +index a5cc22b5..a329d353 100644 +--- a/src/Stack/Types/Config.hs ++++ b/src/Stack/Types/Config.hs +@@ -406,7 +406,7 @@ instance FromJSON CabalConfigKey where + instance FromJSONKey CabalConfigKey where + fromJSONKey = FromJSONKeyTextParser parseCabalConfigKey + +-parseCabalConfigKey :: Monad m => Text -> m CabalConfigKey ++parseCabalConfigKey :: MonadFail m => Text -> m CabalConfigKey + parseCabalConfigKey "$targets" = pure CCKTargets + parseCabalConfigKey "$locals" = pure CCKLocals + parseCabalConfigKey "$everything" = pure CCKEverything +@@ -974,7 +974,7 @@ parseConfigMonoidObject rootDir obj = do + + return ConfigMonoid {..} + where +- handleExplicitSetupDep :: Monad m => (Text, Bool) -> m (Maybe PackageName, Bool) ++ handleExplicitSetupDep :: MonadFail m => (Text, Bool) -> m (Maybe PackageName, Bool) + handleExplicitSetupDep (name', b) = do + name <- + if name' == "*"