From 5acfd0e8197160e8f71274473a4f9f2f75bc8fbc Mon Sep 17 00:00:00 2001 From: Ganesh Viswanathan Date: Thu, 16 Jul 2020 16:05:22 -0500 Subject: [PATCH] Handle JBB case where no dep for os/arch combo --- nimterop/build/conan.nim | 36 ++++++++++++++++++------------------ nimterop/build/jbb.nim | 17 ++++++++++------- 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/nimterop/build/conan.nim b/nimterop/build/conan.nim index eb27557..6df25d8 100644 --- a/nimterop/build/conan.nim +++ b/nimterop/build/conan.nim @@ -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: diff --git a/nimterop/build/jbb.nim b/nimterop/build/jbb.nim index a4ff98f..9dacfe2 100644 --- a/nimterop/build/jbb.nim +++ b/nimterop/build/jbb.nim @@ -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: