added QtConcurent class to list of ignored classes
[lqt.git] / build.lua
blob57f4123d2be5b63e679c9000dae39066bcb775d8
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, hppfiles={}, }
38 local deps = {}
39 for _, d in ipairs(m.depends) do
40 table.insert(deps, Module(d))
41 table.insert(ret.hppfiles, d..'_head.hpp')
42 table.insert(m.types, d..'_src/'..d..'_type.lua')
43 end
44 for k, t in pairs(generator.default) do
45 local set = {}
46 ret[k] = {}
47 for _, v in ipairs(t) do
48 if not set[v] then table.insert(ret[k], v) set[v]=true end
49 end
50 for _, d in ipairs(deps) do
51 for _, v in ipairs(d[k]) do
52 if not set[v] then table.insert(ret[k], v) set[v]=true end
53 end
54 end
55 for _, v in ipairs(m[k] or {}) do
56 if not set[v] then table.insert(ret[k], v) set[v]=true end
57 end
58 end
59 return ret
60 end
62 qmake_project = function(n, ...)
63 return string.gsub([[
64 TEMPLATE = lib
65 TARGET = LQT_MODULE
66 DEPENDPATH += .
67 INCLUDEPATH += . ]]..table.concat({...}, ' ')..[[
69 # Input
70 HEADERS += LQT_MODULE_head.hpp
71 SOURCES += LQT_MODULE_enum.cpp LQT_MODULE_meta.cpp LQT_MODULE_virt.cpp
72 ]], 'LQT_MODULE', n)
73 end
75 compile = function(name)
76 local m = Module(name)
77 -- create stub file
78 debug('creating stub in', generator.directory..'/'..m.name..'.tmp')
79 local f_stub = assert(io.open(generator.directory..'/'..m.name..'.tmp', 'w'))
80 for _, i in ipairs(m.includes) do
81 f_stub:write('#include '..i..'\n')
82 end
83 f_stub:close()
84 -- generate xml file
85 debug('getting output of', cpptoxml.command..' -C '..cpptoxml.config..' '..generator.directory..'/'..m.name..'.tmp')
86 local xml_file = io.popen(cpptoxml.command..' -C '..cpptoxml.config..' '..generator.directory..'/'..m.name..'.tmp', 'r')
87 local xml = xml_file:read'*a'
88 xml_file:close()
89 -- save xml on a file
90 debug('creating xml file in', generator.directory..'/'..m.name..'.xml')
91 local xml_out = io.open(generator.directory..'/'..m.name..'.xml', 'w')
92 xml_out:write(xml)
93 xml_out:close()
94 xml = nil -- free memory
95 -- run generator
96 local cmd = 'lua ' .. generator.file .. ' '
97 for _, t in ipairs(m.types) do
98 cmd = cmd .. '-t ' .. t .. ' '
99 end
100 for _, i in ipairs(m.includes) do
101 cmd = cmd .. '-i \'' .. i .. '\' '
103 for _, h in ipairs(m.hppfiles) do
104 cmd = cmd .. '-i \'<' .. h .. '>\' '
106 for _, f in ipairs(m.filters) do
107 cmd = cmd .. '-f \'' .. f .. '\' '
109 cmd = cmd .. '-n ' .. m.name .. ' ' .. generator.directory..'/'..m.name..'.xml'
110 debug('executing', cmd)
111 os.execute(cmd)
112 debug('writing project file')
113 local qmake = qmake_project(name)
114 local f = io.open(name..'_src/'..name..'.pro', 'w')
115 f:write(qmake)
116 f:close()
120 compile(tostring(... or 'qtcore'))