Fix warnings (#547)
[hadrian.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
9   nixpkgs = import (_nixpkgs.fetchFromGitHub {
10     owner = "NixOS";
11     repo = "nixpkgs";
12     rev = "e7a327da5cffdf5e77e1924906a4f0983591bd3e";
13     sha256 = "1xzil4mayhggg2miwspbk12nihlszg0y4n6i4qacrxql5n75f0hr";
14   }){ overlays = [cabalHashes]; };
15
16
17
18   cabalHashes = sel: super: {
19     all-cabal-hashes = super.fetchurl {
20       url    = "https://github.com/commercialhaskell/all-cabal-hashes/archive/b2b93ae610f5f1b51d22b191f972dc3dec8f94c6.tar.gz";
21       sha256 = "0bffclpqbw62xff36qlzxghr042mhv0m06k5ml4298w6fv7ly1xw";
22     };
23   };
24
25   haskellPackages = nixpkgs.haskell.packages.ghc822;
26
27   removeBuild = path: type:
28     let baseName = baseNameOf (toString path);
29     in
30         ! (baseName == "_build"
31            || baseName == "dist"
32            || baseName == "dist-newstyle"
33            || baseName == ".stack-work"
34            || baseName == "config.log"
35            || baseName == "config.status"
36            || baseName == "shell.nix"
37            || nixpkgs.lib.hasSuffix ".sh" baseName
38            || !(nixpkgs.lib.cleanSourceFilter path type)) ;
39
40   filterSrc = path: builtins.filterSource removeBuild path;
41
42
43   hadrianPackages = nixpkgs.haskell.packages.ghc822.override {
44     overrides = self: super: let
45         localPackage = name: path: self.callCabal2nix name (filterSrc path) {};
46       in {
47         hadrian = localPackage "hadrian" ./. ;
48         happy = nixpkgs.haskell.lib.dontCheck (super.happy);
49         shake = self.callHackage "shake" "0.16.2" {};
50         extra = self.callHackage "extra" "1.6.4" {};
51         QuickCheck = self.callHackage "QuickCheck" "2.10" {};
52         Cabal = localPackage "Cabal" ./../libraries/Cabal/Cabal ;
53         filepath = localPackage "filepath" ./../libraries/filepath ;
54         text = localPackage "text" ./../libraries/text  ;
55         hpc = localPackage"hpc" ./../libraries/hpc ;
56         parsec = localPackage "parsec" ./../libraries/parsec ;
57         HUnit = nixpkgs.haskell.lib.dontCheck (self.callHackage "HUnit" "1.3.1.2" {});
58         process = localPackage "process" ./../libraries/process ;
59         directory = localPackage "directory" ./../libraries/directory ;
60       }; };
61
62   cabalPackages = nixpkgs.haskell.packages.ghc822.override {
63     overrides = self: super: let
64         localPackage = name: path: self.callCabal2nix name (filterSrc path) {};
65       in {
66         Cabal = localPackage "Cabal" ./../../cabal/Cabal ;
67         cabal-install = self.callPackage ./../../cabal/cabal-install.nix {};
68       }; };
69
70
71 in
72   nixpkgs.lib.overrideDerivation nixpkgs.haskell.packages.ghcHEAD.ghc
73     (drv: {
74       name = "ghc-dev";
75       nativeBuildInputs = drv.nativeBuildInputs ++
76         [ hadrianPackages.hadrian
77           nixpkgs.arcanist
78           nixpkgs.git
79           nixpkgs.python3Packages.sphinx
80           nixpkgs.texlive.combined.scheme-basic
81           (nixpkgs.haskell.packages.ghc822.ghcWithPackages
82             (ps: [ps.html ps.regex-compat ps.dump-core]))
83
84           #cabalPackages.cabal-install
85         ];
86     })
87