From 21a2bb22e40c18bc907ee62012481380dbfa003b Mon Sep 17 00:00:00 2001 From: Tom Hunze Date: Mon, 20 Apr 2026 02:34:35 +0200 Subject: [PATCH 1/2] check-meta-test.nix: add tests for compound licenses --- pkgs/stdenv/generic/check-meta-test.nix | 155 ++++++++++++++---------- 1 file changed, 89 insertions(+), 66 deletions(-) diff --git a/pkgs/stdenv/generic/check-meta-test.nix b/pkgs/stdenv/generic/check-meta-test.nix index 0dedb25afbd2..bbd24acf8614 100644 --- a/pkgs/stdenv/generic/check-meta-test.nix +++ b/pkgs/stdenv/generic/check-meta-test.nix @@ -22,14 +22,17 @@ let assertMsg generators licenses + nameValuePair recurseIntoAttrs + replaceString ; - mkUnfreePkg = name: { + mkPkg = name: license: { pname = name; version = "1.0"; - meta.license = licenses.unfree; + meta.license = license; }; + assertValidity = { nixpkgsConfig, @@ -52,77 +55,97 @@ let toPretty = generators.toPretty { }; in assertMsg (actual.success == expected) '' - Expected validity of package ${lib.getName pkg} to be ${toPretty expected}, - but got ${toPretty actual} with config: + Expected validity of package '${lib.getName pkg}' with unfree license + '${licenses.toSPDX pkg.meta.license}' to be ${toPretty expected}, but got + ${toPretty actual} + with config: ${toPretty nixpkgsConfig} ''; runAssertions = assertions: lib.deepSeq assertions ""; -in -recurseIntoAttrs { - - allowOnlyFreePackagesByDefault = assertValidity { - nixpkgsConfig = { }; - pkg = mkUnfreePkg "forbidden"; - expected = false; - }; - - allowAllUnfreePackages = assertValidity { - nixpkgsConfig = { - allowUnfree = true; + mkTests = mkUnfreePkg: { + allowOnlyFreePackagesByDefault = assertValidity { + nixpkgsConfig = { }; + pkg = mkUnfreePkg "forbidden"; + expected = false; }; - pkg = mkUnfreePkg "allowed"; + + allowAllUnfreePackages = assertValidity { + nixpkgsConfig = { + allowUnfree = true; + }; + pkg = mkUnfreePkg "allowed"; + }; + + allowUnfreePackagesWithPredicate = + let + nixpkgsConfig = { + allowUnfreePredicate = pkg: lib.getName pkg == "allowed-by-predicate"; + }; + in + [ + (assertValidity { + inherit nixpkgsConfig; + pkg = mkUnfreePkg "allowed-by-predicate"; + }) + (assertValidity { + inherit nixpkgsConfig; + pkg = mkUnfreePkg "allowed-by-nothing"; + expected = false; + }) + ]; + + allowUnfreeWithPackages = runAssertions [ + (assertValidity { + nixpkgsConfig = { + allowUnfreePackages = [ "unfree" ]; + }; + pkg = mkUnfreePkg "unfree"; + expected = true; + }) + ]; + + allowUnfreePackagesOrPredicate = + let + nixpkgsConfig = { + allowUnfreePackages = [ "allowed-by-packages" ]; + allowUnfreePredicate = pkg: lib.getName pkg == "allowed-by-predicate"; + }; + in + runAssertions [ + (assertValidity { + inherit nixpkgsConfig; + pkg = mkUnfreePkg "allowed-by-packages"; + }) + (assertValidity { + inherit nixpkgsConfig; + pkg = mkUnfreePkg "allowed-by-predicate"; + }) + (assertValidity { + inherit nixpkgsConfig; + pkg = mkUnfreePkg "forbidden"; + expected = false; + }) + ]; }; - allowUnfreePackagesWithPredicate = - let - nixpkgsConfig = { - allowUnfreePredicate = pkg: lib.getName pkg == "allowed-by-predicate"; - }; - in - [ - (assertValidity { - inherit nixpkgsConfig; - pkg = mkUnfreePkg "allowed-by-predicate"; - }) - (assertValidity { - inherit nixpkgsConfig; - pkg = mkUnfreePkg "allowed-by-nothing"; - expected = false; - }) - ]; - - allowUnfreeWithPackages = runAssertions [ - (assertValidity { - nixpkgsConfig = { - allowUnfreePackages = [ "unfree" ]; - }; - pkg = mkUnfreePkg "unfree"; - expected = true; - }) + unfreeLicenses = [ + licenses.unfree + (licenses.AND [ + licenses.free + licenses.unfree + ]) ]; +in - allowUnfreePackagesOrPredicate = - let - nixpkgsConfig = { - allowUnfreePackages = [ "allowed-by-packages" ]; - allowUnfreePredicate = pkg: lib.getName pkg == "allowed-by-predicate"; - }; - in - runAssertions [ - (assertValidity { - inherit nixpkgsConfig; - pkg = mkUnfreePkg "allowed-by-packages"; - }) - (assertValidity { - inherit nixpkgsConfig; - pkg = mkUnfreePkg "allowed-by-predicate"; - }) - (assertValidity { - inherit nixpkgsConfig; - pkg = mkUnfreePkg "forbidden"; - expected = false; - }) - ]; -} +recurseIntoAttrs ( + builtins.listToAttrs ( + map ( + license: + nameValuePair (replaceString " " "-" (licenses.toSPDX license)) ( + recurseIntoAttrs (mkTests (name: mkPkg name license)) + ) + ) unfreeLicenses + ) +) From ca779c6ddf41bf491408f3899f9f8b4143c0eb40 Mon Sep 17 00:00:00 2001 From: Tom Hunze Date: Mon, 20 Apr 2026 02:36:55 +0200 Subject: [PATCH 2/2] check-meta.nix: fix check for license type attr The license type attribute is named `licenseType`, not `type`. --- pkgs/stdenv/generic/check-meta.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/stdenv/generic/check-meta.nix b/pkgs/stdenv/generic/check-meta.nix index 6c3a49c4957c..e651e012d34e 100644 --- a/pkgs/stdenv/generic/check-meta.nix +++ b/pkgs/stdenv/generic/check-meta.nix @@ -90,7 +90,7 @@ let && ( if isList attrs.meta.license then any (l: elem l list) attrs.meta.license - else if attrs.meta.license ? "type" then + else if attrs.meta.license ? "licenseType" then lib.licenses.containsLicenses list attrs.meta.license else elem attrs.meta.license list @@ -105,7 +105,7 @@ let isUnfree = licenses: - if isAttrs licenses && licenses ? "type" then + if isAttrs licenses && licenses ? "licenseType" then !(lib.licenses.isFree licenses) else if isAttrs licenses then !(licenses.free or true)