From 58d00038a26efad6f103f020410d11f9c114899d Mon Sep 17 00:00:00 2001
From: Ben Sima <ben@bsima.me>
Date: Tue, 14 Dec 2021 08:14:12 -0500
Subject: Add custom package db to ghcPkgFindModule

This means my call to ghc-pkg will look at the full package set from Hoogle.
---
 Biz/Bild.hs               |  8 +++-----
 Biz/Bild.nix              | 24 +++++++++++++++++-------
 Biz/Bild/Deps/Haskell.nix |  4 +---
 3 files changed, 21 insertions(+), 15 deletions(-)

(limited to 'Biz')

diff --git a/Biz/Bild.hs b/Biz/Bild.hs
index 17fb883..4d7fadd 100644
--- a/Biz/Bild.hs
+++ b/Biz/Bild.hs
@@ -413,13 +413,11 @@ analyze path = do
                 }
 
 ghcPkgFindModule :: Set String -> String -> IO (Set String)
-ghcPkgFindModule acc m =
+ghcPkgFindModule acc m = do
+  packageDb <- Env.getEnv "GHC_PACKAGE_PATH"
   Process.readProcess
     "ghc-pkg"
-    -- instead of relying on global deps declared in ./Bild/Deps/Haskell.nix, I
-    -- could fetch a global package-db from hackage API and pass it here with
-    -- --package-db=FILE
-    ["--names-only", "--simple-output", "find-module", m]
+    ["--package-db", packageDb, "--names-only", "--simple-output", "find-module", m]
     ""
     /> String.lines
     /> Set.fromList
diff --git a/Biz/Bild.nix b/Biz/Bild.nix
index 8d57d54..6279d2f 100644
--- a/Biz/Bild.nix
+++ b/Biz/Bild.nix
@@ -22,6 +22,12 @@ let
   #mkGhcjsPackageSet = nixpkgs.haskell.packages.${ghcjsCompiler}.ghcWithPackages;
 
   ghcPackageSetFull = mkGhcPackageSet haskellDeps;
+  ghcPackageSetBild = mkGhcPackageSet (hpkgs: with hpkgs; [
+    aeson async base bytestring conduit conduit-extra containers directory
+    docopt filepath process protolude rainbow regex-applicative split tasty
+    tasty-hunit tasty-quickcheck text
+    wai # can remove when removed from Biz.Log
+  ]);
 in rec {
   inherit (nixpkgs) lib stdenv pkgs sources;
 
@@ -30,11 +36,14 @@ in rec {
   bild = stdenv.mkDerivation {
     name = "bild";
     src = ../.;
-    nativeBuildInputs = [ ghcPackageSetFull ];
+    nativeBuildInputs = [ ghcPackageSetBild ];
     buildInputs = [ nixpkgs.makeWrapper ];
     strictDeps = true;
     buildPhase = ''
-      mkdir -p $out/bin
+      mkdir -p $out/bin $out/lib/ghc-${ghcPackageSetFull.version}
+      cp -r \
+        ${ghcPackageSetFull}/lib/ghc-${ghcPackageSetFull.version}/package.conf.d \
+        $out/lib/ghc-${ghcPackageSetFull.version}
       ghc \
         -Werror \
         -i. \
@@ -43,7 +52,10 @@ in rec {
         -o $out/bin/bild
     '';
     installPhase = ''
-      wrapProgram $out/bin/bild --prefix PATH : ${lib.makeBinPath [ ghcPackageSetFull ]}
+      wrapProgram $out/bin/bild \
+        --prefix PATH : ${lib.makeBinPath [ ghcPackageSetBild ]} \
+        --set GHC_PACKAGE_PATH \
+        $out/lib/ghc-${ghcPackageSetFull.version}/package.conf.d
     '';
   };
 
@@ -59,11 +71,9 @@ in rec {
     # working directory:
     MAIN = "." + lib.strings.removePrefix (toString src) (toString main);
     buildPhase = ''
-      set -eux
       mkdir $out
-      : analyzing with bild
-      ${bild}/bin/bild --json "$MAIN" 1> $out/analysis.json 2> $out/stderr
-      set +eux
+      ${bild}/bin/bild --json "$MAIN" 1> $out/analysis.json \
+        2> >(tee -a $out/stderr >&2)
     '';
     installPhase = "exit 0";
   };
diff --git a/Biz/Bild/Deps/Haskell.nix b/Biz/Bild/Deps/Haskell.nix
index bbc8ac4..39139af 100644
--- a/Biz/Bild/Deps/Haskell.nix
+++ b/Biz/Bild/Deps/Haskell.nix
@@ -1,8 +1,6 @@
 hpkgs:
 
-# This is the global set of Haskell packages which gets deployed to Hoogle, and
-# is used to create the global 'nix-shell' environment. Eventually, bild should
-# create the environment for me.
+# This is the global set of Haskell packages which gets deployed to Hoogle.
 
 with hpkgs;
 [
-- 
cgit v1.2.3