260c0c9c96
and /tag/ source code which to build up develop environments more easily ( TODO make this optional for ghcWrapper ) svn path=/nixpkgs/trunk/; revision=10648
56 lines
1.7 KiB
Nix
56 lines
1.7 KiB
Nix
{ lib } : with lib; with builtins; rec {
|
|
/*
|
|
# traversal proposal (very unstable now )
|
|
# goal: create tags easily (and install source files along without recompiling)
|
|
|
|
rec {
|
|
# encouraged: using it you can filter based on names later on? Do we ned it?
|
|
name =
|
|
|
|
# required: the annotated derivation (this attr is used to identify a
|
|
# annotated derivation)
|
|
aDeriv =
|
|
|
|
# required: extra list of annotated dependencies, so we can traverse the tree
|
|
aDeps = <annotated deps>
|
|
|
|
# your annotation derivations
|
|
};
|
|
*/
|
|
|
|
isAnnotated = a : (a ? aDeriv); # this function serves documentation purposes
|
|
|
|
delAnnotation = a :
|
|
if ((__isAttrs a) && (isAnnotated a)) then a.aDeriv
|
|
else a; # most probalby a derivation without annotations.
|
|
|
|
# returns buildInputs and propagatedBuildInputs from given set after removing annotations
|
|
delAnnotationsFromInputs = attrs :
|
|
subsetmap (map delAnnotation) attrs [ "buildInputs" "propagatedBuildInputs" ];
|
|
|
|
/* so an annotated drivation function might look like this
|
|
args: with args;
|
|
let aDeps = filterDeps args;
|
|
deps = delAnnotation aDeps;
|
|
in rec {
|
|
name = "my-package-0.2";
|
|
inherit aDeps;
|
|
|
|
aDeriv = stdenv.mkDerivation {
|
|
inherit name;
|
|
buildInputs = deps;
|
|
};
|
|
};
|
|
|
|
*/
|
|
|
|
filterAnnotated = lib.filter isAnnotated;
|
|
|
|
# stops when depthCounter = 0
|
|
traverseByDepthCounter = depthCounter : aAttrs :
|
|
if (depthCounter == 0) then []
|
|
else [ aAttrs ] ++ map (traverseByDepthCounter (__sub depthCounter 1) ) (filterAnnotated aAttrs.aDeps);
|
|
|
|
# get all deps recursively
|
|
uniqAnnotatedDeps = aAttrs : uniqList { inputList = traverseByDepthCounter 10 aAttrs; };
|
|
}
|