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