diff options
Diffstat (limited to 'hadrian/shell.nix')
-rw-r--r-- | hadrian/shell.nix | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/hadrian/shell.nix b/hadrian/shell.nix new file mode 100644 index 0000000000..041bf092a2 --- /dev/null +++ b/hadrian/shell.nix @@ -0,0 +1,89 @@ +# Invoking nix-shell sets up an environment where we can build ghc +# by only invoking hadrian. + + +{ _nixpkgs ? import <nixpkgs> {} }: + +let + + nixpkgs = import (_nixpkgs.fetchFromGitHub { + owner = "NixOS"; + repo = "nixpkgs"; + rev = "e7a327da5cffdf5e77e1924906a4f0983591bd3e"; + sha256 = "1xzil4mayhggg2miwspbk12nihlszg0y4n6i4qacrxql5n75f0hr"; + }){ overlays = [cabalHashes]; }; + + + + cabalHashes = sel: super: { + all-cabal-hashes = super.fetchurl { + url = "https://github.com/commercialhaskell/all-cabal-hashes/archive/b2b93ae610f5f1b51d22b191f972dc3dec8f94c6.tar.gz"; + sha256 = "0bffclpqbw62xff36qlzxghr042mhv0m06k5ml4298w6fv7ly1xw"; + }; + }; + + haskellPackages = nixpkgs.haskell.packages.ghc822; + + removeBuild = path: type: + let baseName = baseNameOf (toString path); + in + ! (baseName == "_build" + || baseName == "dist" + || baseName == "dist-newstyle" + || baseName == ".stack-work" + || baseName == "config.log" + || baseName == "config.status" + || baseName == "shell.nix" + || nixpkgs.lib.hasSuffix ".sh" baseName + || !(nixpkgs.lib.cleanSourceFilter path type)) ; + + filterSrc = path: builtins.filterSource removeBuild path; + + + hadrianPackages = nixpkgs.haskell.packages.ghc822.override { + overrides = self: super: let + localPackage = name: path: self.callCabal2nix name (filterSrc path) {}; + in { + hadrian = localPackage "hadrian" ./. ; + happy = nixpkgs.haskell.lib.dontCheck (super.happy); + shake = self.callHackage "shake" "0.16.2" {}; + extra = self.callHackage "extra" "1.6.4" {}; + QuickCheck = self.callHackage "QuickCheck" "2.10" {}; + Cabal = localPackage "Cabal" ./../libraries/Cabal/Cabal ; + filepath = localPackage "filepath" ./../libraries/filepath ; + text = localPackage "text" ./../libraries/text ; + hpc = localPackage"hpc" ./../libraries/hpc ; + parsec = localPackage "parsec" ./../libraries/parsec ; + HUnit = nixpkgs.haskell.lib.dontCheck (self.callHackage "HUnit" "1.3.1.2" {}); + process = localPackage "process" ./../libraries/process ; + directory = localPackage "directory" ./../libraries/directory ; + }; }; + + cabalPackages = nixpkgs.haskell.packages.ghc822.override { + overrides = self: super: let + localPackage = name: path: self.callCabal2nix name (filterSrc path) {}; + in { + Cabal = localPackage "Cabal" ./../../cabal/Cabal ; + cabal-install = self.callPackage ./../../cabal/cabal-install.nix {}; + }; }; + + +in + nixpkgs.lib.overrideDerivation nixpkgs.haskell.packages.ghcHEAD.ghc + (drv: { + name = "ghc-dev"; + nativeBuildInputs = drv.nativeBuildInputs ++ + [ hadrianPackages.hadrian + nixpkgs.arcanist + nixpkgs.git + nixpkgs.gmp.dev nixpkgs.gmp.out + nixpkgs.ncurses.dev nixpkgs.ncurses.out + nixpkgs.python3Packages.sphinx + nixpkgs.texlive.combined.scheme-basic + (nixpkgs.haskell.packages.ghc822.ghcWithPackages + (ps: [ps.html ps.regex-compat ps.dump-core])) + + #cabalPackages.cabal-install + ]; + }) + |