@@ -22,8 +22,10 @@ import qualified Distribution.Nixpkgs.Meta as Nix
22import Distribution.Package
22import Distribution.Package
23import Distribution.PackageDescription
23import Distribution.PackageDescription
24import qualified Distribution.PackageDescription as Cabal
24import qualified Distribution.PackageDescription as Cabal
25+import Distribution.Types.ExeDependency as Cabal
25import Distribution.Types.LegacyExeDependency as Cabal
26import Distribution.Types.LegacyExeDependency as Cabal
26import Distribution.Types.PkgconfigDependency as Cabal
27import Distribution.Types.PkgconfigDependency as Cabal
28+import Distribution.Types.UnqualComponentName as Cabal
27import Distribution.PackageDescription.Configuration as Cabal
29import Distribution.PackageDescription.Configuration as Cabal
28import Distribution.Types.ComponentRequestedSpec as Cabal
30import Distribution.Types.ComponentRequestedSpec as Cabal
29import Distribution.System
31import Distribution.System
@@ -64,14 +66,14 @@ finalizeGenericPackageDescription haskellResolver arch compiler flags constraint
64 Right (d,_) -> (d,[])
66 Right (d,_) -> (d,[])
66fromPackageDescription :: HaskellResolver -> NixpkgsResolver -> [Dependency] -> FlagAssignment -> PackageDescription -> Derivation
68fromPackageDescription :: HaskellResolver -> NixpkgsResolver -> [Dependency] -> FlagAssignment -> PackageDescription -> Derivation
67−fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags (PackageDescription {..}) = normalize $ postProcess $ nullDerivation
69+fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags PackageDescription {..} = normalize $ postProcess $ nullDerivation
68 & isLibrary .~ isJust library
70 & isLibrary .~ isJust library
69 & pkgid .~ package
71 & pkgid .~ package
70 & revision .~ xrev
72 & revision .~ xrev
71 & isLibrary .~ isJust library
73 & isLibrary .~ isJust library
72 & isExecutable .~ not (null executables)
74 & isExecutable .~ not (null executables)
73 & extraFunctionArgs .~ mempty
75 & extraFunctionArgs .~ mempty
74− & libraryDepends .~ maybe mempty (convertBuildInfo . libBuildInfo) library
76+ & libraryDepends .~ foldMap (convertBuildInfo . libBuildInfo) (maybeToList library ++ subLibraries)
75 & executableDepends .~ mconcat (map (convertBuildInfo . buildInfo) executables)
77 & executableDepends .~ mconcat (map (convertBuildInfo . buildInfo) executables)
76 & testDepends .~ mconcat (map (convertBuildInfo . testBuildInfo) testSuites)
78 & testDepends .~ mconcat (map (convertBuildInfo . testBuildInfo) testSuites)
77 & benchmarkDepends .~ mconcat (map (convertBuildInfo . benchmarkBuildInfo) benchmarks)
79 & benchmarkDepends .~ mconcat (map (convertBuildInfo . benchmarkBuildInfo) benchmarks)
@@ -124,12 +126,16 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags (Packag
124 resolveInHackageThenNixpkgs i | haskellResolver (Dependency (mkPackageName (i^.ident)) anyVersion) = resolveInHackage i
126 resolveInHackageThenNixpkgs i | haskellResolver (Dependency (mkPackageName (i^.ident)) anyVersion) = resolveInHackage i
125 | otherwise = resolveInNixpkgs i
127 | otherwise = resolveInNixpkgs i
129+ internalLibNames :: [PackageName]
130+ internalLibNames = fmap unqualComponentNameToPackageName . catMaybes $ libName <$> subLibraries
127 convertBuildInfo :: Cabal.BuildInfo -> Nix.BuildInfo
132 convertBuildInfo :: Cabal.BuildInfo -> Nix.BuildInfo
128 convertBuildInfo Cabal.BuildInfo {..} = mempty
133 convertBuildInfo Cabal.BuildInfo {..} = mempty
129− & haskell .~ Set.fromList [ resolveInHackage (toNixName x) | (Dependency x _) <- targetBuildDepends ]
134+ & haskell .~ Set.fromList [ resolveInHackage (toNixName x) | (Dependency x _) <- targetBuildDepends, x `notElem` internalLibNames ]
130 & system .~ Set.fromList [ resolveInNixpkgs y | x <- extraLibs, y <- libNixName x ]
135 & system .~ Set.fromList [ resolveInNixpkgs y | x <- extraLibs, y <- libNixName x ]
131 & pkgconfig .~ Set.fromList [ resolveInNixpkgs y | PkgconfigDependency x _ <- pkgconfigDepends, y <- libNixName (unPkgconfigName x) ]
136 & pkgconfig .~ Set.fromList [ resolveInNixpkgs y | PkgconfigDependency x _ <- pkgconfigDepends, y <- libNixName (unPkgconfigName x) ]
132− & tool .~ Set.fromList [ resolveInHackageThenNixpkgs y | LegacyExeDependency x _ <- buildTools, y <- buildToolNixName x ]
137+ & tool .~ Set.fromList (map resolveInHackageThenNixpkgs . concatMap buildToolNixName
138+ $ [ unPackageName x | ExeDependency x _ _ <- buildToolDepends ] ++ [ x | LegacyExeDependency x _ <- buildTools ])
134 convertSetupBuildInfo :: Cabal.SetupBuildInfo -> Nix.BuildInfo
140 convertSetupBuildInfo :: Cabal.SetupBuildInfo -> Nix.BuildInfo
135 convertSetupBuildInfo bi = mempty
141 convertSetupBuildInfo bi = mempty