2021-09-26 11:08:45 +02:00
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
|
|
|
|
with lib;
|
|
|
|
|
|
|
|
let
|
|
|
|
|
|
|
|
stubType = types.submodule ({ name, ... }: {
|
|
|
|
options = {
|
|
|
|
name = mkOption {
|
|
|
|
type = types.str;
|
|
|
|
default = "dummy";
|
|
|
|
description = "The stub package name.";
|
|
|
|
};
|
|
|
|
|
|
|
|
outPath = mkOption {
|
|
|
|
type = types.nullOr types.str;
|
|
|
|
default = "@${name}@";
|
2023-06-12 17:05:45 +02:00
|
|
|
defaultText = literalExpression ''"@''${name}@"'';
|
2021-09-26 11:08:45 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
version = mkOption {
|
|
|
|
type = types.nullOr types.str;
|
|
|
|
default = null;
|
2023-06-12 17:05:45 +02:00
|
|
|
defaultText = literalExpression "pkgs.\${name}.version or null";
|
2021-09-26 11:08:45 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
buildScript = mkOption {
|
|
|
|
type = types.str;
|
|
|
|
default = defaultBuildScript;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
});
|
|
|
|
|
|
|
|
defaultBuildScript = "mkdir $out";
|
|
|
|
|
|
|
|
dummyPackage = pkgs.runCommandLocal "dummy" { } defaultBuildScript;
|
|
|
|
|
|
|
|
mkStubPackage = { name ? "dummy", outPath ? null, version ? null
|
|
|
|
, buildScript ? defaultBuildScript }:
|
|
|
|
let
|
|
|
|
pkg = if name == "dummy" && buildScript == defaultBuildScript then
|
|
|
|
dummyPackage
|
|
|
|
else
|
2022-08-07 14:03:37 +02:00
|
|
|
pkgs.runCommandLocal name { pname = name; } buildScript;
|
2021-09-26 11:08:45 +02:00
|
|
|
in pkg // optionalAttrs (outPath != null) { inherit outPath; }
|
|
|
|
// optionalAttrs (version != null) { inherit version; };
|
|
|
|
|
|
|
|
in {
|
|
|
|
options.test.stubs = mkOption {
|
|
|
|
type = types.attrsOf stubType;
|
|
|
|
default = { };
|
|
|
|
description =
|
|
|
|
"Package attributes that should be replaced by a stub package.";
|
|
|
|
};
|
|
|
|
|
|
|
|
config = {
|
|
|
|
lib.test.mkStubPackage = mkStubPackage;
|
|
|
|
|
2023-06-12 17:05:45 +02:00
|
|
|
nixpkgs.overlays = mkIf (config.test.stubs != { }) [
|
|
|
|
(self: super:
|
|
|
|
mapAttrs (n: v:
|
|
|
|
mkStubPackage (v // optionalAttrs (v.version == null) {
|
|
|
|
version = super.${n}.version or null;
|
|
|
|
})) config.test.stubs)
|
|
|
|
];
|
2021-09-26 11:08:45 +02:00
|
|
|
};
|
|
|
|
}
|