Skip to content

Commit 8a06fc8

Browse files
committed
target: Implement OS version detection for FreeBSD
Fixes ziglang#4582
1 parent ef92949 commit 8a06fc8

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

lib/std/zig/system.zig

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,8 +292,20 @@ pub const NativeTargetInfo = struct {
292292
}
293293
},
294294
.freebsd => {
295-
// Unimplemented, fall back to default.
296-
// https://github.com/ziglang/zig/issues/4582
295+
var osreldate: u32 = undefined;
296+
var len: usize = undefined;
297+
298+
std.os.sysctlbynameZ("kern.osreldate", &osreldate, &len, null, 0) catch unreachable;
299+
300+
// https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html
301+
// Major * 100,000 has been convention since FreeBSD 2.2 (1997)
302+
// Minor * 1(0),000 summed has been convention since FreeBSD 2.2 (1997)
303+
// e.g. 492101 = 4.11-STABLE = 4.(9+2)
304+
const major = osreldate / 100000;
305+
const minor1 = osreldate % 100000 / 10000; // usually 0 since 5.1
306+
const minor2 = osreldate % 10000 / 1000; // 0 before 5.1, minor version since
307+
os.version_range.semver.min = .{ .major = major, .minor = minor1 + minor2 };
308+
os.version_range.semver.max = .{ .major = major, .minor = minor1 + minor2 };
297309
},
298310
else => {
299311
// Unimplemented, fall back to default version range.

0 commit comments

Comments
 (0)