@@ -1,6 +1,7 @@
1module Distribution.Nixpkgs.Haskell.Stack where
1module Distribution.Nixpkgs.Haskell.Stack where
3import Control.Lens
3import Control.Lens
4+import Data.Maybe (fromMaybe)
4import Data.Text as T
5import Data.Text as T
5import Distribution.Compiler as Compiler
6import Distribution.Compiler as Compiler
6import Distribution.Nixpkgs.Fetch
7import Distribution.Nixpkgs.Fetch
@@ -42,30 +43,36 @@ getStackPackageFromDb
42getStackPackageFromDb optHackageDb stackPackage =
43getStackPackageFromDb optHackageDb stackPackage =
43 PackageSourceSpec.getPackage
44 PackageSourceSpec.getPackage
44 (unHackageDb <$> optHackageDb)
45 (unHackageDb <$> optHackageDb)
45− (stackLocationToSource $ stackPackage ^. spLocation)
46+ (stackLocationToSource (stackPackage ^. spLocation) (stackPackage ^. spDir))
47−stackLocationToSource :: PackageLocation -> Source
48+stackLocationToSource
50+ -- | Subdirectory in the package containing cabal file.
48−stackLocationToSource = \case
53+stackLocationToSource pl mCabalDir = case pl of
49 HackagePackage p -> Source
54 HackagePackage p -> Source
50 { sourceUrl = "cabal://" ++ T.unpack p
55 { sourceUrl = "cabal://" ++ T.unpack p
51 , sourceRevision = mempty
56 , sourceRevision = mempty
52 , sourceHash = UnknownHash
57 , sourceHash = UnknownHash
53− , sourceCabalDir = mempty }
58+ , sourceCabalDir = cabalDir }
54 StackFilePath p -> Source
59 StackFilePath p -> Source
55 { sourceUrl = p
60 { sourceUrl = p
56 , sourceRevision = mempty
61 , sourceRevision = mempty
57 , sourceHash = UnknownHash
62 , sourceHash = UnknownHash
58− , sourceCabalDir = mempty }
63+ , sourceCabalDir = cabalDir }
59 StackUri uri -> Source
64 StackUri uri -> Source
60 { sourceUrl = URI.uriToString id uri mempty
65 { sourceUrl = URI.uriToString id uri mempty
61 , sourceRevision = mempty
66 , sourceRevision = mempty
62 , sourceHash = UnknownHash
67 , sourceHash = UnknownHash
63− , sourceCabalDir = mempty }
68+ , sourceCabalDir = cabalDir }
64 StackRepo r -> Source
69 StackRepo r -> Source
65 { sourceUrl = T.unpack $ r ^. rUri
70 { sourceUrl = T.unpack $ r ^. rUri
66 , sourceRevision = T.unpack $ r ^. rCommit
71 , sourceRevision = T.unpack $ r ^. rCommit
67 , sourceHash = UnknownHash
72 , sourceHash = UnknownHash
68− , sourceCabalDir = mempty }
73+ , sourceCabalDir = cabalDir }
75+ cabalDir = fromMaybe mempty mCabalDir
70packageDerivation
77packageDerivation
71 :: StackPackagesConfig
78 :: StackPackagesConfig
@@ -79,6 +86,7 @@ packageDerivation conf optHackageDb stackPackage = do
79 & src .~ pkgSource pkg
86 & src .~ pkgSource pkg
80 -- TODO: remove after Nixos/Nixpkgs #27196 released
87 -- TODO: remove after Nixos/Nixpkgs #27196 released
81 & enableSeparateDataOutput .~ False
88 & enableSeparateDataOutput .~ False
89+ & subpath %~ flip fromMaybe (stackPackage ^. spDir)
82 return $ if stackPackage ^. spExtraDep
90 return $ if stackPackage ^. spExtraDep
84 & doCheck &&~ conf ^. spcDoCheckStackage
92 & doCheck &&~ conf ^. spcDoCheckStackage