Only show/build a package on the platforms listed in meta.platforms

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).
This commit is contained in:
Eelco Dolstra
2013-11-04 23:31:08 +01:00
parent 8867304b5e
commit a2cbc77e4f
6 changed files with 55 additions and 13 deletions

View File

@@ -21,10 +21,13 @@ cabal.mkDerivation (self: {
mv contrib/darcs_completion $out/etc/bash_completion.d/darcs
'';
meta = {
homepage = "http://darcs.net/";
description = "a distributed, interactive, smart revision control system";
homepage = http://darcs.net/;
description = "A distributed, interactive, smart revision control system";
license = "GPL";
platforms = self.ghc.meta.platforms;
# FIXME: this gives an infinite recursion in the "darcs" attribute
# in all-packages.nix.
#platforms = self.ghc.meta.platforms;
platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
maintainers = [ self.stdenv.lib.maintainers.andres ];
};
})

View File

@@ -40,9 +40,6 @@
, ...
}:
assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"
|| stdenv.isArm || stdenv.system == "mips64el-linux";
assert stdenv.platform.name == "sheevaplug" -> stdenv.platform.uboot != null;
let

View File

@@ -21,8 +21,7 @@ stdenv.mkDerivation {
patches =
[ ./version-test.patch ]
++ optional (!libsOnly && versionAtLeast kernelDev.version "3.11") ./nvidia-drivers-linux-3.11-incremental.patch
;
++ optional (!libsOnly && versionAtLeast kernelDev.version "3.11") ./nvidia-drivers-linux-3.11-incremental.patch;
src =
if stdenv.system == "i686-linux" then
@@ -58,5 +57,7 @@ stdenv.mkDerivation {
homepage = http://www.nvidia.com/object/unix.html;
description = "X.org driver and kernel module for NVIDIA graphics cards";
license = stdenv.lib.licenses.unfreeRedistributable;
platforms = stdenv.lib.platforms.linux;
hydraPlatforms = [];
};
}

View File

@@ -55,6 +55,8 @@ let
throw "package ${attrs.name} has an unfree license, refusing to evaluate"
else if !allowBroken && attrs.meta.broken or false then
throw "you can't use package ${attrs.name} because it has been marked as broken"
else if !allowBroken && attrs.meta.platforms or null != null && !lib.lists.elem result.system attrs.meta.platforms then
throw "the package ${attrs.name} is not supported on ${result.system}"
else
lib.addPassthru (derivation (
(removeAttrs attrs ["meta" "passthru" "crossAttrs"])

View File

@@ -119,14 +119,12 @@ rec {
# May fail as much as it wishes, we will catch the error.
processPackage = attrSet:
if attrSet ? recurseForDerivations && attrSet.recurseForDerivations then
if attrSet.recurseForDerivations or false then
packagesWithMetaPlatform attrSet
else if attrSet ? recurseForRelease && attrSet.recurseForRelease then
else if attrSet.recurseForRelease or false then
packagesWithMetaPlatform attrSet
else
if attrSet ? meta && attrSet.meta ? platforms
then attrSet.meta.platforms
else [];
attrSet.meta.hydraPlatforms or (attrSet.meta.platforms or []);
/* Common platform groups on which to test packages. */