xref: /freebsd-src/release/packages/generate-ucl.lua (revision f8e46fd61e055fcc767c2038d867f58c38e43ec3)
1*f8e46fd6SBaptiste Daroussin#!/usr/libexec/flua
2*f8e46fd6SBaptiste Daroussin
3*f8e46fd6SBaptiste Daroussin--[[ usage:
4*f8e46fd6SBaptiste Daroussingenerare-ucl.lua [<variablename> <variablevalue>]... <sourceucl> <destucl>
5*f8e46fd6SBaptiste Daroussin
6*f8e46fd6SBaptiste DaroussinIn the <destucl> files the variable <variablename> (in the form ${variablename}
7*f8e46fd6SBaptiste Daroussinin the <sourceucl>) will be expanded to <variablevalue>.
8*f8e46fd6SBaptiste Daroussin
9*f8e46fd6SBaptiste DaroussinThe undefined variables will reamin unmofifier "${variablename}"
10*f8e46fd6SBaptiste Daroussin]]--
11*f8e46fd6SBaptiste Daroussin
12*f8e46fd6SBaptiste Daroussinlocal ucl = require("ucl")
13*f8e46fd6SBaptiste Daroussin
14*f8e46fd6SBaptiste Daroussinif #arg < 2 or #arg % 2 ~= 0 then
15*f8e46fd6SBaptiste Daroussin	io.stderr:write(arg[0] .. ": expected an even number of arguments, got " .. #arg)
16*f8e46fd6SBaptiste Daroussin	os.exit(1)
17*f8e46fd6SBaptiste Daroussinend
18*f8e46fd6SBaptiste Daroussin
19*f8e46fd6SBaptiste Daroussinlocal parser = ucl.parser()
20*f8e46fd6SBaptiste Daroussinfor i = 2, #arg - 2, 2 do
21*f8e46fd6SBaptiste Daroussin	parser:register_variable(arg[i - 1], arg[i])
22*f8e46fd6SBaptiste Daroussinend
23*f8e46fd6SBaptiste Daroussinlocal res,err = parser:parse_file(arg[#arg - 1])
24*f8e46fd6SBaptiste Daroussinif not res then
25*f8e46fd6SBaptiste Daroussin	io.stderr:write(arg[0] .. ": fail to parse("..arg[#arg - 1].."): "..err)
26*f8e46fd6SBaptiste Daroussin	os.exit(1)
27*f8e46fd6SBaptiste Daroussinend
28*f8e46fd6SBaptiste Daroussinlocal f,err = io.open(arg[#arg], "w")
29*f8e46fd6SBaptiste Daroussinif not f then
30*f8e46fd6SBaptiste Daroussin	io.stderr:write(arg[0] .. ": fail to open("..arg[#arg].."): ".. err)
31*f8e46fd6SBaptiste Daroussin	os.exit(1)
32*f8e46fd6SBaptiste Daroussinend
33*f8e46fd6SBaptiste Daroussinlocal obj = parser:get_object()
34*f8e46fd6SBaptiste Daroussinf:write(ucl.to_format(obj, 'ucl'))
35*f8e46fd6SBaptiste Daroussinf:close()
36