summary refs log tree commit diff
path: root/lib/meta.nix
diff options
context:
space:
mode:
authorShamrock Lee <44064051+ShamrockLee@users.noreply.github.com>2021-10-11 07:08:40 +0800
committerShamrock Lee <44064051+ShamrockLee@users.noreply.github.com>2021-12-02 18:33:48 +0800
commit60950f739e0fd046e94c5ef86c146b311d39a2a5 (patch)
tree663908ad601fd8f21f3c73ca5ef95478436af9e7 /lib/meta.nix
parent53edfe1d1c51c38e2adc4d8eb37a7a2657e3fe01 (diff)
downloadnixpkgs-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.nix27
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; }
+      );
 }