Skip to content

Commit cd1f96f

Browse files
committed
Suggestion: wire parts of the builder together in the same place
1 parent dee3423 commit cd1f96f

File tree

3 files changed

+39
-43
lines changed

3 files changed

+39
-43
lines changed

builder/default.nix

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ let
66
inherit ghc haskellLib makeConfigFiles ghcForComponent hsPkgs;
77
};
88

9+
setup-builder = haskellLib.weakCallPackage pkgs ./setup-builder.nix {
10+
ghc = buildGHC;
11+
hsPkgs = hsPkgs.buildPackages;
12+
inherit haskellLib nonReinstallablePkgs makeConfigFiles;
13+
};
14+
915
# Wraps GHC to provide dependencies in a way that works for both the
1016
# component builder and for nix-shells.
1117
ghcForComponent = import ./ghc-for-component-wrapper.nix {
@@ -31,7 +37,7 @@ in {
3137
# Build a Haskell package from its config.
3238
# TODO: this pkgs is the adjusted pkgs, but pkgs.pkgs is unadjusted
3339
build-package = haskellLib.weakCallPackage pkgs ./hspkg-builder.nix {
34-
inherit haskellLib ghc buildGHC comp-builder nonReinstallablePkgs hsPkgs;
40+
inherit haskellLib ghc buildGHC comp-builder setup-builder;
3541
};
3642

3743
# Same as haskellPackages.shellFor in nixpkgs.

builder/hspkg-builder.nix

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{ pkgs, buildPackages, stdenv, lib, haskellLib, ghc, buildGHC, fetchurl, runCommand, pkgconfig, comp-builder, nonReinstallablePkgs, hsPkgs }:
1+
{ pkgs, buildPackages, stdenv, lib, haskellLib, ghc, buildGHC, fetchurl, runCommand, comp-builder, setup-builder }:
22

33

44
{ flags
@@ -38,13 +38,9 @@ let
3838

3939
setup = if package.buildType == "Simple"
4040
then defaultSetup
41-
else haskellLib.weakCallPackage pkgs ./setup-builder.nix {
42-
ghc = buildGHC;
41+
else setup-builder {
4342
setup-depends = package.setup-depends;
44-
hsPkgs = hsPkgs.buildPackages;
45-
inherit haskellLib nonReinstallablePkgs
46-
package name src flags pkgconfig
47-
;
43+
inherit package name src flags;
4844
};
4945

5046
buildComp = componentId: component: comp-builder {

builder/setup-builder.nix

Lines changed: 29 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
1-
{ stdenv, buildPackages, ghc, lib, pkgconfig, writeText, runCommand
2-
, haskellLib, nonReinstallablePkgs, hsPkgs, setup-depends
3-
, package, name, src, flags }:
1+
{ stdenv, buildPackages, haskellLib, ghc, nonReinstallablePkgs, hsPkgs, makeConfigFiles }:
2+
3+
{ setup-depends, package, name, src, flags }:
44

55
let
66
fullName = "${name}-setup";
77

88
includeGhcPackage = lib.any (p: p.identifier.name == "ghc") setup-depends;
99

10-
makeConfigFiles = haskellLib.weakCallPackage buildPackages ./make-config-files.nix {
11-
inherit ghc haskellLib nonReinstallablePkgs;
12-
};
13-
1410
configFiles = makeConfigFiles {
1511
inherit (package) identifier;
1612
inherit fullName flags;
@@ -22,31 +18,29 @@ let
2218
};
2319
};
2420

25-
in stdenv.lib.fix (drv:
26-
27-
stdenv.mkDerivation {
28-
name = "${fullName}";
29-
inherit src;
30-
nativeBuildInputs = [ghc];
31-
32-
CABAL_CONFIG = configFiles + /cabal.config;
33-
phases = ["unpackPhase" "buildPhase" "installPhase"];
34-
buildPhase = ''
35-
for f in Setup.hs Setup.lhs; do
36-
if [ -f $f ]; then
37-
echo Compiling package $f
38-
ghc $f '' + (if includeGhcPackage then "-package ghc " else "")
39-
+ ''-package-db ${configFiles}/package.conf.d --make -o ./Setup
40-
setup=$(pwd)/Setup
41-
fi
42-
done
43-
[ -f ./Setup ] || (echo Failed to build Setup && exit 1)
44-
'';
45-
46-
installPhase = ''
47-
mkdir -p $out/bin
48-
install ./Setup $out/bin/Setup
49-
'';
50-
})
51-
52-
21+
in
22+
stdenv.lib.fix (drv:
23+
stdenv.mkDerivation {
24+
name = "${fullName}";
25+
inherit src;
26+
nativeBuildInputs = [ghc];
27+
28+
CABAL_CONFIG = configFiles + /cabal.config;
29+
phases = ["unpackPhase" "buildPhase" "installPhase"];
30+
buildPhase = ''
31+
for f in Setup.hs Setup.lhs; do
32+
if [ -f $f ]; then
33+
echo Compiling package $f
34+
ghc $f '' + (if includeGhcPackage then "-package ghc " else "")
35+
+ ''-package-db ${configFiles}/package.conf.d --make -o ./Setup
36+
setup=$(pwd)/Setup
37+
fi
38+
done
39+
[ -f ./Setup ] || (echo Failed to build Setup && exit 1)
40+
'';
41+
42+
installPhase = ''
43+
mkdir -p $out/bin
44+
install ./Setup $out/bin/Setup
45+
'';
46+
})

0 commit comments

Comments
 (0)