|
1 | | -# version and support queries |
2 | | - |
3 | | -@noinline function _syscall_version(name) |
4 | | - size = Ref{Csize_t}() |
5 | | - err = @ccall sysctlbyname(name::Cstring, C_NULL::Ptr{Cvoid}, size::Ptr{Csize_t}, |
6 | | - C_NULL::Ptr{Cvoid}, 0::Csize_t)::Cint |
7 | | - Base.systemerror("sysctlbyname", err != 0) |
8 | | - |
9 | | - osrelease = Vector{UInt8}(undef, size[]) |
10 | | - err = @ccall sysctlbyname(name::Cstring, osrelease::Ptr{Cvoid}, size::Ptr{Csize_t}, |
11 | | - C_NULL::Ptr{Cvoid}, 0::Csize_t)::Cint |
12 | | - Base.systemerror("sysctlbyname", err != 0) |
13 | | - |
14 | | - verstr = view(String(osrelease), 1:size[]-1) |
15 | | - parse(VersionNumber, verstr) |
16 | | -end |
17 | | - |
18 | | -@static if isdefined(Base, :OncePerProcess) # VERSION >= v"1.12.0-DEV.1421" |
19 | | - const darwin_version = OncePerProcess{VersionNumber}() do |
20 | | - _syscall_version("kern.osrelease") |
21 | | - end |
22 | | - const macos_version = OncePerProcess{VersionNumber}() do |
23 | | - _syscall_version("kern.osproductversion") |
24 | | - end |
25 | | -else |
26 | | - const _darwin_version = Ref{VersionNumber}() |
27 | | - function darwin_version() |
28 | | - if !isassigned(_darwin_version) |
29 | | - _darwin_version[] = _syscall_version("kern.osrelease") |
30 | | - end |
31 | | - _darwin_version[] |
32 | | - end |
33 | | - |
34 | | - const _macos_version = Ref{VersionNumber}() |
35 | | - function macos_version() |
36 | | - if !isassigned(_macos_version) |
37 | | - _macos_version[] = _syscall_version("kern.osproductversion") |
38 | | - end |
39 | | - _macos_version[] |
40 | | - end |
41 | | -end |
42 | | - |
43 | | -@doc """ |
44 | | - Metal.darwin_version() -> VersionNumber |
45 | | -
|
46 | | -Returns the host Darwin kernel version. |
47 | | -
|
48 | | -See also [`Metal.macos_version`](@ref). |
49 | | -""" darwin_version |
50 | | - |
51 | | -@doc """ |
52 | | - Metal.macos_version() -> VersionNumber |
53 | | -
|
54 | | -Returns the host macOS version. |
55 | | -
|
56 | | -See also [`Metal.darwin_version`](@ref). |
57 | | -""" macos_version |
58 | | - |
59 | | -""" |
60 | | - Metal.is_macos([ver::VersionNumber]) -> Bool |
61 | | -
|
62 | | -Returns whether the OS is macOS with version `ver` or newer. |
63 | | -
|
64 | | -See also [`Metal.macos_version`](@ref). |
65 | | -""" |
66 | | -function is_macos(ver=nothing) |
67 | | - if !Sys.isapple() |
68 | | - false |
69 | | - elseif ver === nothing |
70 | | - true |
71 | | - else |
72 | | - macos_version() >= ver |
73 | | - end |
74 | | -end |
75 | | - |
76 | 1 |
|
77 | 2 | ## support queries |
78 | 3 |
|
|
0 commit comments