diff --git a/src/nimble.nim b/src/nimble.nim index 6bb23c8..3436200 100644 --- a/src/nimble.nim +++ b/src/nimble.nim @@ -425,10 +425,11 @@ proc buildFromDir(pkgInfo: TPackageInfo, paths: seq[string]) = var args = "" for path in paths: args.add("--path:\"" & path & "\" ") for bin in pkgInfo.bin: + let outputOpt = pkgInfo.getOutputOption(bin) echo("Building ", pkginfo.name, "/", bin, " using ", pkgInfo.backend, " backend...") - doCmd(getNimBin() & " $# -d:release --noBabelPath $# \"$#\"" % - [pkgInfo.backend, args, realDir / bin.changeFileExt("nim")]) + doCmd(getNimBin() & " $# -d:release --noBabelPath $#$# \"$#\"" % + [pkgInfo.backend, args, outputOpt, realDir / bin.changeFileExt("nim")]) proc saveNimbleMeta(pkgDestDir, url: string, filesInstalled: TSet[string]) = var nimblemeta = %{"url": %url} diff --git a/src/nimblepkg/packageinfo.nim b/src/nimblepkg/packageinfo.nim index 8b3056e..9ac78b0 100644 --- a/src/nimblepkg/packageinfo.nim +++ b/src/nimblepkg/packageinfo.nim @@ -21,6 +21,7 @@ type installExt*: seq[string] requires*: seq[TPkgTuple] bin*: seq[string] + buildDir*: string srcDir*: string backend*: string @@ -56,6 +57,7 @@ proc initPackageInfo(): TPackageInfo = result.requires = @[] result.bin = @[] result.srcDir = "" + result.buildDir = "" result.backend = "c" proc validatePackageInfo(pkgInfo: TPackageInfo, path: string) = @@ -140,6 +142,7 @@ proc readPackageInfo*(path: string): TPackageInfo = of "description": result.description = ev.value of "license": result.license = ev.value of "srcdir": result.srcDir = ev.value + of "builddir": result.buildDir = ev.value of "skipdirs": result.skipDirs.add(ev.value.multiSplit) of "skipfiles": @@ -318,6 +321,14 @@ proc getRealDir*(pkgInfo: TPackageInfo): string = else: result = pkgInfo.mypath.splitFile.dir +proc getOutputOption*(pkgInfo: TPackageInfo, bin: string): string = + ## Returns an output option for the nim compiler if a build directory + ## has been set. + if pkgInfo.buildDir != "": + result = " -o:\"" & pkgInfo.mypath.splitFile.dir / pkgInfo.buildDir / bin & "\"" + else: + result = "" + proc getNameVersion*(pkgpath: string): tuple[name, version: string] = ## Splits ``pkgpath`` in the format ``/home/user/.nimble/pkgs/package-0.1`` ## into ``(packagea, 0.1)``