On Tue, Dec 25, 2007, Ralf S. Engelschall wrote:
> [...Environment hacking...]
As the internal Lua table construct representation is nothing I want to
see externally, I came up with another hack: an rpm --environment option
which translates the Lua syntax into XML:
| $ /openpkg/bin/openpkg rpm -qp --environment \
| /tmp/rse/openpkg/rpm/bin/make-3.81-20071211.ix86-freebsd6.3-openpkg.rpm
| <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
| <!DOCTYPE environment
| PUBLIC "-//rpm5.org//DTD Environment 1.0//EN"
| "http://rpm5.org/dtd/environment-1.0.dtd">
| <environment>
| <package>
| <id>binutils-2.18-20071111</id>
| </package>
| <package>
| <id>make-3.81-20071211</id>
| </package>
| <package>
| <id>openpkg-20071225-20071225</id>
| <environment>
| <package>
| <id>binutils-2.18-20071111</id>
| </package>
| <package>
| <id>make-3.81-20071211</id>
| </package>
| <package>
| <id>openpkg-20071225-20071225</id>
| </package>
| </environment>
| </package>
| </environment>
As its another example of using RPM Lua I append you the implementation
in case you are interested:
1. Global rpmpopt:
-----------------------------------------------------------------------------
# RPM extension: "rpm -qp --environment"
rpm alias --environment --qf '%{Environment}\n' \
--pipe "@l_prefix@/lib/openpkg/rpm --eval '%{__environment_to_xml}'" \
--POPTdesc=$"query the recursively tracked build environment of a package as XML"
-----------------------------------------------------------------------------
2. Global rpmmacros:
-----------------------------------------------------------------------------
%__environment_to_xml %{lua: \
local lua = io.stdin:read("*all") \
local f = loadstring("return " .. lua) \
local xml = ""
if f ~= nil then \
xml = xml .. "<?xml version=\\"1.0\\" encoding=\\"ISO-8859-1\\" standalone=\\"no\\"?>\\n" \
xml = xml .. "<!DOCTYPE environment\\n" \
xml = xml .. " PUBLIC \\"-//rpm5.org//DTD Environment 1.0//EN\\"\\n" \
xml = xml .. " \\"http://rpm5.org/dtd/environment-1.0.dtd\\">\\n" \
function genxml (environment, prefix) \
local xml = prefix .. "<environment>\\n" \
for id, e in pairs(environment) do \
xml = xml .. prefix .. " <package>\\n" \
xml = xml .. prefix .. " <id>" .. id .. "</id>\\n" \
if e ~= nil and next(e) ~= nil then \
xml = xml .. genxml(e, prefix .. " ") \
end \
xml = xml .. prefix .. " </package>\\n" \
end \
xml = xml .. prefix .. "</environment>\\n" \
return xml
end \
local environment = f() \
xml = xml .. genxml(environment, "") \
end \
print(xml)
}
-----------------------------------------------------------------------------
Ralf S. Engelschall
rse@engelschall.com
www.engelschall.com
Received on Tue Dec 25 20:34:20 2007