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

View file

@ -65,7 +65,7 @@ proc parseJBBProject(pkg: JBBPackage, outdir: string) =
for line in data.splitLines(): for line in data.splitLines():
let let
line = line.strip() line = line.strip()
if line.len != 0: if line.nBl:
if line.startsWith('['): if line.startsWith('['):
if line == "[deps]": if line == "[deps]":
deps = true deps = true
@ -100,7 +100,7 @@ proc parseJBBArtifacts(pkg: JBBPackage, outdir: string) =
for line in data.splitLines(): for line in data.splitLines():
let let
line = line.strip() line = line.strip()
if line.len != 0: if line.nBl:
let let
spl = line.split(" = ", 1) spl = line.split(" = ", 1)
name = spl[0] name = spl[0]
@ -145,7 +145,7 @@ proc getJBBRepo*(pkg: JBBPackage, outdir: string) =
quiet = true quiet = true
) )
if pkg.version.len != 0: if pkg.version.nBl:
# Checkout correct tag # Checkout correct tag
let let
tags = gitTags(path) tags = gitTags(path)
@ -157,7 +157,7 @@ proc getJBBRepo*(pkg: JBBPackage, outdir: string) =
var var
url = pkg.baseUrl url = pkg.baseUrl
if "$#" in url or "$1" in url: 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 url = url % pkg.version
downloadUrl(url & "Artifacts.toml", path, quiet = true) downloadUrl(url & "Artifacts.toml", path, quiet = true)
downloadUrl(url & "Project.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) 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 let
vstr = vstr =
if pkg.version.len != 0: if pkg.version.nBl:
&" v{pkg.version}" &" v{pkg.version}"
else: else:
"" ""
@ -250,7 +253,7 @@ proc getJBBLDeps*(pkg: JBBPackage, outdir: string, shared: bool, main = true): s
libs = if shared: pkg.sharedLibs else: pkg.staticLibs libs = if shared: pkg.sharedLibs else: pkg.staticLibs
str = if shared: "shared" else: "static" 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: if not main:
for lib in libs: for lib in libs: