diff --git a/doc/configuration.xml b/doc/configuration.xml
index 55c5ea809d35..5370265c53ad 100644
--- a/doc/configuration.xml
+++ b/doc/configuration.xml
@@ -14,6 +14,8 @@ true:
its meta.broken set to
true.
+ The package isn't intended to run on the given system, as none of its meta.platforms match the given system.
+
The package's meta.license is set
to a license which is considered to be unfree.
@@ -88,6 +90,42 @@ distributing the software.
+
+ Installing packages on unsupported systems
+
+
+
+ There are also two ways to try compiling a package which has been marked as unsuported for the given system.
+
+
+
+
+ For allowing the build of a broken package once, you can use an environment variable for a single invocation of the nix tools:
+
+ $ export NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM=1
+
+
+
+
+ For permanently allowing broken packages to be built, you may add allowUnsupportedSystem = true; to your user's configuration file, like this:
+
+
+{
+ allowUnsupportedSystem = true;
+}
+
+
+
+
+
+
+ The difference between an a package being unsupported on some system and being broken is admittedly a bit fuzzy.
+ If a program ought to work on a certain platform, but doesn't, the platform should be included in meta.platforms, but marked as broken with e.g. meta.broken = !hostPlatform.isWindows.
+ Of course, this begs the question of what "ought" means exactly.
+ That is left to the package maintainer.
+
+
+
Installing unfree packages
@@ -397,7 +435,7 @@ fi
-
+
GNU info setup
diff --git a/pkgs/stdenv/generic/check-meta.nix b/pkgs/stdenv/generic/check-meta.nix
index 26522ad6045e..11c11b5d77b0 100644
--- a/pkgs/stdenv/generic/check-meta.nix
+++ b/pkgs/stdenv/generic/check-meta.nix
@@ -8,7 +8,8 @@ let
# for why this defaults to false, but I (@copumpkin) want to default it to true soon.
shouldCheckMeta = config.checkMeta or false;
- allowUnfree = config.allowUnfree or false || builtins.getEnv "NIXPKGS_ALLOW_UNFREE" == "1";
+ allowUnfree = config.allowUnfree or false
+ || builtins.getEnv "NIXPKGS_ALLOW_UNFREE" == "1";
whitelist = config.whitelistedLicenses or [];
blacklist = config.blacklistedLicenses or [];
@@ -35,9 +36,11 @@ let
hasBlacklistedLicense = assert areLicenseListsValid; attrs:
hasLicense attrs && builtins.elem attrs.meta.license blacklist;
- allowBroken = config.allowBroken or false || builtins.getEnv "NIXPKGS_ALLOW_BROKEN" == "1";
+ allowBroken = config.allowBroken or false
+ || builtins.getEnv "NIXPKGS_ALLOW_BROKEN" == "1";
- allowUnsupportedSystem = config.allowUnsupportedSystem or false;
+ allowUnsupportedSystem = config.allowUnsupportedSystem or false
+ || builtins.getEnv "NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM" == "1";
isUnfree = licenses: lib.lists.any (l:
!l.free or true || l == "unfree" || l == "unfree-redistributable") licenses;
@@ -75,6 +78,7 @@ let
remediation = {
unfree = remediate_whitelist "Unfree";
broken = remediate_whitelist "Broken";
+ unsupported = remediate_whitelist "UnsupportedSystem";
blacklisted = x: "";
insecure = remediate_insecure;
unknown-meta = x: "";
@@ -192,8 +196,8 @@ let
{ valid = false; reason = "blacklisted"; errormsg = "has a blacklisted license (‘${showLicense attrs.meta.license}’)"; }
else if !allowBroken && attrs.meta.broken or false then
{ valid = false; reason = "broken"; errormsg = "is marked as broken"; }
- else if !allowUnsupportedSystem && !allowBroken && !(checkPlatform attrs) then
- { valid = false; reason = "broken"; errormsg = "is not supported on ‘${hostPlatform.config}’"; }
+ else if !allowUnsupportedSystem && !(checkPlatform attrs) then
+ { valid = false; reason = "unsupported"; errormsg = "is not supported on ‘${hostPlatform.config}’"; }
else if !(hasAllowedInsecure attrs) then
{ valid = false; reason = "insecure"; errormsg = "is marked as insecure"; }
else let res = checkMeta (attrs.meta or {}); in if res != [] then