2024-11-11 14:21:34 +00:00
|
|
|
with import ./config.nix;
|
2011-09-14 05:59:29 +00:00
|
|
|
|
2011-12-20 17:01:02 +00:00
|
|
|
rec {
|
2011-09-14 05:59:29 +00:00
|
|
|
|
2020-08-07 19:09:26 +00:00
|
|
|
# Want to ensure that "out" doesn't get a suffix on it's path.
|
|
|
|
nameCheck = mkDerivation {
|
|
|
|
name = "multiple-outputs-a";
|
|
|
|
outputs = [ "out" "dev" ];
|
|
|
|
builder = builtins.toFile "builder.sh"
|
|
|
|
''
|
|
|
|
mkdir $first $second
|
|
|
|
test -z $all
|
|
|
|
echo "first" > $first/file
|
|
|
|
echo "second" > $second/file
|
|
|
|
ln -s $first $second/link
|
|
|
|
'';
|
|
|
|
helloString = "Hello, world!";
|
|
|
|
};
|
|
|
|
|
2011-09-14 05:59:29 +00:00
|
|
|
a = mkDerivation {
|
|
|
|
name = "multiple-outputs-a";
|
|
|
|
outputs = [ "first" "second" ];
|
2011-12-20 17:01:02 +00:00
|
|
|
builder = builtins.toFile "builder.sh"
|
|
|
|
''
|
|
|
|
mkdir $first $second
|
|
|
|
test -z $all
|
2012-09-11 23:14:15 +00:00
|
|
|
echo "first" > $first/file
|
|
|
|
echo "second" > $second/file
|
|
|
|
ln -s $first $second/link
|
2011-12-20 17:01:02 +00:00
|
|
|
'';
|
2011-09-14 05:59:29 +00:00
|
|
|
helloString = "Hello, world!";
|
|
|
|
};
|
|
|
|
|
2022-11-09 14:21:13 +00:00
|
|
|
use-a = mkDerivation {
|
|
|
|
name = "use-a";
|
|
|
|
inherit (a) first second;
|
|
|
|
builder = builtins.toFile "builder.sh"
|
|
|
|
''
|
|
|
|
cat $first/file $second/file >$out
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2011-12-20 17:01:02 +00:00
|
|
|
b = mkDerivation {
|
|
|
|
defaultOutput = assert a.second.helloString == "Hello, world!"; a;
|
2012-01-04 12:45:53 +00:00
|
|
|
firstOutput = assert a.outputName == "first"; a.first.first;
|
|
|
|
secondOutput = assert a.second.outputName == "second"; a.second.first.first.second.second.first.second;
|
2011-12-20 17:01:02 +00:00
|
|
|
allOutputs = a.all;
|
|
|
|
name = "multiple-outputs-b";
|
|
|
|
builder = builtins.toFile "builder.sh"
|
|
|
|
''
|
|
|
|
mkdir $out
|
|
|
|
test "$firstOutput $secondOutput" = "$allOutputs"
|
|
|
|
test "$defaultOutput" = "$firstOutput"
|
2012-09-11 23:14:15 +00:00
|
|
|
test "$(cat $firstOutput/file)" = "first"
|
|
|
|
test "$(cat $secondOutput/file)" = "second"
|
2011-12-20 17:01:02 +00:00
|
|
|
echo "success" > $out/file
|
|
|
|
'';
|
|
|
|
};
|
2011-09-14 05:59:29 +00:00
|
|
|
|
2011-12-21 13:47:21 +00:00
|
|
|
c = mkDerivation {
|
|
|
|
name = "multiple-outputs-c";
|
|
|
|
drv = b.drvPath;
|
|
|
|
builder = builtins.toFile "builder.sh"
|
|
|
|
''
|
|
|
|
mkdir $out
|
|
|
|
ln -s $drv $out/drv
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2011-12-21 14:42:06 +00:00
|
|
|
d = mkDerivation {
|
|
|
|
name = "multiple-outputs-d";
|
|
|
|
drv = builtins.unsafeDiscardOutputDependency b.drvPath;
|
|
|
|
builder = builtins.toFile "builder.sh"
|
|
|
|
''
|
|
|
|
mkdir $out
|
|
|
|
echo $drv > $out/drv
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2011-12-20 17:08:43 +00:00
|
|
|
cyclic = (mkDerivation {
|
|
|
|
name = "cyclic-outputs";
|
2011-12-21 17:34:44 +00:00
|
|
|
outputs = [ "a" "b" "c" ];
|
2011-12-20 17:08:43 +00:00
|
|
|
builder = builtins.toFile "builder.sh"
|
|
|
|
''
|
2011-12-21 17:34:44 +00:00
|
|
|
mkdir $a $b $c
|
2011-12-20 17:08:43 +00:00
|
|
|
echo $a > $b/foo
|
2011-12-21 17:34:44 +00:00
|
|
|
echo $b > $c/bar
|
|
|
|
echo $c > $a/baz
|
2011-12-20 17:08:43 +00:00
|
|
|
'';
|
|
|
|
}).a;
|
|
|
|
|
2022-04-22 13:17:01 +00:00
|
|
|
e = mkDerivation {
|
|
|
|
name = "multiple-outputs-e";
|
2023-01-18 13:14:29 +00:00
|
|
|
outputs = [ "a_a" "b" "c" ];
|
|
|
|
meta.outputsToInstall = [ "a_a" "b" ];
|
|
|
|
buildCommand = "mkdir $a_a $b $c";
|
2022-04-22 13:17:01 +00:00
|
|
|
};
|
|
|
|
|
2024-06-02 11:26:18 +00:00
|
|
|
nothing-to-install = mkDerivation {
|
|
|
|
name = "nothing-to-install";
|
|
|
|
meta.outputsToInstall = [ ];
|
|
|
|
buildCommand = "mkdir $out";
|
|
|
|
};
|
|
|
|
|
2022-11-09 14:21:13 +00:00
|
|
|
independent = mkDerivation {
|
|
|
|
name = "multiple-outputs-independent";
|
|
|
|
outputs = [ "first" "second" ];
|
|
|
|
builder = builtins.toFile "builder.sh"
|
|
|
|
''
|
|
|
|
mkdir $first $second
|
|
|
|
test -z $all
|
|
|
|
echo "first" > $first/file
|
|
|
|
echo "second" > $second/file
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
use-independent = mkDerivation {
|
|
|
|
name = "use-independent";
|
|
|
|
inherit (a) first second;
|
|
|
|
builder = builtins.toFile "builder.sh"
|
|
|
|
''
|
|
|
|
cat $first/file $second/file >$out
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2023-01-18 13:21:17 +00:00
|
|
|
invalid-output-name-1 = mkDerivation {
|
|
|
|
name = "invalid-output-name-1";
|
|
|
|
outputs = [ "out/"];
|
|
|
|
};
|
|
|
|
|
|
|
|
invalid-output-name-2 = mkDerivation {
|
|
|
|
name = "invalid-output-name-2";
|
|
|
|
outputs = [ "x" "foo$"];
|
|
|
|
};
|
|
|
|
|
2011-09-14 05:59:29 +00:00
|
|
|
}
|