c26252af3e
First, we need check against the host platform, not the build platform. That's simple enough. Second, we move away from exahustive finite case analysis (i.e. exhaustively listing all platforms the package builds on). That only work in a closed-world setting, where we know all platforms we might build one. But with cross compilation, we may be building for arbitrary platforms, So we need fancier filters. This is the closed world to open world change. The solution is instead of having a list of systems (strings in the form "foo-bar"), we have a list of of systems or "patterns", i.e. attributes that partially match the output of the parsers in `lib.systems.parse`. The "check meta" logic treats the systems strings as an exact whitelist just as before, but treats the patterns as a fuzzy whitelist, intersecting the actual `hostPlatform` with the pattern and then checking for equality. (This is done using `matchAttrs`). The default convenience lists for `meta.platforms` are now changed to be lists of patterns (usually a single pattern) in `lib/systems/for-meta.nix` for maximum flexibility under this new system. Fixes #30902
133 lines
5.9 KiB
Nix
133 lines
5.9 KiB
Nix
/* Library of low-level helper functions for nix expressions.
|
|
*
|
|
* Please implement (mostly) exhaustive unit tests
|
|
* for new functions in `./tests.nix'.
|
|
*/
|
|
let
|
|
|
|
callLibs = file: import file { inherit lib; };
|
|
|
|
lib = rec {
|
|
|
|
# often used, or depending on very little
|
|
trivial = callLibs ./trivial.nix;
|
|
fixedPoints = callLibs ./fixed-points.nix;
|
|
|
|
# datatypes
|
|
attrsets = callLibs ./attrsets.nix;
|
|
lists = callLibs ./lists.nix;
|
|
strings = callLibs ./strings.nix;
|
|
stringsWithDeps = callLibs ./strings-with-deps.nix;
|
|
|
|
# packaging
|
|
customisation = callLibs ./customisation.nix;
|
|
maintainers = import ./maintainers-list.nix;
|
|
meta = callLibs ./meta.nix;
|
|
sources = callLibs ./sources.nix;
|
|
versions = callLibs ./versions.nix;
|
|
|
|
# module system
|
|
modules = callLibs ./modules.nix;
|
|
options = callLibs ./options.nix;
|
|
types = callLibs ./types.nix;
|
|
|
|
# constants
|
|
licenses = callLibs ./licenses.nix;
|
|
systems = callLibs ./systems;
|
|
|
|
# misc
|
|
debug = callLibs ./debug.nix;
|
|
|
|
generators = callLibs ./generators.nix;
|
|
misc = callLibs ./deprecated.nix;
|
|
# domain-specific
|
|
fetchers = callLibs ./fetchers.nix;
|
|
|
|
# Eval-time filesystem handling
|
|
filesystem = callLibs ./filesystem.nix;
|
|
|
|
# back-compat aliases
|
|
platforms = systems.forMeta;
|
|
|
|
inherit (builtins) add addErrorContext attrNames
|
|
concatLists deepSeq elem elemAt filter genericClosure genList
|
|
getAttr hasAttr head isAttrs isBool isInt isList
|
|
isString length lessThan listToAttrs pathExists readFile
|
|
replaceStrings seq stringLength sub substring tail;
|
|
inherit (trivial) id const concat or and boolToString mergeAttrs
|
|
flip mapNullable inNixShell min max importJSON warn info
|
|
nixpkgsVersion mod compare splitByAndCompare
|
|
functionArgs setFunctionArgs isFunction;
|
|
|
|
inherit (fixedPoints) fix fix' extends composeExtensions
|
|
makeExtensible makeExtensibleWithCustomName;
|
|
inherit (attrsets) attrByPath hasAttrByPath setAttrByPath
|
|
getAttrFromPath attrVals attrValues catAttrs filterAttrs
|
|
filterAttrsRecursive foldAttrs collect nameValuePair mapAttrs
|
|
mapAttrs' mapAttrsToList mapAttrsRecursive mapAttrsRecursiveCond
|
|
genAttrs isDerivation toDerivation optionalAttrs
|
|
zipAttrsWithNames zipAttrsWith zipAttrs recursiveUpdateUntil
|
|
recursiveUpdate matchAttrs overrideExisting getOutput getBin
|
|
getLib getDev chooseDevOutputs zipWithNames zip;
|
|
inherit (lists) singleton foldr fold foldl foldl' imap0 imap1
|
|
concatMap flatten remove findSingle findFirst any all count
|
|
optional optionals toList range partition zipListsWith zipLists
|
|
reverseList listDfs toposort sort compareLists take drop sublist
|
|
last init crossLists unique intersectLists subtractLists
|
|
mutuallyExclusive;
|
|
inherit (strings) concatStrings concatMapStrings concatImapStrings
|
|
intersperse concatStringsSep concatMapStringsSep
|
|
concatImapStringsSep makeSearchPath makeSearchPathOutput
|
|
makeLibraryPath makeBinPath makePerlPath optionalString
|
|
hasPrefix hasSuffix stringToCharacters stringAsChars escape
|
|
escapeShellArg escapeShellArgs replaceChars lowerChars upperChars
|
|
toLower toUpper addContextFrom splitString removePrefix
|
|
removeSuffix versionOlder versionAtLeast getVersion nameFromURL
|
|
enableFeature fixedWidthString fixedWidthNumber isStorePath
|
|
toInt readPathsFromFile fileContents;
|
|
inherit (stringsWithDeps) textClosureList textClosureMap
|
|
noDepEntry fullDepEntry packEntry stringAfter;
|
|
inherit (customisation) overrideDerivation makeOverridable
|
|
callPackageWith callPackagesWith extendDerivation
|
|
hydraJob makeScope;
|
|
inherit (meta) addMetaAttrs dontDistribute setName updateName
|
|
appendToName mapDerivationAttrset lowPrio lowPrioSet hiPrio
|
|
hiPrioSet;
|
|
inherit (sources) pathType pathIsDirectory cleanSourceFilter
|
|
cleanSource sourceByRegex sourceFilesBySuffices
|
|
commitIdFromGitRepo cleanSourceWith pathHasContext canCleanSource;
|
|
inherit (modules) evalModules closeModules unifyModuleSyntax
|
|
applyIfFunction unpackSubmodule packSubmodule mergeModules
|
|
mergeModules' mergeOptionDecls evalOptionValue mergeDefinitions
|
|
pushDownProperties dischargeProperties filterOverrides
|
|
sortProperties fixupOptionType mkIf mkAssert mkMerge mkOverride
|
|
mkOptionDefault mkDefault mkForce mkVMOverride mkStrict
|
|
mkFixStrictness mkOrder mkBefore mkAfter mkAliasDefinitions
|
|
mkAliasAndWrapDefinitions fixMergeModules mkRemovedOptionModule
|
|
mkRenamedOptionModule mkMergedOptionModule mkChangedOptionModule
|
|
mkAliasOptionModule doRename filterModules;
|
|
inherit (options) isOption mkEnableOption mkSinkUndeclaredOptions
|
|
mergeDefaultOption mergeOneOption mergeEqualOption getValues
|
|
getFiles optionAttrSetToDocList optionAttrSetToDocList'
|
|
scrubOptionValue literalExample showOption showFiles
|
|
unknownModule mkOption;
|
|
inherit (types) isType setType defaultTypeMerge defaultFunctor
|
|
isOptionType mkOptionType;
|
|
inherit (debug) addErrorContextToAttrs traceIf traceVal
|
|
traceXMLVal traceXMLValMarked traceSeq traceSeqN traceValSeq
|
|
traceValSeqN traceShowVal traceShowValMarked
|
|
showVal traceCall traceCall2 traceCall3 traceValIfNot runTests
|
|
testAllTrue strict traceCallXml attrNamesToStr;
|
|
inherit (misc) maybeEnv defaultMergeArg defaultMerge foldArgs
|
|
defaultOverridableDelayableArgs composedArgsAndFun
|
|
maybeAttrNullable maybeAttr ifEnable checkFlag getValue
|
|
checkReqs uniqList uniqListExt condConcat lazyGenericClosure
|
|
innerModifySumArgs modifySumArgs innerClosePropagation
|
|
closePropagation mapAttrsFlatten nvs setAttr setAttrMerge
|
|
mergeAttrsWithFunc mergeAttrsConcatenateValues
|
|
mergeAttrsNoOverride mergeAttrByFunc mergeAttrsByFuncDefaults
|
|
mergeAttrsByFuncDefaultsClean mergeAttrBy
|
|
prepareDerivationArgs nixType imap overridableDelayableArgs;
|
|
};
|
|
in lib
|