diff --git a/lib/meta.nix b/lib/meta.nix index 8f4e7e2c7bf..62894aeb316 100644 --- a/lib/meta.nix +++ b/lib/meta.nix @@ -98,9 +98,7 @@ rec { 2. None of `meta.badPlatforms` pattern matches the given platform. */ availableOn = platform: pkg: - if !(pkg?meta) then true else - (!(pkg.meta ? platforms) || - lib.any (platformMatch platform) pkg.meta.platforms) && + ((!pkg?meta.platforms) || lib.any (platformMatch platform) pkg.meta.platforms) && lib.all (elem: !platformMatch platform elem) (pkg.meta.badPlatforms or []); /* Get the corresponding attribute in lib.licenses diff --git a/pkgs/stdenv/generic/check-meta.nix b/pkgs/stdenv/generic/check-meta.nix index da2e9b135f2..751e19d1681 100644 --- a/pkgs/stdenv/generic/check-meta.nix +++ b/pkgs/stdenv/generic/check-meta.nix @@ -57,9 +57,8 @@ let isMarkedBroken = attrs: attrs.meta.broken or false; - hasUnsupportedPlatform = attrs: - (!lib.lists.elem hostPlatform.system (attrs.meta.platforms or lib.platforms.all) || - lib.lists.elem hostPlatform.system (attrs.meta.badPlatforms or [])); + hasUnsupportedPlatform = + pkg: !(lib.meta.availableOn hostPlatform pkg); isMarkedInsecure = attrs: (attrs.meta.knownVulnerabilities or []) != []; @@ -272,7 +271,7 @@ let sourceProvenance = listOf lib.types.attrs; maintainers = listOf (attrsOf anything); # TODO use the maintainer type from lib/tests/maintainer-module.nix priority = int; - platforms = listOf str; + platforms = listOf (either str (attrsOf anything)); # see lib.meta.platformMatch hydraPlatforms = listOf str; broken = bool; unfree = bool;