mollusk 0e4acfb8f2 fix incorrect folder name for julia-0.6.x
Former-commit-id: ef2c7401e0876f22d2f7762d182cfbcd5a7d9c70
2018-06-11 03:28:36 -07:00

87 lines
2.6 KiB
Julia

# This file is a part of Julia. License is MIT: https://julialang.org/license
"""
is_unix([os])
Predicate for testing if the OS provides a Unix-like interface.
See documentation in [Handling Operating System Variation](@ref).
"""
function is_unix(os::Symbol)
if is_windows(os)
return false
elseif is_linux(os) || is_bsd(os)
return true
else
throw(ArgumentError("unknown operating system \"$os\""))
end
end
"""
is_linux([os])
Predicate for testing if the OS is a derivative of Linux.
See documentation in [Handling Operating System Variation](@ref).
"""
is_linux(os::Symbol) = (os == :Linux)
"""
is_bsd([os])
Predicate for testing if the OS is a derivative of BSD.
See documentation in [Handling Operating System Variation](@ref).
"""
is_bsd(os::Symbol) = (os == :FreeBSD || os == :OpenBSD || os == :NetBSD || os == :DragonFly || os == :Darwin || os == :Apple)
"""
is_windows([os])
Predicate for testing if the OS is a derivative of Microsoft Windows NT.
See documentation in [Handling Operating System Variation](@ref).
"""
is_windows(os::Symbol) = (os == :Windows || os == :NT)
"""
is_apple([os])
Predicate for testing if the OS is a derivative of Apple Macintosh OS X or Darwin.
See documentation in [Handling Operating System Variation](@ref).
"""
is_apple(os::Symbol) = (os == :Apple || os == :Darwin)
"""
@static
Partially evaluates an expression at parse time.
For example, `@static is_windows() ? foo : bar` will evaluate `is_windows()` and insert either `foo` or `bar` into the expression.
This is useful in cases where a construct would be invalid on other platforms,
such as a `ccall` to a non-existent function.
`@static if is_apple() foo end` and `@static foo <&&,||> bar` are also valid syntax.
"""
macro static(ex)
if isa(ex, Expr)
if ex.head === :if || ex.head === :&& || ex.head === :||
cond = eval(current_module(), ex.args[1])
if xor(cond, ex.head === :||)
return esc(ex.args[2])
elseif length(ex.args) == 3
return esc(ex.args[3])
elseif ex.head === :if
return nothing
else
return cond
end
end
end
throw(ArgumentError("invalid @static macro"))
end
let KERNEL = ccall(:jl_get_UNAME, Any, ())
# evaluate the zero-argument form of each of these functions
# as a function returning a static constant based on the build-time
# operating-system kernel
for f in (:is_unix, :is_linux, :is_bsd, :is_apple, :is_windows)
@eval $f() = $(getfield(current_module(),f)(KERNEL))
end
end