added build script
[lqt.git] / build.lua
blob0b183cbda0f6b2d260c6f8811ed36d078a66528f
1 #!/usr/bin/lua
3 local debug = print
5 cpptoxml = {
6 command = './cpptoxml/cpptoxml',
7 config = './cpptoxml/parser/rpp/pp-qt-configuration',
10 generator = {
11 file = './generator/generator.lua',
12 directory = 'build',
13 default = {
14 types = { 'generator/types.lua' },
15 filters = { },
16 includes = { },
20 modules = {
21 qtcore = {
22 includes = { '<QtCore>' },
23 types = { 'generator/qtypes.lua' },
24 filters = { 'generator/qt_internal.lua' },
25 depends = {},
27 basegui = {
28 includes = { '<QWidget>' },
29 types = { },
30 filters = { },
31 depends = { 'qtcore' },
35 Module = function(name)
36 local m = modules[name]
37 local ret = { name = name, }
38 local deps = {}
39 for _, d in ipairs(m.depends) do
40 table.insert(deps, Module(d))
41 table.insert(m.types,d..'_src/'..d..'_type.lua')
42 end
43 for k, t in pairs(generator.default) do
44 local set = {}
45 ret[k] = {}
46 for _, v in ipairs(t) do
47 if not set[v] then table.insert(ret[k], v) set[v]=true end
48 end
49 for _, d in ipairs(deps) do
50 for _, v in ipairs(d[k]) do
51 if not set[v] then table.insert(ret[k], v) set[v]=true end
52 end
53 end
54 for _, v in ipairs(m[k] or {}) do
55 if not set[v] then table.insert(ret[k], v) set[v]=true end
56 end
57 end
58 return ret
59 end
61 compile = function(name)
62 local m = Module(name)
63 -- create stub file
64 debug('creating stub in', generator.directory..'/'..m.name..'.tmp')
65 local f_stub = assert(io.open(generator.directory..'/'..m.name..'.tmp', 'w'))
66 for _, i in ipairs(m.includes) do
67 f_stub:write('#include '..i..'\n')
68 end
69 f_stub:close()
70 -- generate xml file
71 debug('getting output of', cpptoxml.command..' -C '..cpptoxml.config..' '..generator.directory..'/'..m.name..'.tmp')
72 local xml_file = io.popen(cpptoxml.command..' -C '..cpptoxml.config..' '..generator.directory..'/'..m.name..'.tmp', 'r')
73 local xml = xml_file:read'*a'
74 xml_file:close()
75 -- save xml on a file
76 debug('creating xml file in', generator.directory..'/'..m.name..'.xml')
77 local xml_out = io.open(generator.directory..'/'..m.name..'.xml', 'w')
78 xml_out:write(xml)
79 xml_out:close()
80 xml = nil -- free memory
81 -- run generator
82 local cmd = 'lua ' .. generator.file .. ' '
83 for _, t in ipairs(m.types) do
84 cmd = cmd .. '-t ' .. t .. ' '
85 end
86 for _, i in ipairs(m.includes) do
87 cmd = cmd .. '-i \'' .. i .. '\' '
88 end
89 for _, f in ipairs(m.filters) do
90 cmd = cmd .. '-f \'' .. f .. '\' '
91 end
92 cmd = cmd .. '-n ' .. m.name .. ' ' .. generator.directory..'/'..m.name..'.xml'
93 debug('executing', cmd)
94 os.execute(cmd)
95 end
97 --compile'qtcore'
98 compile'basegui'