diff --git a/default.nix b/default.nix index 2872c9e5473e278d96d76de64caeea5a8f46bd38..85743b914393847fa8adc383ade8d394f06fa7cd 100644 --- a/default.nix +++ b/default.nix @@ -44,8 +44,15 @@ let bootstrapHaskellPackages = self.haskell.packages.ghc865; haskellPackages = - let patchesOverrides = self.callPackage patches {}; - patches = self.callPackage (import ./scripts/overrides.nix) { patches = ./patches; }; + let patchesOverrides = self.callPackage patches { + extraDepends = import scripts/extra-depends.nix { + pkgs = self; + hsPkgs = haskellPackages; + }; + }; + patches = self.callPackage (import ./scripts/overrides.nix) { + patches = ./patches; + }; overrides = self.lib.composeExtensions haskellOverrides diff --git a/scripts/extra-depends.nix b/scripts/extra-depends.nix new file mode 100644 index 0000000000000000000000000000000000000000..96f5bedbc96ff054a76f5a41c0dc72e6a613b58e --- /dev/null +++ b/scripts/extra-depends.nix @@ -0,0 +1,5 @@ +{ pkgs, hsPkgs }: + +{ + zlib = { inherit (pkgs) zlib; }; +} diff --git a/scripts/generate-nix-overrides.hs b/scripts/generate-nix-overrides.hs index 9096a05efd0e00a1a645d4d3d507e82450658f47..a70c519836f5dcb35ca15078fc4828006686d95b 100755 --- a/scripts/generate-nix-overrides.hs +++ b/scripts/generate-nix-overrides.hs @@ -29,19 +29,14 @@ generateOverrides prefix patchDir = do mkOverride :: (PackageName, [([Int], String)]) -> String mkOverride (display -> pName, patches) = - unlines $ - [unwords [pName, "= if", superPname, "== null then", superPname]] - ++ packages ++ - [ "else", superPname, ";"] + unlines [ unwords $ [ pName, "=" ] ++ packages ++ [";"] ] where superPname = "super." ++ pName quotes s = "\"" ++ s ++ "\"" packages :: [String] packages = map mkPackages (sortBy (comparing fst) patches) mkPackages (version, patch) = - unwords ["else if", superPname ++ ".version == " - , quotes (intercalate "." (map show version)) - ," then (", patch, ")"] + unwords ["(", patch, ")"] override :: FilePath -> FilePath -> FilePath -> String -> PatchType -> String override prefix patchDir extlessPath nixexpr ptype = @@ -55,11 +50,7 @@ generateOverride prefix patchDir (patchExtless, patchTypes) = do version = versionNumbers (packageVersion pid) versionStr = intercalate "." (map show version) str x = "\""++x++"\"" - --baseDrv = "super."++pname - --baseDrv = "(super.callHackage "++str pname++" "++str versionStr++" {})" - baseDrv = - let src = "fetchHackageTarball "++str pname++" "++str versionStr++" {})" - in "(super."++pname++".overrideAttrs (oldAttrs: { src="++str src++"; version="++str versionStr++"; }))" + baseDrv = "(super.callHackage "++str pname++" "++str versionStr++" (extraDepends."++pname++" or {}))" return . (packageName pid,) . (version,) $ "haskell.lib.doJailbreak (dontRevise " ++ foldl' (override prefix patchDir patchExtless) baseDrv patchTypes ++ ")" @@ -92,10 +83,9 @@ main = do [prefix, dir] -> return (prefix, dir) _ -> fail "Usage: generate-nix-overrides [<prefix>, patchdir]" overrides <- generateOverrides prefix patchDir - putStrLn "{haskell}:" + putStrLn "{ haskell, extraDepends ? {} }:" putStrLn "let dontRevise = pkg: haskell.lib.overrideCabal pkg (old: { editedCabalFile = null; }); in" putStrLn "let setCabalFile = pkg: file: haskell.lib.overrideCabal pkg (old: { postPatch = ''cp ${file} ${old.pname}.cabal''; }); in" - putStrLn "let fetchHackageTarball = pname: version: let component = haskellPackages.all-cabal-hashes-component pname version; v putStrLn "self: super: {\n" putStrLn overrides putStrLn "}"