Update Hadrian
[ghc.git] / shell.nix
1 # Invoking nix-shell sets up an environment where we can build ghc
2 # by only invoking hadrian.
3
4
5 { nixpkgs ? import <nixpkgs> {} }:
6
7 let
8   haskellPackages = nixpkgs.haskell.packages.ghc821;
9
10   removeBuild = path: type:
11     let baseName = baseNameOf (toString path);
12     in
13         ! (baseName == "_build"
14            || baseName == "dist"
15            || baseName == "dist-newstyle"
16            || baseName == ".stack-work"
17            || baseName == "config.log"
18            || baseName == "config.status"
19            || nixpkgs.lib.hasSuffix ".sh" baseName
20            || !(nixpkgs.lib.cleanSourceFilter path type)) ;
21
22   filterSrc = path: builtins.filterSource removeBuild path;
23
24
25   hadrianPackages = nixpkgs.haskell.packages.ghc821.override {
26     overrides = self: super: let
27         localPackage = name: path: self.callCabal2nix name (filterSrc path) {};
28       in {
29         hadrian = localPackage "hadrian" ./. ;
30         shake = self.callHackage "shake" "0.16" {};
31         Cabal = localPackage "Cabal" ./../libraries/Cabal/Cabal ;
32         filepath = localPackage "filepath" ./../libraries/filepath ;
33         text = localPackage "text" ./../libraries/text  ;
34         hpc = localPackage"hpc" ./../libraries/hpc ;
35         parsec = localPackage "parsec" ./../libraries/parsec ;
36         HUnit = nixpkgs.haskell.lib.dontCheck (self.callHackage "HUnit" "1.3.1.2" {});
37         process = localPackage "process" ./../libraries/process ;
38         directory = localPackage "directory" ./../libraries/directory ;
39       }; };
40
41 in
42
43   nixpkgs.stdenv.mkDerivation {
44     name = "ghc-dev";
45     buildInputs = [
46                     hadrianPackages.hadrian
47                     nixpkgs.haskell.compiler.ghc821
48                     haskellPackages.alex
49                     haskellPackages.happy
50                     nixpkgs.python3
51                     nixpkgs.git
52                     nixpkgs.autoconf
53                     nixpkgs.automake
54                     nixpkgs.perl
55                     nixpkgs.gcc
56                     nixpkgs.python3Packages.sphinx
57                     nixpkgs.ncurses
58                     nixpkgs.m4
59                     nixpkgs.gmp
60                     nixpkgs.file ];
61   }