CLI support - #20
This commit is contained in:
parent
0406d83384
commit
667d6caf84
4 changed files with 158 additions and 21 deletions
35
README.md
35
README.md
|
|
@ -198,6 +198,41 @@ The following key only applies before processing and allows renaming the generat
|
||||||
|
|
||||||
`$replace(srch1=repl1, srch2=reply2)` = rename specific portions in `$nimout`
|
`$replace(srch1=repl1, srch2=reply2)` = rename specific portions in `$nimout`
|
||||||
|
|
||||||
|
__Command Line__
|
||||||
|
|
||||||
|
A subset of capabilities are available through the command line to enable quick tests using nimgen. Command line flags only apply to source files specified on the command line and do not influence any ```cfg``` files which are expected to be self-sufficient.
|
||||||
|
|
||||||
|
```
|
||||||
|
Usage:
|
||||||
|
nimgen [options] file.cfg|file.h ...
|
||||||
|
|
||||||
|
Params:
|
||||||
|
-C<compile> add compile entry *
|
||||||
|
-E<exclude> add n.exclude entry *
|
||||||
|
-F<flags> set c2nim flags *
|
||||||
|
-I<include> add n.include dir *
|
||||||
|
-O<outdir> set output directory
|
||||||
|
-P<ppflags> set preprocessor flags *
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-c set ctags = true
|
||||||
|
-d set defines = true
|
||||||
|
-i set inline = true
|
||||||
|
-n set noprocess = true
|
||||||
|
-p set preprocess = true
|
||||||
|
-r set recurse = true
|
||||||
|
|
||||||
|
Editing:
|
||||||
|
-a<append> append string *
|
||||||
|
-e<prepend> prepend string *
|
||||||
|
-l<replace> replace string *
|
||||||
|
-o#lines comment X lines *
|
||||||
|
-s<search> search string *
|
||||||
|
-x<regex> regex search string *
|
||||||
|
|
||||||
|
* supports multiple instances
|
||||||
|
```
|
||||||
|
|
||||||
__Feedback__
|
__Feedback__
|
||||||
|
|
||||||
Nimgen is a work in progress and any feedback or suggestions are welcome. It is hosted on [GitHub](https://github.com/genotrance/nimgen) with an MIT license so issues, forks and PRs are most appreciated. Also join us at https://gitter.im/nimgen/Lobby to chat about nimgen and the future of Nim wrappers.
|
Nimgen is a work in progress and any feedback or suggestions are welcome. It is hosted on [GitHub](https://github.com/genotrance/nimgen) with an MIT license so issues, forks and PRs are most appreciated. Also join us at https://gitter.im/nimgen/Lobby to chat about nimgen and the future of Nim wrappers.
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,4 @@ import os
|
||||||
|
|
||||||
import nimgen/runcfg
|
import nimgen/runcfg
|
||||||
|
|
||||||
for i in commandLineParams():
|
runCli()
|
||||||
if i != "-f":
|
|
||||||
runCfg(i)
|
|
||||||
|
|
@ -169,6 +169,24 @@ proc runFile*(file: string, cfgin: OrderedTableRef = newOrderedTable[string, str
|
||||||
if reset:
|
if reset:
|
||||||
gitCheckout(sfile)
|
gitCheckout(sfile)
|
||||||
|
|
||||||
|
proc setOutputDir(dir: string) =
|
||||||
|
gOutput = dir.sanitizePath
|
||||||
|
if dirExists(gOutput):
|
||||||
|
if "-f" in commandLineParams():
|
||||||
|
try:
|
||||||
|
removeDir(gOutput)
|
||||||
|
except OSError:
|
||||||
|
echo "Directory in use: " & gOutput
|
||||||
|
quit(1)
|
||||||
|
else:
|
||||||
|
for f in walkFiles(gOutput/"*.nim"):
|
||||||
|
try:
|
||||||
|
removeFile(f)
|
||||||
|
except OSError:
|
||||||
|
echo "Unable to delete: " & f
|
||||||
|
quit(1)
|
||||||
|
createDir(gOutput)
|
||||||
|
|
||||||
proc runCfg*(cfg: string) =
|
proc runCfg*(cfg: string) =
|
||||||
if not fileExists(cfg):
|
if not fileExists(cfg):
|
||||||
echo "Config doesn't exist: " & cfg
|
echo "Config doesn't exist: " & cfg
|
||||||
|
|
@ -180,22 +198,7 @@ proc runCfg*(cfg: string) =
|
||||||
|
|
||||||
if gConfig.hasKey("n.global"):
|
if gConfig.hasKey("n.global"):
|
||||||
if gConfig["n.global"].hasKey("output"):
|
if gConfig["n.global"].hasKey("output"):
|
||||||
gOutput = gConfig["n.global"]["output"].sanitizePath
|
setOutputDir(gConfig["n.global"]["output"])
|
||||||
if dirExists(gOutput):
|
|
||||||
if "-f" in commandLineParams():
|
|
||||||
try:
|
|
||||||
removeDir(gOutput)
|
|
||||||
except OSError:
|
|
||||||
echo "Directory in use: " & gOutput
|
|
||||||
quit(1)
|
|
||||||
else:
|
|
||||||
for f in walkFiles(gOutput/"*.nim"):
|
|
||||||
try:
|
|
||||||
removeFile(f)
|
|
||||||
except OSError:
|
|
||||||
echo "Unable to delete: " & f
|
|
||||||
quit(1)
|
|
||||||
createDir(gOutput)
|
|
||||||
|
|
||||||
if gConfig["n.global"].hasKey("cpp_compiler"):
|
if gConfig["n.global"].hasKey("cpp_compiler"):
|
||||||
gCppCompiler = gConfig["n.global"]["cpp_compiler"]
|
gCppCompiler = gConfig["n.global"]["cpp_compiler"]
|
||||||
|
|
@ -278,3 +281,106 @@ proc runCfg*(cfg: string) =
|
||||||
gitReset()
|
gitReset()
|
||||||
elif key == "execute":
|
elif key == "execute":
|
||||||
discard execProc(postVal)
|
discard execProc(postVal)
|
||||||
|
|
||||||
|
let gHelp = """
|
||||||
|
Nimgen is a helper for c2nim to simplify and automate the wrapping of C libraries
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
nimgen [options] file.cfg|file.h ...
|
||||||
|
|
||||||
|
Params:
|
||||||
|
-C<compile> add compile entry *
|
||||||
|
-E<exclude> add n.exclude entry *
|
||||||
|
-F<flags> set c2nim flags *
|
||||||
|
-I<include> add n.include dir *
|
||||||
|
-O<outdir> set output directory
|
||||||
|
-P<ppflags> set preprocessor flags *
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-c set ctags = true
|
||||||
|
-d set defines = true
|
||||||
|
-i set inline = true
|
||||||
|
-n set noprocess = true
|
||||||
|
-p set preprocess = true
|
||||||
|
-r set recurse = true
|
||||||
|
|
||||||
|
Editing:
|
||||||
|
-a<append> append string *
|
||||||
|
-e<prepend> prepend string *
|
||||||
|
-l<replace> replace string *
|
||||||
|
-o#lines comment X lines *
|
||||||
|
-s<search> search string *
|
||||||
|
-x<regex> regex search string *
|
||||||
|
|
||||||
|
* supports multiple instances
|
||||||
|
"""
|
||||||
|
|
||||||
|
proc runCli*() =
|
||||||
|
var
|
||||||
|
cfg = newOrderedTable[string, string]()
|
||||||
|
files: seq[string]
|
||||||
|
uniq = 1
|
||||||
|
|
||||||
|
gProjectDir = getCurrentDir().sanitizePath
|
||||||
|
for param in commandLineParams():
|
||||||
|
let flag = if param.len() <= 2: param else: param[0..<2]
|
||||||
|
|
||||||
|
if fileExists(param):
|
||||||
|
if param.splitFile().ext.toLowerAscii() == ".cfg":
|
||||||
|
runCfg(param)
|
||||||
|
else:
|
||||||
|
files.add(param)
|
||||||
|
|
||||||
|
elif flag == "-C":
|
||||||
|
cfg["compile." & $uniq] = param[2..^1]
|
||||||
|
elif flag == "-E":
|
||||||
|
gExcludes.add(param[2..^1].addEnv().sanitizePath)
|
||||||
|
elif flag == "-F":
|
||||||
|
if cfg.hasKey("flags"):
|
||||||
|
cfg["flags"] = cfg["flags"] & " " & param[2..^1]
|
||||||
|
else:
|
||||||
|
cfg["flags"] = param[2..^1]
|
||||||
|
elif flag == "-I":
|
||||||
|
gIncludes.add(param[2..^1].addEnv().sanitizePath)
|
||||||
|
elif flag == "-O":
|
||||||
|
setOutputDir(param[2..^1])
|
||||||
|
elif flag == "-P":
|
||||||
|
if cfg.hasKey("ppflags"):
|
||||||
|
cfg["ppflags"] = cfg["ppflags"] & " " & param[2..^1]
|
||||||
|
else:
|
||||||
|
cfg["ppflags"] = param[2..^1]
|
||||||
|
|
||||||
|
elif flag == "-c":
|
||||||
|
cfg["ctags"] = "true"
|
||||||
|
elif flag == "-d":
|
||||||
|
cfg["defines"] = "true"
|
||||||
|
elif flag == "-i":
|
||||||
|
cfg["inline"] = "true"
|
||||||
|
elif flag == "-n":
|
||||||
|
cfg["noprocess"] = "true"
|
||||||
|
elif flag == "-p":
|
||||||
|
cfg["preprocess"] = "true"
|
||||||
|
elif flag == "-r":
|
||||||
|
cfg["recurse"] = "true"
|
||||||
|
|
||||||
|
elif flag == "-a":
|
||||||
|
cfg["append." & $uniq] = param[2..^1]
|
||||||
|
elif flag == "-e":
|
||||||
|
cfg["prepend." & $uniq] = param[2..^1]
|
||||||
|
elif flag == "-l":
|
||||||
|
cfg["replace." & $uniq] = param[2..^1]
|
||||||
|
elif flag == "-o":
|
||||||
|
cfg["comment." & $uniq] = param[2..^1]
|
||||||
|
elif flag == "-s":
|
||||||
|
cfg["search." & $uniq] = param[2..^1]
|
||||||
|
elif flag == "-x":
|
||||||
|
cfg["regex." & $uniq] = param[2..^1]
|
||||||
|
|
||||||
|
elif param == "-h" or param == "-?" or param == "--help":
|
||||||
|
echo gHelp
|
||||||
|
quit(0)
|
||||||
|
|
||||||
|
uniq += 1
|
||||||
|
|
||||||
|
for file in files:
|
||||||
|
runFile(file, cfg)
|
||||||
|
|
@ -97,8 +97,6 @@ suite "test file ops":
|
||||||
dataDir.createDir()
|
dataDir.createDir()
|
||||||
|
|
||||||
setup:
|
setup:
|
||||||
if testfilename.existsFile():
|
|
||||||
removeFile(testfilename)
|
|
||||||
writeFile(testfilename, testFileContent)
|
writeFile(testfilename, testFileContent)
|
||||||
|
|
||||||
################### Prepend #######################
|
################### Prepend #######################
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue