From d984032f1e219294a2f5615c38dc541ad536b113 Mon Sep 17 00:00:00 2001 From: Dominik Picheta Date: Fri, 28 Jan 2011 01:09:41 +0000 Subject: [PATCH] Slight change for .babel file format, dependExists now checks for installed packages. --- babel.babel | 7 ++++--- installer.nim | 26 +++++++++++++++++--------- parser.nim | 6 ++++-- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/babel.babel b/babel.babel index b299cb1..0709250 100644 --- a/babel.babel +++ b/babel.babel @@ -1,4 +1,5 @@ ; Babel library +[Package] name = "babel" version = "0.1.0" author = "Dominik Picheta" @@ -9,8 +10,8 @@ description = """Babel framework: Specifies a common interface for programmers [Library] Depends = "nimrod >= 0.8.10" ExposedModules = "parser, installer, version" ; No need for .nim -Files = "babel.babel" +;Files = "babel.babel" -;[Bin babel] +;[Exe] ;Depends = "nimrod >= 0.8.11" -; +;Exe = "babel" diff --git a/installer.nim b/installer.nim index 326c8bc..3870d06 100644 --- a/installer.nim +++ b/installer.nim @@ -5,6 +5,12 @@ type TDepend = tuple[name: String, verRange: PVersionRange] +proc getBabelDir(): string = + when defined(windows): + result = getHomeDir() / "babel" + else: + result = getHomeDir() / ".babel" + proc getNimVersion(cmd: string = "nimrod"): String = var output = execProcess(cmd & " -v") var line = splitLines(output)[0] @@ -28,10 +34,15 @@ proc dependExists(name: string, verRange: PVersionRange): Bool = nimVer & ") doesn't satisfy dependency") else: return True else: - # TODO: Figure out how to check whether a package has been installed... - # ... Perhaps a list of all the packages that have been installed? - # ... or just look for the package in PATH + $nimrod/lib/babel/packageName - assert(False) + for kind, path in walkDir(getBabelDir() / "lib"): + if kind == pcDir: + var dir = path.extractFilename() + if dir.startsWith(name): + var ver = copy(dir, name.len() + 1) + if withinRange(newVersion(ver), verRange): + return True + + return False proc verifyDepends(proj: TProject): seq[TDepend] = result = @[] @@ -43,7 +54,7 @@ proc verifyDepends(proj: TProject): seq[TDepend] = nameStr = spl[0] elif spl.len > 1: nameStr = spl[0] - spl.del(0) + spl.delete(0) verStr = join(spl, " ") else: raise newException(EInstall, "Incorrect dependency got: " & i) @@ -65,10 +76,7 @@ proc createDirs(dirs: seq[string]) = proc copyFiles(proj: TProject) = # This will create a $home/.babel and lib/ or bin/. It will also copy all the # files listed in proj.modules and proj.files. - when defined(windows): - var babelDir = getHomeDir() / "babel" - else: - var babelDir = getHomeDir() / ".babel" + var babelDir = getBabelDir() var dirs = @[babelDir, babelDir / "lib", babelDir / "bin"] diff --git a/parser.nim b/parser.nim index bc7bdbf..481e805 100644 --- a/parser.nim +++ b/parser.nim @@ -19,7 +19,7 @@ type unknownFields*: seq[string] # TODO: - EParseErr* = object of EIO + EParseErr* = object of EInvalidValue proc initProj(): TProject = result.name = "" @@ -63,7 +63,7 @@ proc parseBabel*(file: string): TProject = break of cfgKeyValuePair: case section - of "": + of "package": case normalize(e.key): of "name": result.name = e.value @@ -110,6 +110,8 @@ proc parseBabel*(file: string): TProject = result.library = True of "bin": result.executable = True + of "package": + nil else: p.parseErr("Unknown section: " & section)