summaryrefslogtreecommitdiffstats
path: root/lib
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
parent53edfe1d1c51c38e2adc4d8eb37a7a2657e3fe01 (diff)
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')
-rw-r--r--lib/default.nix2
-rw-r--r--lib/meta.nix27
2 files changed, 28 insertions, 1 deletions
diff --git a/lib/default.nix b/lib/default.nix
index 68d73220fa9a..626a751cb10a 100644
--- a/lib/default.nix
+++ b/lib/default.nix
@@ -105,7 +105,7 @@ let
makeScope makeScopeWithSplicing;
inherit (self.meta) addMetaAttrs dontDistribute setName updateName
appendToName mapDerivationAttrset setPrio lowPrio lowPrioSet hiPrio
- hiPrioSet;
+ hiPrioSet getLicenseFromSpdxId;
inherit (self.sources) pathType pathIsDirectory cleanSourceFilter
cleanSource sourceByRegex sourceFilesBySuffices
commitIdFromGitRepo cleanSourceWith pathHasContext
diff --git a/lib/meta.nix b/lib/meta.nix
index bc04394dcf0b..bc3387646f26 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; }
+ );
}