Handle JBB case where no dep for os/arch combo

This commit is contained in:
Ganesh Viswanathan 2020-07-16 16:05:22 -05:00
commit 5acfd0e819
2 changed files with 28 additions and 25 deletions

View file

@ -134,13 +134,13 @@ proc newConanPackageFromUri*(uri: string, shared = true): ConanPackage =
proc getUriFromConanPackage*(pkg: ConanPackage): string =
## Convert a ConanPackage to a conan uri
result = pkg.name
if pkg.version.len != 0:
if pkg.version.nBl:
result &= "/" & pkg.version
if pkg.user.len != 0:
if pkg.user.nBl:
result &= "@" & pkg.user
if pkg.channel.len != 0:
if pkg.channel.nBl:
result &= "/" & pkg.channel
if pkg.bhash.len != 0:
if pkg.bhash.nBl:
result &= ":" & pkg.bhash
proc searchConan*(name: string, version = "", user = "", channel = ""): ConanPackage =
@ -149,11 +149,11 @@ proc searchConan*(name: string, version = "", user = "", channel = ""): ConanPac
## Search is quite slow so it is preferable to specify a version and use `getConanBuilds()`
var
query = name
if version.len != 0:
if version.nBl:
query &= "/" & version
if user.len != 0:
if user.nBl:
query &= "@" & user
if channel.len != 0:
if channel.nBl:
query &= "/" & channel
gecho &"# Searching Conan.io for latest version of {name}"
@ -172,11 +172,11 @@ proc searchConan*(name: string, version = "", user = "", channel = ""): ConanPac
if "@_/_" in str:
let
ver = str.split('/')[1].split('@')[0]
if latestv.len == 0 or compareVersions(ver, latestv) > 0:
if latestv.Bl or compareVersions(ver, latestv) > 0:
latestv = ver
latest = str
if latest.len != 0:
if latest.nBl:
result = newConanPackageFromUri(latest)
proc searchConan*(pkg: ConanPackage): ConanPackage =
@ -200,7 +200,7 @@ proc getConanBuilds*(pkg: ConanPackage, filter = "") =
vsplit[0]
query =
if pkg.bhash.len == 0:
if pkg.bhash.Bl:
block:
var
query = &"?q=arch={arch}&os={os.capitalizeAscii()}"
@ -208,7 +208,7 @@ proc getConanBuilds*(pkg: ConanPackage, filter = "") =
query &= "&build_type=Release"
if "shared=" notin filter:
query &= &"&options.shared={($pkg.shared).capitalizeAscii()}"
if filter.len != 0:
if filter.nBl:
query &= &"&{filter}"
if "compiler=" notin filter and os != "windows":
query &= &"&compiler={compiler}&compiler.version=" & vfilter
@ -232,7 +232,7 @@ proc getConanBuilds*(pkg: ConanPackage, filter = "") =
if not j1.isNil:
for bhash, bdata in j1.getFields():
if pkg.bhash.len == 0 or pkg.bhash == bhash:
if pkg.bhash.Bl or pkg.bhash == bhash:
let
bld = new(ConanBuild)
settings = bdata.getOrDefault("settings")
@ -328,13 +328,13 @@ proc dlConanBuild*(pkg: ConanPackage, bld: ConanBuild, outdir: string, revision
## Download specific `revision` of `bld` to `outdir`
##
## If omitted, the latest revision (first) is downloaded
doAssert bld.revisions.len != 0, "No build revisions found for Conan.io package " & pkg.getUriFromConanPackage()
doAssert bld.revisions.nBl, "No build revisions found for Conan.io package " & pkg.getUriFromConanPackage()
let
outdir = fixRelPath(outdir)
revision =
if revision.len != 0:
if revision.nBl:
revision
else:
bld.revisions[0]
@ -379,7 +379,7 @@ proc downloadConan*(pkg: ConanPackage, outdir: string, main = true) =
outdir = fixRelPath(outdir)
pkg =
if pkg.version.len == 0:
if pkg.version.Bl:
searchConan(pkg)
else:
pkg
@ -395,12 +395,12 @@ proc downloadConan*(pkg: ConanPackage, outdir: string, main = true) =
pkg.getConanBuilds()
doAssert pkg.recipes.len != 0, &"Failed to download {pkg.name} v{pkg.version} from Conan - check https://conan.io/center"
doAssert pkg.recipes.nBl, &"Failed to download {pkg.name} v{pkg.version} from Conan - check https://conan.io/center"
gecho &"# Downloading {pkg.name} v{pkg.version} from Conan.io"
for recipe, builds in pkg.recipes:
for build in builds:
if pkg.bhash.len == 0 or pkg.bhash == build.bhash:
if pkg.bhash.Bl or pkg.bhash == build.bhash:
pkg.getConanRevisions(build)
pkg.dlConanBuild(build, outdir)
pkg.dlConanRequires(build, outdir)
@ -442,7 +442,7 @@ proc getConanLDeps*(pkg: ConanPackage, outdir: string, main = true): seq[string]
libs = if pkg.shared: pkg.sharedLibs else: pkg.staticLibs
str = if pkg.shared: "shared" else: "static"
doAssert libs.len != 0, &"No {str} libs found for {pkg.name} in {outdir}"
doAssert libs.nBl, &"No {str} libs found for {pkg.name} in {outdir}"
if not main:
for lib in libs:

View file

@ -65,7 +65,7 @@ proc parseJBBProject(pkg: JBBPackage, outdir: string) =
for line in data.splitLines():
let
line = line.strip()
if line.len != 0:
if line.nBl:
if line.startsWith('['):
if line == "[deps]":
deps = true
@ -100,7 +100,7 @@ proc parseJBBArtifacts(pkg: JBBPackage, outdir: string) =
for line in data.splitLines():
let
line = line.strip()
if line.len != 0:
if line.nBl:
let
spl = line.split(" = ", 1)
name = spl[0]
@ -145,7 +145,7 @@ proc getJBBRepo*(pkg: JBBPackage, outdir: string) =
quiet = true
)
if pkg.version.len != 0:
if pkg.version.nBl:
# Checkout correct tag
let
tags = gitTags(path)
@ -157,7 +157,7 @@ proc getJBBRepo*(pkg: JBBPackage, outdir: string) =
var
url = pkg.baseUrl
if "$#" in url or "$1" in url:
doAssert pkg.version.len != 0, "Need version for custom BinaryBuilder.org url: " & url
doAssert pkg.version.nBl, "Need version for custom BinaryBuilder.org url: " & url
url = url % pkg.version
downloadUrl(url & "Artifacts.toml", path, quiet = true)
downloadUrl(url & "Project.toml", path, quiet = true)
@ -209,11 +209,14 @@ proc downloadJBB*(pkg: JBBPackage, outdir: string, main = true) =
pkg.getJBBRepo(outdir)
doAssert pkg.url.len != 0, &"Failed to download {pkg.name} info from BinaryBuilder.org"
if pkg.url.Bl:
# No url for deps means no package for that os/arch combo - e.g. Attr
doAssert not main, &"Failed to download {pkg.name} info from BinaryBuilder.org"
return
let
vstr =
if pkg.version.len != 0:
if pkg.version.nBl:
&" v{pkg.version}"
else:
""
@ -250,7 +253,7 @@ proc getJBBLDeps*(pkg: JBBPackage, outdir: string, shared: bool, main = true): s
libs = if shared: pkg.sharedLibs else: pkg.staticLibs
str = if shared: "shared" else: "static"
doAssert libs.len != 0, &"No {str} libs found for {pkg.name} in {outdir}"
doAssert libs.nBl, &"No {str} libs found for {pkg.name} in {outdir}"
if not main:
for lib in libs: