It now strictly evaluates all remaining attributes, preventing
unevaluated thunks that cannot be garbage-collected. It's also applied
to all jobs in Nixpkgs' release.nix.
This reduces hydra-eval-jobs' memory consumption on the 14.12
release-combined jobset from 5.1 GB to 2.0 GB.
The function ‘mkDerivation’ now checks whether the current platform
type is included in a package's meta.platform field. If not, it
throws an exception:
$ nix-build -A linux --argstr system x86_64-darwin
error: user-thrown exception: the package ‘linux-3.10.15’ is not supported on ‘x86_64-darwin’
These packages also no longer show up in ‘nix-env -qa’ output. This
means, for instance, that the number of packages shown on
x86_64-freebsd has dropped from 9268 to 4764.
Since meta.platforms was also used to prevent Hydra from building some
packages, there now is a new attribute meta.hydraPlatforms listing the
platforms on which Hydra should build the package (which defaults to
meta.platforms).
That is, there are now distinct jobs like ‘coreutils.x86_64-linux’ and
‘coreutils.x86_64-darwin’, rather than a single job ‘coreutils’ with
multiple builds. This means that testing a job is simpler:
$ nix-build pkgs/top-level/release.nix -A coreutils.x86_64-linux
See https://github.com/NixOS/hydra/issues/60 for the motivation.
If set to false, mkDerivation will throw an exception if a package has
an unfree license. ‘release-lib.nix’ uses this to enforce that we
don't build unfree packages as part of the Nixpkgs channel. Since
this is set through Nixpkgs' ‘config’ argument, it's more finegrained
than $HYDRA_DISALLOW_UNFREE.
This is for consistency with terminology in stdenv (and the terms
"hostDrv" and "buildDrv" are not very intuitive, even if they're
consistent with GNU terminology).
time and space on the new (non-ATerm) Nix expression evaluator. It
turns out that release.nix relied rather heavily on maximal laziness
for efficiency: every job calls `allPackages { inherit system; }'
for each platform. This causes the dependencies of the job to be
reevaluated for every job/platform combination. This is very slow
and (because the evaluator doesn't have a garbage collector yet)
eventually causes the evaluator to run out of memory and be killed.
As a workaround, I've replaced the calls to `allPackages' with a
quasi-memoised `pkgsFor' function. It "caches" the result by going
through a variable such as `pkgs_x86_64_linux', which is evaluated
only once. Evaluation now only takes 4.4s and 545 MiB on my
machine.
A cleaner solution may be to move the `system' argument outwards so
that entire set of jobs is called only once for each value of
`system'.
svn path=/nixpkgs/trunk/; revision=21966
I want to cross-build utillinux and coreutils, and that play will have to go in stdenv-updates I think.
svn path=/nixpkgs/branches/stdenv-updates/; revision=20506