···422 else if (elemAt l 1) == "elf"
423 then { cpu = elemAt l 0; vendor = "unknown"; kernel = "none"; abi = elemAt l 1; }
424 else { cpu = elemAt l 0; kernel = elemAt l 1; };
425- "3" = # Awkward hacks, beware!
426- if elemAt l 1 == "apple"
427- then { cpu = elemAt l 0; vendor = "apple"; kernel = elemAt l 2; }
428- else if (elemAt l 1 == "linux") || (elemAt l 2 == "gnu")
429- then { cpu = elemAt l 0; kernel = elemAt l 1; abi = elemAt l 2; }
430- else if (elemAt l 2 == "mingw32") # autotools breaks on -gnu for window
431- then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "windows"; }
432- else if (elemAt l 2 == "wasi")
433- then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "wasi"; }
434- else if (elemAt l 2 == "redox")
435- then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "redox"; }
436- else if (elemAt l 2 == "mmixware")
437- then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "mmixware"; }
438- else if hasPrefix "freebsd" (elemAt l 2)
439- then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; }
440- else if hasPrefix "netbsd" (elemAt l 2)
441- then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; }
442- else if (elem (elemAt l 2) ["eabi" "eabihf" "elf"])
443- then { cpu = elemAt l 0; vendor = "unknown"; kernel = elemAt l 1; abi = elemAt l 2; }
444- else if (elemAt l 2 == "ghcjs")
445- then { cpu = elemAt l 0; vendor = "unknown"; kernel = elemAt l 2; }
446- else if hasPrefix "genode" (elemAt l 2)
447- then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; }
448 else throw "Target specification with 3 components is ambiguous";
449 "4" = { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; abi = elemAt l 3; };
450 }.${toString (length l)}
···422 else if (elemAt l 1) == "elf"
423 then { cpu = elemAt l 0; vendor = "unknown"; kernel = "none"; abi = elemAt l 1; }
424 else { cpu = elemAt l 0; kernel = elemAt l 1; };
425+ "3" =
426+ # cpu-kernel-environment
427+ if elemAt l 1 == "linux" ||
428+ elem (elemAt l 2) ["eabi" "eabihf" "elf" "gnu"]
429+ then {
430+ cpu = elemAt l 0;
431+ kernel = elemAt l 1;
432+ abi = elemAt l 2;
433+ vendor = "unknown";
434+ }
435+ # cpu-vendor-os
436+ else if elemAt l 1 == "apple" ||
437+ elem (elemAt l 2) [ "wasi" "redox" "mmixware" "ghcjs" "mingw32" ] ||
438+ hasPrefix "freebsd" (elemAt l 2) ||
439+ hasPrefix "netbsd" (elemAt l 2) ||
440+ hasPrefix "genode" (elemAt l 2)
441+ then {
442+ cpu = elemAt l 0;
443+ vendor = elemAt l 1;
444+ kernel = if elemAt l 2 == "mingw32"
445+ then "windows" # autotools breaks on -gnu for window
446+ else elemAt l 2;
447+ }
448 else throw "Target specification with 3 components is ambiguous";
449 "4" = { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; abi = elemAt l 3; };
450 }.${toString (length l)}