summary refs log tree commit diff stats
path: root/tools/nimresolve.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tools/nimresolve.nim')
-rw-r--r--tools/nimresolve.nim158
1 files changed, 0 insertions, 158 deletions
diff --git a/tools/nimresolve.nim b/tools/nimresolve.nim
deleted file mode 100644
index 9af24df5a..000000000
--- a/tools/nimresolve.nim
+++ /dev/null
@@ -1,158 +0,0 @@
-#
-#
-#           The Nim Compiler
-#        (c) Copyright 2017 Andreas Rumpf
-#
-#    See the file "copying.txt", included in this
-#    distribution, for details about the copyright.
-#
-
-## Standard tool that resolves import paths.
-
-import
-  os, strutils, parseopt
-
-import "../compiler/nimblecmd"
-
-# You can change these constants to build you own adapted resolver.
-const
-  considerParentDirs = not defined(noParentProjects)
-  considerNimbleDirs = not defined(noNimbleDirs)
-
-const
-  Version = "1.0"
-  Usage = "nimresolve - Nim Resolve Package Path Version " & Version & """
-
-  (c) 2017 Andreas Rumpf
-Usage:
-  nimresolve [options] package
-Options:
-  --source:FILE       the file that requests to resolve 'package'
-  --stdlib:PATH       the path to use for the standard library
-  --project:FILE      the main '.nim' file that was passed to the Nim compiler
-  --subdir:EXPR       the subdir part in: 'import $pkg / subdir'
-  --noNimblePath      do not search the Nimble path to resolve the package
-"""
-
-proc writeHelp() =
-  stdout.write(Usage)
-  stdout.flushFile()
-  quit(0)
-
-proc writeVersion() =
-  stdout.write(Version & "\n")
-  stdout.flushFile()
-  quit(0)
-
-type
-  Task = object
-    source, stdlib, subdir, project, pkg: string
-    noNimblePath: bool
-
-proc findInNimbleDir(t: Task; dir: string): bool =
-  var best = ""
-  var bestv = ""
-  for k, p in os.walkDir(dir, relative=true):
-    if k == pcDir and p.len > t.pkg.len+1 and
-        p[t.pkg.len] == '-' and p.startsWith(t.pkg):
-      let (_, a) = getPathVersion(p)
-      if bestv.len == 0 or bestv < a:
-        bestv = a
-        best = dir / p
-
-  if best.len > 0:
-    var f: File
-    if open(f, best / changeFileExt(t.pkg, ".nimble-link")):
-      # the second line contains what we're interested in, see:
-      # https://github.com/nim-lang/nimble#nimble-link
-      var override = ""
-      discard readLine(f, override)
-      discard readLine(f, override)
-      close(f)
-      if not override.isAbsolute():
-        best = best / override
-      else:
-        best = override
-  let f = if t.subdir.len == 0: t.pkg else: t.subdir
-  let res = addFileExt(best / f, "nim")
-  if best.len > 0 and fileExists(res):
-    echo res
-    result = true
-
-const stdlibDirs = [
-  "pure", "core", "arch",
-  "pure/collections",
-  "pure/concurrency", "impure",
-  "wrappers", "wrappers/linenoise",
-  "windows", "posix", "js"]
-
-proc resolve(t: Task) =
-  template attempt(a) =
-    let x = addFileExt(a, "nim")
-    if fileExists(x):
-      echo x
-      return
-
-  case t.pkg
-  of "stdlib":
-    if t.subdir.len == 0:
-      echo t.stdlib
-      return
-    else:
-      for candidate in stdlibDirs:
-        attempt(t.stdlib / candidate / t.subdir)
-  of "root":
-    let root = t.project.splitFile.dir
-    if t.subdir.len == 0:
-      echo root
-      return
-    else:
-      attempt(root / t.subdir)
-  else:
-    when considerParentDirs:
-      var p = parentDir(t.source.splitFile.dir)
-      # support 'import $karax':
-      let f = if t.subdir.len == 0: t.pkg else: t.subdir
-
-      while p.len > 0:
-        let dir = p / t.pkg
-        if dirExists(dir):
-          attempt(dir / f)
-          # 2nd attempt: try to use 'karax/karax'
-          attempt(dir / t.pkg / f)
-          # 3rd attempt: try to use 'karax/src/karax'
-          attempt(dir / "src" / f)
-          attempt(dir / "src" / t.pkg / f)
-        p = parentDir(p)
-
-    when considerNimbleDirs:
-      if not t.noNimblePath:
-        if findInNimbleDir(t, getHomeDir() / ".nimble" / "pkgs"): return
-        when not defined(windows):
-          if findInNimbleDir(t, "/opt/nimble/pkgs"): return
-
-  quit "cannot resolve: " & (t.pkg / t.subdir)
-
-proc main =
-  var t: Task
-  t.subdir = ""
-  for kind, key, val in getopt():
-    case kind
-    of cmdArgument:
-      t.pkg = key
-    of cmdLongoption, cmdShortOption:
-      case normalize(key)
-      of "source": t.source = val
-      of "stdlib": t.stdlib = val
-      of "project": t.project = val
-      of "subdir": t.subdir = val
-      of "nonimblepath": t.noNimblePath = true
-      of "help", "h": writeHelp()
-      of "version", "v": writeVersion()
-      else: writeHelp()
-    of cmdEnd: assert(false) # cannot happen
-  if t.pkg.len == 0:
-    quit "[Error] no package to resolve."
-  resolve(t)
-
-main()