diff --git a/lib/systems/inspect.nix b/lib/systems/inspect.nix index 241c9365f2e7..ec71592d1190 100644 --- a/lib/systems/inspect.nix +++ b/lib/systems/inspect.nix @@ -1,8 +1,9 @@ with import ./parse.nix; with import ../attrsets.nix; +with import ../lists.nix; rec { - patterns = { + patterns = rec { "32bit" = { cpu = { bits = 32; }; }; "64bit" = { cpu = { bits = 64; }; }; i686 = { cpu = cpuTypes.i686; }; @@ -13,8 +14,8 @@ rec { BigEndian = { cpu = { significantByte = significantBytes.bigEndian; }; }; LittleEndian = { cpu = { significantByte = significantBytes.littleEndian; }; }; - Unix = { kernel = { families = { inherit (kernelFamilies) unix; }; }; }; BSD = { kernel = { families = { inherit (kernelFamilies) bsd; }; }; }; + Unix = [ BSD Linux SunOS Hurd Cygwin ]; Darwin = { kernel = kernels.darwin; }; Linux = { kernel = kernels.linux; }; @@ -27,11 +28,15 @@ rec { Cygwin = { kernel = kernels.windows; abi = abis.cygnus; }; MinGW = { kernel = kernels.windows; abi = abis.gnu; }; - Arm32 = recursiveUpdate patterns.Arm patterns."32bit"; - Arm64 = recursiveUpdate patterns.Arm patterns."64bit"; + Arm32 = recursiveUpdate Arm patterns."32bit"; + Arm64 = recursiveUpdate Arm patterns."64bit"; }; + matchAnyAttrs = patterns: + if builtins.isList patterns then attrs: any (pattern: matchAttrs pattern attrs) patterns + else matchAttrs patterns; + predicates = mapAttrs' - (name: value: nameValuePair ("is" + name) (matchAttrs value)) + (name: value: nameValuePair ("is" + name) (matchAnyAttrs value)) patterns; } diff --git a/lib/systems/parse.nix b/lib/systems/parse.nix index fdfc1cbc907f..bf21d74b931d 100644 --- a/lib/systems/parse.nix +++ b/lib/systems/parse.nix @@ -68,21 +68,20 @@ rec { isKernelFamily = isType "kernel-family"; kernelFamilies = setTypes "kernel-family" { bsd = {}; - unix = {}; }; isKernel = x: isType "kernel" x; kernels = with execFormats; with kernelFamilies; setTypesAssert "kernel" (x: isExecFormat x.execFormat && all isKernelFamily (attrValues x.families)) { - darwin = { execFormat = macho; families = { inherit unix; }; }; - freebsd = { execFormat = elf; families = { inherit unix bsd; }; }; - hurd = { execFormat = elf; families = { inherit unix; }; }; - linux = { execFormat = elf; families = { inherit unix; }; }; - netbsd = { execFormat = elf; families = { inherit unix bsd; }; }; - none = { execFormat = unknown; families = { inherit unix; }; }; - openbsd = { execFormat = elf; families = { inherit unix bsd; }; }; - solaris = { execFormat = elf; families = { inherit unix; }; }; + darwin = { execFormat = macho; families = { }; }; + freebsd = { execFormat = elf; families = { inherit bsd; }; }; + hurd = { execFormat = elf; families = { }; }; + linux = { execFormat = elf; families = { }; }; + netbsd = { execFormat = elf; families = { inherit bsd; }; }; + none = { execFormat = unknown; families = { }; }; + openbsd = { execFormat = elf; families = { inherit bsd; }; }; + solaris = { execFormat = elf; families = { }; }; windows = { execFormat = pe; families = { }; }; } // { # aliases # TODO(@Ericson2314): Handle these Darwin version suffixes more generally.