aboutsummaryrefslogtreecommitdiff
path: root/src/nimpb_build.nim
diff options
context:
space:
mode:
Diffstat (limited to 'src/nimpb_build.nim')
-rw-r--r--src/nimpb_build.nim108
1 files changed, 12 insertions, 96 deletions
diff --git a/src/nimpb_build.nim b/src/nimpb_build.nim
index f1d4c0d..9a3f018 100644
--- a/src/nimpb_build.nim
+++ b/src/nimpb_build.nim
@@ -1,13 +1,5 @@
import os
-import osproc
-import streams
import strformat
-import strtabs
-import strutils
-
-from nimpb_buildpkg/plugin import processFileDescriptorSet, ServiceGenerator, Service, ServiceMethod
-
-export Service, ServiceMethod
when defined(windows):
const compilerId = "win32"
@@ -35,14 +27,16 @@ when defined(windows):
else:
const exeSuffix = ""
-proc findCompiler(): string =
+let
+ paths = @[
+ # getAppDir() / "src" / "nimpb_buildpkg" / "protobuf",
+ # getAppDir() / "nimpb_buildpkg" / "protobuf",
+ parentDir(currentSourcePath()) / "nimpb_buildpkg" / "protobuf",
+ ]
+
+proc getCompilerPath*(): string =
let
compilerName = &"protoc-{compilerId}{exeSuffix}"
- paths = @[
- getAppDir() / "src" / "nimpb_buildpkg" / "protobuf",
- getAppDir() / "nimpb_buildpkg" / "protobuf",
- parentDir(currentSourcePath()) / "nimpb_buildpkg" / "protobuf",
- ]
for path in paths:
if fileExists(path / compilerName):
@@ -50,85 +44,7 @@ proc findCompiler(): string =
raise newException(Exception, &"{compilerName} not found!")
-proc builtinIncludeDir(compilerPath: string): string =
- parentDir(compilerPath) / "include"
-
-template verboseEcho(x: untyped): untyped =
- if verbose:
- echo(x)
-
-proc myTempDir(): string =
- result = getTempDir() / "nimpb_build_tmp"
-
-proc compileProtos*(protos: openArray[string],
- includes: openArray[string],
- outdir: string,
- serviceGenerator: ServiceGenerator = nil) =
- let command = findCompiler()
- var args: seq[string] = @[]
-
- var outputFilename = myTempDir() / "file-descriptor-set"
- createDir(myTempDir())
-
- add(args, "--include_imports")
- add(args, "--include_source_info")
- add(args, &"-o{outputFilename}")
-
- for incdir in includes:
- add(args, &"-I{incdir}")
-
- add(args, &"-I{builtinIncludeDir(command)}")
-
- for proto in protos:
- add(args, proto)
-
- var cmdline: string = quoteShell(command)
- for arg in args:
- cmdline &= " " & quoteShell(arg)
-
- let (outp, rc) = execCmdEx(cmdline)
-
- if rc != 0:
- raise newException(Exception, outp)
-
- processFileDescriptorSet(outputFilename, outdir, protos, serviceGenerator)
-
-
-when isMainModule:
- proc usage() {.noreturn.} =
- echo(&"""
- {getAppFilename()} --out=OUTDIR [-IPATH [-IPATH]...] PROTOFILE...
-
- --out The output directory for the generated files
- -I Add a path to the set of include paths
- """)
- quit(QuitFailure)
-
- var includes: seq[string] = @[]
- var protos: seq[string] = @[]
- var outdir: string
-
- if paramCount() == 0:
- usage()
-
- for idx in 1..paramCount():
- let param = paramStr(idx)
-
- if param.startsWith("-I"):
- add(includes, param[2..^1])
- elif param.startsWith("--out="):
- outdir = param[6..^1]
- elif param == "--help":
- usage()
- else:
- add(protos, param)
-
- if outdir == nil:
- echo("error: --out is required")
- quit(QuitFailure)
-
- if len(protos) == 0:
- echo("error: no input files")
- quit(QuitFailure)
-
- compileProtos(protos, includes, outdir)
+proc getProtoIncludeDir*(): string =
+ for path in paths:
+ if fileExists(path / "include"):
+ return path / "include"