Skip to content

Commit

Permalink
Add optionalExtensions attribute
Browse files Browse the repository at this point in the history
Add optionalExtensions attribute
Add getOptionalExtensions function
Add getOptionalAndRequiredExtensions function
  • Loading branch information
evanjs committed Jun 28, 2020
1 parent e912ed4 commit 29ebd0c
Showing 1 changed file with 28 additions and 3 deletions.
31 changes: 28 additions & 3 deletions rust-overlay.nix
Expand Up @@ -129,12 +129,37 @@ let
in
extensionsToInstall;

# only return extensions that are specified in extensions and actually exist
# this allows users to specify packages that they want to download,
# but are okay to ignore if they are not, for example, in the latest nightly release
getOptionalExtensions = pkgs: pkgname: stdenv: extensions:
let
inherit (builtins) head;
inherit (super.lib) concatStringsSep subtractLists intersectLists warn;
availableExtensions = getExtensions pkgs pkgname stdenv;
missingExtensions = subtractLists availableExtensions extensions;
optionalExtensions =
if missingExtensions == [] then extensions else warn ''
While compiling ${pkgname}: some extensions were not available.
Skipping extensions ${missingExtensions} ...''
subtractLists missingExtensions extensions;
in
optionalExtensions;

getOptionalAndRequiredExtensions = pkgs: pkgname: stdenv: extensions:
let
inherit (super.lib) intersectLists;
requiredExtensions = checkMissingExtensions pkgs pkgname stdenv extensions;
optionalExtensions = getOptionalExtensions pkgs pkgname stdenv extensions;
in
intersectLists requiredExtensions optionalExtensions;

getComponents = pkgs: pkgname: targets: extensions: targetExtensions: stdenv: fetchurl:
let
inherit (builtins) head map;
inherit (super.lib) flatten remove subtractLists unique;
targetExtensionsToInstall = checkMissingExtensions pkgs pkgname stdenv targetExtensions;
extensionsToInstall = checkMissingExtensions pkgs pkgname stdenv extensions;
extensionsToInstall = getOptionalAndRequiredExtensions pkgs pkgname stdenv extensions;
hostTargets = [ "*" (hostTripleOf stdenv.system)];
pkgTuples = flatten (getTargetPkgTuples pkgs pkgname hostTargets targets stdenv);
extensionTuples = flatten (map (name: getTargetPkgTuples pkgs name hostTargets targets stdenv) extensionsToInstall);
Expand Down Expand Up @@ -267,7 +292,7 @@ let
pkgs = fromTOML (builtins.readFile manifest);
in
flip mapAttrs pkgs.pkg (name: pkg:
makeOverridable ({extensions, targets, targetExtensions}:
makeOverridable ({extensions, targets, targetExtensions, optionalExtensions}:
let
version' = builtins.match "([^ ]*) [(]([^ ]*) ([^ ]*)[)]" pkg.version;
version = "${elemAt version' 0}-${elemAt version' 2}-${elemAt version' 1}";
Expand Down Expand Up @@ -299,7 +324,7 @@ let

meta.platforms = stdenv.lib.platforms.all;
}
) { extensions = []; targets = []; targetExtensions = []; }
) { extensions = []; targets = []; targetExtensions = []; optionalExtensions = []; }
);

fromManifest = sha256: manifest: { stdenv, fetchurl, patchelf }:
Expand Down

0 comments on commit 29ebd0c

Please sign in to comment.