| author | |
| committer | |
| log | c903b760106ff9db5b3de74fa0c4034eddbd9cbf |
| tree | 17a0db9969c843926d7541bdbdfa73fd35c7f978 |
| parent | 3c7f030a60b038045334788837f40bee0226109c |
| parent | 845af5c55208753dc355fad734a8c4893338f8f6 |
| signature | Signed by PGP key 4AEE18F83AFDEB23 |
target: Implement OS version detection for OSX3 files changed, 29 insertions(+), 2 deletions(-)
lib/std/os.zig+3| ... | ... | @@ -2764,6 +2764,7 @@ pub const SysCtlError = error{ |
| 2764 | 2764 | PermissionDenied, |
| 2765 | 2765 | SystemResources, |
| 2766 | 2766 | NameTooLong, |
| 2767 | UnknownName, | |
| 2767 | 2768 | } || UnexpectedError; |
| 2768 | 2769 | |
| 2769 | 2770 | pub fn sysctl( |
| ... | ... | @@ -2779,6 +2780,7 @@ pub fn sysctl( |
| 2779 | 2780 | EFAULT => unreachable, |
| 2780 | 2781 | EPERM => return error.PermissionDenied, |
| 2781 | 2782 | ENOMEM => return error.SystemResources, |
| 2783 | ENOENT => return error.UnknownName, | |
| 2782 | 2784 | else => |err| return unexpectedErrno(err), |
| 2783 | 2785 | } |
| 2784 | 2786 | } |
| ... | ... | @@ -2795,6 +2797,7 @@ pub fn sysctlbynameC( |
| 2795 | 2797 | EFAULT => unreachable, |
| 2796 | 2798 | EPERM => return error.PermissionDenied, |
| 2797 | 2799 | ENOMEM => return error.SystemResources, |
| 2800 | ENOENT => return error.UnknownName, | |
| 2798 | 2801 | else => |err| return unexpectedErrno(err), |
| 2799 | 2802 | } |
| 2800 | 2803 | } |
lib/std/thread.zig+1-1| ... | ... | @@ -382,7 +382,7 @@ pub const Thread = struct { |
| 382 | 382 | var count_len: usize = @sizeOf(c_int); |
| 383 | 383 | const name = if (comptime std.Target.current.isDarwin()) "hw.logicalcpu" else "hw.ncpu"; |
| 384 | 384 | os.sysctlbynameC(name, &count, &count_len, null, 0) catch |err| switch (err) { |
| 385 | error.NameTooLong => unreachable, | |
| 385 | error.NameTooLong, error.UnknownName => unreachable, | |
| 386 | 386 | else => |e| return e, |
| 387 | 387 | }; |
| 388 | 388 | return @intCast(usize, count); |
lib/std/zig/system.zig+25-1| ... | ... | @@ -224,7 +224,31 @@ pub const NativeTargetInfo = struct { |
| 224 | 224 | // TODO Detect native operating system version. |
| 225 | 225 | }, |
| 226 | 226 | .macosx => { |
| 227 | // TODO Detect native operating system version. | |
| 227 | var product_version: [32]u8 = undefined; | |
| 228 | var size: usize = product_version.len; | |
| 229 | ||
| 230 | // The osproductversion sysctl was introduced first with | |
| 231 | // High Sierra, thankfully that's also the baseline that Zig | |
| 232 | // supports | |
| 233 | std.os.sysctlbynameC( | |
| 234 | "kern.osproductversion", | |
| 235 | &product_version[0], | |
| 236 | &size, | |
| 237 | null, | |
| 238 | 0, | |
| 239 | ) catch |err| switch (err) { | |
| 240 | error.UnknownName => unreachable, | |
| 241 | else => unreachable, | |
| 242 | }; | |
| 243 | ||
| 244 | if (std.builtin.Version.parse(product_version[0..size])) |ver| { | |
| 245 | os.version_range.semver.min = ver; | |
| 246 | os.version_range.semver.max = ver; | |
| 247 | } else |err| switch (err) { | |
| 248 | error.Overflow => {}, | |
| 249 | error.InvalidCharacter => {}, | |
| 250 | error.InvalidVersion => {}, | |
| 251 | } | |
| 228 | 252 | }, |
| 229 | 253 | .freebsd => { |
| 230 | 254 | // TODO Detect native operating system version. |