diff options
author | Shamrock Lee <44064051+ShamrockLee@users.noreply.github.com> | 2021-10-11 07:08:40 +0800 |
---|---|---|
committer | Shamrock Lee <44064051+ShamrockLee@users.noreply.github.com> | 2021-12-02 18:33:48 +0800 |
commit | 60950f739e0fd046e94c5ef86c146b311d39a2a5 (patch) | |
tree | 663908ad601fd8f21f3c73ca5ef95478436af9e7 /lib/meta.nix | |
parent | 53edfe1d1c51c38e2adc4d8eb37a7a2657e3fe01 (diff) | |
download | nixpkgs-60950f739e0fd046e94c5ef86c146b311d39a2a5.tar nixpkgs-60950f739e0fd046e94c5ef86c146b311d39a2a5.tar.gz nixpkgs-60950f739e0fd046e94c5ef86c146b311d39a2a5.tar.bz2 nixpkgs-60950f739e0fd046e94c5ef86c146b311d39a2a5.tar.lz nixpkgs-60950f739e0fd046e94c5ef86c146b311d39a2a5.tar.xz nixpkgs-60950f739e0fd046e94c5ef86c146b311d39a2a5.tar.zst nixpkgs-60950f739e0fd046e94c5ef86c146b311d39a2a5.zip |
lib/meta: add getLicenseFromSpdxId function
Move function spdxLicense, internally used in yarn2nix to lib/meta.nix, and rename to getLicenseFromSpdxId A similar function is implemented in poetry2nix, but the one originally in yarn2nix seems beter. since it falls back to an license-like attrset for mismatched case instead of a plain string
Diffstat (limited to 'lib/meta.nix')
-rw-r--r-- | lib/meta.nix | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/meta.nix b/lib/meta.nix index bc04394dcf0..bc3387646f2 100644 --- a/lib/meta.nix +++ b/lib/meta.nix @@ -99,4 +99,31 @@ rec { availableOn = platform: pkg: lib.any (platformMatch platform) pkg.meta.platforms && lib.all (elem: !platformMatch platform elem) (pkg.meta.badPlatforms or []); + + /* Get the corresponding attribute in lib.licenses + from the SPDX ID. + For SPDX IDs, see + https://spdx.org/licenses + + Type: + getLicenseFromSpdxId :: str -> AttrSet + + Example: + lib.getLicenseFromSpdxId "MIT" == lib.licenses.mit + => true + lib.getLicenseFromSpdxId "mIt" == lib.licenses.mit + => true + lib.getLicenseFromSpdxId "MY LICENSE" + => trace: warning: getLicenseFromSpdxId: No license matches the given SPDX ID: MY LICENSE + => { shortName = "MY LICENSE"; } + */ + getLicenseFromSpdxId = + let + spdxLicenses = lib.mapAttrs (id: ls: assert lib.length ls == 1; builtins.head ls) + (lib.groupBy (l: lib.toLower l.spdxId) (lib.filter (l: l ? spdxId) (lib.attrValues lib.licenses))); + in licstr: + spdxLicenses.${ lib.toLower licstr } or ( + lib.warn "getLicenseFromSpdxId: No license matches the given SPDX ID: ${licstr}" + { shortName = licstr; } + ); } |