@@ -133,6 +133,18 @@ function build_tarballs(ARGS, src_name, src_version, sources, script,
133
133
sources = coerce_source .(sources)
134
134
dependencies = coerce_dependency .(dependencies)
135
135
136
+ # Reject user supplied dependencies using a VersionSpec: these should
137
+ # either use compat, or build_version, or both (depending on what they are
138
+ # trying to achieve). We cannot check for this in the Dependency
139
+ # constructor, as there are several valid situations in which we *do* want
140
+ # to store versions here (e.g. after running the dependency through the
141
+ # package resolver).
142
+ for dep in dependencies
143
+ if dep isa Dependency && dep. pkg. version != Pkg. Types. VersionSpec (" *" )
144
+ error (" Dependency $(dep. pkg. name) specifies a version, use build_version and/or compat instead" )
145
+ end
146
+ end
147
+
136
148
# Do not clobber caller's ARGS
137
149
ARGS = deepcopy (ARGS )
138
150
@@ -1369,24 +1381,6 @@ const uuid_package = UUID("cfb74b52-ec16-5bb7-a574-95d9e393895e")
1369
1381
# "_jll" to the name of the new package before computing its UUID.
1370
1382
jll_uuid (name) = bb_specific_uuid5 (uuid_package, " $(name) _jll" )
1371
1383
function build_project_dict (name, version, dependencies:: Array{Dependency} , julia_compat:: String = DEFAULT_JULIA_VERSION_SPEC; lazy_artifacts:: Bool = false , kwargs... )
1372
- function has_compat_info (d:: Dependency )
1373
- r = Pkg. Types. VersionRange ()
1374
- return isa (d. pkg. version, VersionNumber) ||
1375
- length (d. pkg. version. ranges) != 1 ||
1376
- d. pkg. version. ranges[1 ] != r
1377
- end
1378
- function exactly_this_version (v:: VersionNumber )
1379
- return string (" =" , VersionNumber (v. major, v. minor, v. patch))
1380
- end
1381
- function exactly_this_version (v:: Pkg.Types.VersionSpec )
1382
- if length (v. ranges) == 1 &&
1383
- v. ranges[1 ]. lower. n == 3 &&
1384
- v. ranges[1 ]. lower == v. ranges[1 ]. upper
1385
- return string (" =" , v)
1386
- end
1387
- return string (v)
1388
- end
1389
- exactly_this_version (v) = v
1390
1384
Pkg. Types. semver_spec (julia_compat) # verify julia_compat is valid
1391
1385
project = Dict (
1392
1386
" name" => " $(name) _jll" ,
@@ -1401,8 +1395,9 @@ function build_project_dict(name, version, dependencies::Array{Dependency}, juli
1401
1395
for dep in dependencies
1402
1396
depname = getname (dep)
1403
1397
project[" deps" ][depname] = string (jll_uuid (depname))
1404
- if has_compat_info (dep)
1405
- project[" compat" ][depname] = string (exactly_this_version (dep. pkg. version))
1398
+ if dep isa Dependency && length (dep. compat) > 0
1399
+ Pkg. Types. semver_spec (dep. compat) # verify dep.compat is valid
1400
+ project[" compat" ][depname] = dep. compat
1406
1401
end
1407
1402
end
1408
1403
# Always add Libdl, Pkg and Artifacts as dependencies
0 commit comments