systems: fix netbsd triple parsing

binutils expects x86_64-unknown-netbsd<version> (only 3 parts!). Any other combo seems to fail.

Also handle darwin versions similarly.

/cc @Ericson2314
This commit is contained in:
Matthew Bauer 2018-07-24 21:02:46 -04:00 committed by Matthew Bauer
parent 96ce1e03a4
commit a22797d356

View File

@ -18,6 +18,7 @@
with lib.lists; with lib.lists;
with lib.types; with lib.types;
with lib.attrsets; with lib.attrsets;
with lib.strings;
with (import ./inspect.nix { inherit lib; }).predicates; with (import ./inspect.nix { inherit lib; }).predicates;
let let
@ -179,9 +180,6 @@ rec {
} // { # aliases } // { # aliases
# 'darwin' is the kernel for all of them. We choose macOS by default. # 'darwin' is the kernel for all of them. We choose macOS by default.
darwin = kernels.macos; darwin = kernels.macos;
# TODO(@Ericson2314): Handle these Darwin version suffixes more generally.
darwin10 = kernels.macos;
darwin14 = kernels.macos;
watchos = kernels.ios; watchos = kernels.ios;
tvos = kernels.ios; tvos = kernels.ios;
win32 = kernels.windows; win32 = kernels.windows;
@ -269,6 +267,8 @@ rec {
then { cpu = elemAt l 0; kernel = elemAt l 1; abi = elemAt l 2; } then { cpu = elemAt l 0; kernel = elemAt l 1; abi = elemAt l 2; }
else if (elemAt l 2 == "mingw32") # autotools breaks on -gnu for window else if (elemAt l 2 == "mingw32") # autotools breaks on -gnu for window
then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "windows"; abi = "gnu"; } then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "windows"; abi = "gnu"; }
else if hasPrefix "netbsd" (elemAt l 2)
then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; }
else throw "Target specification with 3 components is ambiguous"; else throw "Target specification with 3 components is ambiguous";
"4" = { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; abi = elemAt l 3; }; "4" = { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; abi = elemAt l 3; };
}.${toString (length l)} }.${toString (length l)}
@ -295,7 +295,9 @@ rec {
else if isDarwin parsed then vendors.apple else if isDarwin parsed then vendors.apple
else if isWindows parsed then vendors.pc else if isWindows parsed then vendors.pc
else vendors.unknown; else vendors.unknown;
kernel = getKernel args.kernel; kernel = if hasPrefix "darwin" args.kernel then getKernel "darwin"
else if hasPrefix "netbsd" args.kernel then getKernel "netbsd"
else getKernel args.kernel;
abi = abi =
/**/ if args ? abi then getAbi args.abi /**/ if args ? abi then getAbi args.abi
else if isLinux parsed then else if isLinux parsed then