@@ -1,27 +1,31 @@
1−{ stdenv, lib, haskellLib, srcOnly }:
1+{ stdenv, lib, haskellLib }:
22drv:
33
44let
55 component = drv.config;
66
7− subdir =
8− if drv?source
9− then
10− drv.srcSubDir or ""
11− else
12− # srcOnly returns just the subdir, so we're already in it.
13− "";
14−
157# This derivation can be used to execute test component.
168# The $out of the derivation is a file containing the resulting
179# stdout output.
18−in stdenv.mkDerivation ({
10+in stdenv.mkDerivation ((
11+ if drv ? source
12+ then {
13+ src = drv.source;
14+ patchPhase =
15+ # This `cd` is normally done in the `prePatch` of the drv
16+ lib.optionalString (drv.srcSubDir != "") ''
17+ cd ${lib.removePrefix "/" drv.srcSubDir}
18+ '';
19+ }
20+ else
21+ # This makes the derivation work a bit like `srcOnly`,
22+ # using the original derivation, but replacing the `buildPhase`.
23+ (drv.drvAttrs or drv) // {
24+ outputs = [ "out" ];
25+ separateDebugInfo = false;
26+ }) // {
1927 name = (drv.name + "-check");
2028
21− # Using `srcOnly` (rather than getting the `src` via a `drv.passthru`)
22− # should correctly apply the patches from `drv` (if any).
23− src = drv.source or (srcOnly drv);
24−
2529 passthru = {
2630 inherit (drv) identifier config configFiles executableToolDepends cleanSrc env exeName;
2731 };
@@ -30,19 +34,12 @@ in stdenv.mkDerivation ({
3034
3135 inherit (component) doCheck doCrossCheck;
3236
33− phases = ["unpackPhase" "buildPhase"];
37+ phases = ["unpackPhase" "patchPhase" "buildPhase"];
3438
3539 # If doCheck or doCrossCheck are false we may still build this
3640 # component and we want it to quietly succeed.
3741 buildPhase = ''
3842 mkdir $out
39− ${
40− # Change to the source sub directory if there is one.
41− lib.optionalString (subdir != "") ''
42− cd ${lib.removePrefix "/" subdir}
43− ''
44− }
45−
4643 runHook preCheck
4744
4845 ${toString component.testWrapper} ${drv}/bin/${drv.exeName} ${lib.concatStringsSep " " component.testFlags} | tee $out/test-stdout