12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- discard """
- DO AS THOU WILST PUBLIC LICENSE
- Whoever should stumble upon this document is henceforth and forever
- entitled to DO AS THOU WILST with aforementioned document and the
- contents thereof.
- As said in the Olde Country, `Keepe it Gangster'."""
- import strutils, parseopt, tables, os
- type
- PTask* = ref object
- desc*: string
- action*: TTaskFunction
- TTaskFunction* = proc() {.closure.}
- var
- tasks* = initTable[string, PTask](16)
- proc newTask*(desc: string; action: TTaskFunction): PTask
- proc runTask*(name: string) {.inline.}
- proc shell*(cmd: varargs[string, `$`]): int {.discardable.}
- proc cd*(dir: string) {.inline.}
- template nakeImports*() =
- import tables, parseopt, strutils, os
- template task*(name: string; description: string; body: untyped) {.dirty.} =
- block:
- var t = newTask(description, proc() {.closure.} =
- body)
- tasks[name] = t
- proc newTask*(desc: string; action: TTaskFunction): PTask =
- new(result)
- result.desc = desc
- result.action = action
- proc runTask*(name: string) = tasks[name].action()
- proc shell*(cmd: varargs[string, `$`]): int =
- result = execShellCmd(cmd.join(" "))
- proc cd*(dir: string) = setCurrentDir(dir)
- template withDir*(dir: string; body: untyped) =
- ## temporary cd
- ## withDir "foo":
- ## # inside foo
- ## #back to last dir
- var curDir = getCurrentDir()
- cd(dir)
- body
- cd(curDir)
- when true:
- if not fileExists("nakefile.nim"):
- echo "No nakefile.nim found. Current working dir is ", getCurrentDir()
- quit 1
- var args = ""
- for i in 1..paramCount():
- args.add paramStr(i)
- args.add " "
- quit(shell("nim", "c", "-r", "nakefile.nim", args))
- else:
- import std/exitprocs
- addExitProc(proc() {.noconv.} =
- var
- task: string
- printTaskList: bool
- for kind, key, val in getopt():
- case kind
- of cmdLongOption, cmdShortOption:
- case key.tolowerAscii
- of "tasks", "t":
- printTaskList = true
- else:
- echo "Unknown option: ", key, ": ", val
- of cmdArgument:
- task = key
- else: discard
- if printTaskList or task.len == 0 or not(tasks.hasKey(task)):
- echo "Available tasks:"
- for name, task in pairs(tasks):
- echo name, " - ", task.desc
- quit 0
- tasks[task].action())
|