Skip to content

Commit d1a7046

Browse files
authored
[Dependency] Preserve top_level when converting RuntimeDependency -> Dependency (#304)
1 parent f73c892 commit d1a7046

File tree

3 files changed

+14
-8
lines changed

3 files changed

+14
-8
lines changed

Project.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ Tar = "1.7"
4747
julia = "1.7"
4848

4949
[extras]
50+
ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
5051
ObjectFile = "d8793406-e978-5875-9003-1fc021f44a92"
5152
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
5253

5354
[targets]
54-
test = ["ObjectFile", "Test"]
55+
test = ["ConstructionBase", "ObjectFile", "Test"]

src/Dependencies.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ is_runtime_dependency(::RuntimeDependency) = true
196196
is_top_level_dependency(dep::RuntimeDependency) = dep.top_level
197197
# In some cases we may want to automatically convert a `RuntimeDependency` to a `Dependency`
198198
Base.convert(::Type{Dependency}, dep::RuntimeDependency) =
199-
Dependency(dep.pkg; compat=dep.compat, platforms=dep.platforms)
199+
Dependency(dep.pkg; compat=dep.compat, platforms=dep.platforms, top_level=dep.top_level)
200200

201201
"""
202202
BuildDependency(dep::Union{PackageSpec,String}; platforms)

test/dependencies.jl

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ using BinaryBuilderBase: getname, getpkg, dependencify, destdir, PKG_VERSIONS, g
55
using JSON
66
using LibGit2
77
using ObjectFile
8+
using ConstructionBase
89

9-
# Define equality between dependencies, in order to carry out the tests below
10-
Base.:(==)(a::AbstractDependency, b::AbstractDependency) = getpkg(a) == getpkg(b)
10+
# Define equality between dependencies, in order to carry out the tests below.
11+
# In some cases we want to test that only the PackageSpec match, instead of the full struct.
12+
Base.:(==)(a::D, b::D) where {D<:AbstractDependency} = getproperties(a) == getproperties(b)
13+
Base.isapprox(a::D, b::D) where {D<:AbstractDependency} = getpkg(a) == getpkg(b)
1114

1215
function with_temp_project(f::Function)
1316
mktempdir() do dir
@@ -20,7 +23,7 @@ end
2023
@testset "Dependencies" begin
2124
name = "Foo_jll"
2225
dep = Dependency(PackageSpec(; name = name); platforms=supported_platforms(; experimental=true, exclude=!Sys.isapple))
23-
@test Dependency(name) == dep
26+
@test Dependency(name) dep
2427
@test !is_host_dependency(dep)
2528
@test is_target_dependency(dep)
2629
@test is_build_dependency(dep)
@@ -40,14 +43,14 @@ end
4043

4144
# the same but with compat info
4245
dep_buildver = Dependency(PackageSpec(; name = name), build_version; compat = "~1.2", platforms=[Platform("x86_64", "linux"; cxxstring_abi="cxx11")])
43-
@test Dependency(name, build_version) == dep_buildver
46+
@test Dependency(name, build_version) dep_buildver
4447
@test getname(dep_buildver) == name
4548
@test getpkg(dep_buildver) == PackageSpec(; name = name, version = PKG_VERSIONS.VersionSpec(build_version))
4649
@test getcompat(dep_buildver) == "~1.2"
4750

4851
# the same but only with compat specifier
4952
dep_compat = Dependency(PackageSpec(; name); compat = "2, ~$(build_version)")
50-
@test Dependency(name, build_version) == dep_compat
53+
@test Dependency(name, build_version) dep_compat
5154
@test getname(dep_compat) == name
5255
@test getpkg(dep_compat) == PackageSpec(; name, version = PKG_VERSIONS.VersionSpec(build_version))
5356
@test getcompat(dep_compat) == "2, ~$(build_version)"
@@ -56,7 +59,7 @@ end
5659
@test_throws ArgumentError Dependency(PackageSpec(; name = name), build_version; compat = "2.0")
5760

5861
run_dep = RuntimeDependency(PackageSpec(; name); compat="3.14")
59-
@test RuntimeDependency(name) == run_dep
62+
@test RuntimeDependency(name) run_dep
6063
@test !is_host_dependency(run_dep)
6164
@test is_target_dependency(run_dep)
6265
@test !is_build_dependency(run_dep)
@@ -69,6 +72,8 @@ end
6972
# We should be able to convert a `Vector{RuntimeDependency}` to `Vector{Dependency}`
7073
@test Dependency[RuntimeDependency(name; compat="~1.8", platforms=[Platform("aarch64", "macos"; cxxstring_abi="cxx03")])] ==
7174
[Dependency(name; compat="~1.8", platforms=[Platform("aarch64", "macos"; cxxstring_abi="cxx03")])]
75+
@test @test_logs((:warn, r"was defined as top-level"), Dependency[RuntimeDependency(name; top_level=true)]) ==
76+
[@test_logs((:warn, r"was defined as top-level"), Dependency(name; top_level=true))]
7277
# If the version in the PackageSpec and the compat don't match, an error should be thrown
7378
@test_throws ArgumentError RuntimeDependency(PackageSpec(; name, version=v"1.2.3"); compat = "2.0")
7479

0 commit comments

Comments
 (0)