summaryrefslogtreecommitdiff
path: root/tools/upbc.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tools/upbc.lua')
-rw-r--r--tools/upbc.lua53
1 files changed, 30 insertions, 23 deletions
diff --git a/tools/upbc.lua b/tools/upbc.lua
index a248318..5db5fba 100644
--- a/tools/upbc.lua
+++ b/tools/upbc.lua
@@ -12,40 +12,47 @@ local dump_cinit = require "dump_cinit"
local upb = require "upb"
local src = arg[1]
-local outbase = arg[2]
-local basename = arg[3]
-if not (src and outbase and basename) then
- print("Usage: upbc <binary descriptor> <output filename base> <symbol prefix>")
+if not src then
+ print("Usage: upbc <binary descriptor>")
return 1
end
-local hfilename = outbase .. ".upb.h"
-local cfilename = outbase .. ".upb.c"
-
-if os.getenv("UPBC_VERBOSE") then
- print("upbc:")
- print(string.format(" source file=%s", src))
- print(string.format(" output file base=%s", outbase))
- print(string.format(" hfilename=%s", hfilename))
- print(string.format(" cfilename=%s", cfilename))
+function strip_proto(filename)
+ return string.gsub(filename, '%.proto$','')
end
-- Open input/output files.
local f = assert(io.open(src, "r"), "couldn't open input file " .. src)
local descriptor = f:read("*all")
+local files = upb.load_descriptor(descriptor)
local symtab = upb.SymbolTable()
-symtab:load_descriptor(descriptor)
-os.execute(string.format("mkdir -p `dirname %s`", outbase))
-local hfile = assert(io.open(hfilename, "w"), "couldn't open " .. hfilename)
-local cfile = assert(io.open(cfilename, "w"), "couldn't open " .. cfilename)
+for _, file in ipairs(files) do
+ symtab:add_file(file)
+ local outbase = strip_proto(file:name())
+
+ local hfilename = outbase .. ".upbdefs.h"
+ local cfilename = outbase .. ".upbdefs.c"
+
+ if os.getenv("UPBC_VERBOSE") then
+ print("upbc:")
+ print(string.format(" source file=%s", src))
+ print(string.format(" output file base=%s", outbase))
+ print(string.format(" hfilename=%s", hfilename))
+ print(string.format(" cfilename=%s", cfilename))
+ end
-local happend = dump_cinit.file_appender(hfile)
-local cappend = dump_cinit.file_appender(cfile)
+ os.execute(string.format("mkdir -p `dirname %s`", outbase))
+ local hfile = assert(io.open(hfilename, "w"), "couldn't open " .. hfilename)
+ local cfile = assert(io.open(cfilename, "w"), "couldn't open " .. cfilename)
--- Dump defs
-dump_cinit.dump_defs(symtab, basename, happend, cappend)
+ local happend = dump_cinit.file_appender(hfile)
+ local cappend = dump_cinit.file_appender(cfile)
-hfile:close()
-cfile:close()
+ -- Dump defs
+ dump_cinit.dump_defs(file, happend, cappend)
+
+ hfile:close()
+ cfile:close()
+end
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback