Skip to content

Commit 5e59709

Browse files
authored
Use OpenLibm_jll instead of Base.libm (#344)
This avoids making the assumption that `Base.libm` exists, which it may not once Julia's dependency on openlibm is excised.
1 parent 9b315eb commit 5e59709

File tree

6 files changed

+19
-20
lines changed

6 files changed

+19
-20
lines changed

Project.toml

+2
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ version = "1.6.1"
55
[deps]
66
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
77
LogExpFunctions = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
8+
OpenLibm_jll = "05823500-19ac-5b8b-9628-191a04bc5112"
89
OpenSpecFun_jll = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
910

1011
[compat]
1112
ChainRulesCore = "0.9.44, 0.10, 1"
1213
ChainRulesTestUtils = "0.6.8, 0.7, 1"
1314
LogExpFunctions = "0.2, 0.3"
15+
OpenLibm_jll = "0.7, 0.8"
1416
OpenSpecFun_jll = "0.5"
1517
julia = "1.3"
1618

src/SpecialFunctions.jl

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module SpecialFunctions
33
import ChainRulesCore
44
import LogExpFunctions
55

6+
using OpenLibm_jll
67
using OpenSpecFun_jll
78

89
export

src/bessel.jl

+8-8
Original file line numberDiff line numberDiff line change
@@ -189,14 +189,14 @@ for jy in ("j","y"), nu in (0,1)
189189
bjynu = Symbol("bessel",jy,nu)
190190
if jy == "y"
191191
@eval begin
192-
$bjynu(x::Float64) = nan_dom_err(ccall(($jynu,libm), Float64, (Float64,), x), x)
193-
$bjynu(x::Float32) = nan_dom_err(ccall(($jynuf,libm), Float32, (Float32,), x), x)
192+
$bjynu(x::Float64) = nan_dom_err(ccall(($jynu,libopenlibm), Float64, (Float64,), x), x)
193+
$bjynu(x::Float32) = nan_dom_err(ccall(($jynuf,libopenlibm), Float32, (Float32,), x), x)
194194
$bjynu(x::Float16) = Float16($bjynu(Float32(x)))
195195
end
196196
else
197197
@eval begin
198-
$bjynu(x::Float64) = ccall(($jynu,libm), Float64, (Float64,), x)
199-
$bjynu(x::Float32) = ccall(($jynuf,libm), Float32, (Float32,), x)
198+
$bjynu(x::Float64) = ccall(($jynu,libopenlibm), Float64, (Float64,), x)
199+
$bjynu(x::Float32) = ccall(($jynuf,libopenlibm), Float32, (Float32,), x)
200200
$bjynu(x::Float16) = Float16($bjynu(Float32(x)))
201201
end
202202
end
@@ -389,8 +389,8 @@ function besselj(nu::Float64, z::Complex{Float64})
389389
end
390390
end
391391

392-
besselj(nu::Cint, x::Float64) = ccall((:jn, libm), Float64, (Cint, Float64), nu, x)
393-
besselj(nu::Cint, x::Float32) = ccall((:jnf, libm), Float32, (Cint, Float32), nu, x)
392+
besselj(nu::Cint, x::Float64) = ccall((:jn, libopenlibm), Float64, (Cint, Float64), nu, x)
393+
besselj(nu::Cint, x::Float32) = ccall((:jnf, libopenlibm), Float32, (Cint, Float32), nu, x)
394394

395395

396396
function besseljx(nu::Float64, z::Complex{Float64})
@@ -413,13 +413,13 @@ function bessely(nu::Cint, x::Float64)
413413
if x < 0
414414
throw(DomainError(x, "`x` must be nonnegative."))
415415
end
416-
ccall((:yn, libm), Float64, (Cint, Float64), nu, x)
416+
ccall((:yn, libopenlibm), Float64, (Cint, Float64), nu, x)
417417
end
418418
function bessely(nu::Cint, x::Float32)
419419
if x < 0
420420
throw(DomainError(x, "`x` must be nonnegative."))
421421
end
422-
ccall((:ynf, libm), Float32, (Cint, Float32), nu, x)
422+
ccall((:ynf, libopenlibm), Float32, (Cint, Float32), nu, x)
423423
end
424424

425425
function bessely(nu::Float64, z::Complex{Float64})

src/erf.jl

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# This file contains code that was formerly a part of Julia. License is MIT: http://julialang.org/license
22

3-
using Base.Math: @horner, libm
3+
using Base.Math: @horner
44
using Base.MPFR: ROUNDING_MODE
55

66
for f in (:erf, :erfc)
77
@eval begin
8-
($f)(x::Float64) = ccall(($(string(f)),libm), Float64, (Float64,), x)
9-
($f)(x::Float32) = ccall(($(string(f,"f")),libm), Float32, (Float32,), x)
8+
($f)(x::Float64) = ccall(($(string(f)),libopenlibm), Float64, (Float64,), x)
9+
($f)(x::Float32) = ccall(($(string(f,"f")),libopenlibm), Float32, (Float32,), x)
1010
($f)(x::Real) = ($f)(float(x))
1111
($f)(a::Float16) = Float16($f(Float32(a)))
1212
($f)(a::Complex{Float16}) = Complex{Float16}($f(Complex{Float32}(a)))

src/gamma.jl

+4-4
Original file line numberDiff line numberDiff line change
@@ -570,8 +570,8 @@ export gamma, loggamma, logabsgamma, beta, logbeta, logabsbeta, logfactorial, lo
570570

571571
## from base/special/gamma.jl
572572

573-
gamma(x::Float64) = nan_dom_err(ccall((:tgamma, libm), Float64, (Float64,), x), x)
574-
gamma(x::Float32) = nan_dom_err(ccall((:tgammaf, libm), Float32, (Float32,), x), x)
573+
gamma(x::Float64) = nan_dom_err(ccall((:tgamma, libopenlibm), Float64, (Float64,), x), x)
574+
gamma(x::Float32) = nan_dom_err(ccall((:tgammaf, libopenlibm), Float32, (Float32,), x), x)
575575
gamma(x::Float16) = Float16(gamma(Float32(x)))
576576
gamma(x::AbstractFloat) = throw(MethodError(gamma, x))
577577

@@ -619,12 +619,12 @@ gamma(x::Number) = gamma(float(x))
619619

620620
function logabsgamma(x::Float64)
621621
signp = Ref{Int32}()
622-
y = ccall((:lgamma_r,libm), Float64, (Float64, Ptr{Int32}), x, signp)
622+
y = ccall((:lgamma_r,libopenlibm), Float64, (Float64, Ptr{Int32}), x, signp)
623623
return y, Int(signp[])
624624
end
625625
function logabsgamma(x::Float32)
626626
signp = Ref{Int32}()
627-
y = ccall((:lgammaf_r,libm), Float32, (Float32, Ptr{Int32}), x, signp)
627+
y = ccall((:lgammaf_r,libopenlibm), Float32, (Float32, Ptr{Int32}), x, signp)
628628
return y, Int(signp[])
629629
end
630630
logabsgamma(x::Real) = logabsgamma(float(x))

test/gamma.jl

+1-5
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,7 @@
5959
@test eta(Complex{Float32}(2)) eta(2)
6060
end
6161
@testset "gamma, loggamma, logabsgamma (complex argument)" begin
62-
if Base.Math.libm == "libopenlibm"
63-
@test gamma.(Float64[1:25;]) == gamma.(1:25)
64-
else
65-
@test gamma.(Float64[1:25;]) gamma.(1:25)
66-
end
62+
@test gamma.(Float64[1:25;]) gamma.(1:25)
6763
for elty in (Float32, Float64)
6864
@test gamma(convert(elty,1/2)) convert(elty,sqrt(π))
6965
@test gamma(convert(elty,-1/2)) convert(elty,-2sqrt(π))

0 commit comments

Comments
 (0)