Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/buildsystem/src/tolua/lua/doit.lua @ 2241

Last change on this file since 2241 was 2236, checked in by rgrieder, 16 years ago
  • Changed working directory for tolua generator to library_output_path. That resolves windows issues with dlls.
  • Removed the need to create a second tolua application. There is only one now called toluaexe_orxonox.
  • 'w' (working directory) option of tolua extends to -L, pkg-file, -o and -H if of course -w is present
  • 's' option added to tolua: Tells which file contains the bindfile generator. In our case this is src/tolua/all.lua all.lua replaces tolua-5.1.pkg. We can still choose that file from CMake (TOLUA_PARSER_SOURCE)
  • Generator dependencies are declared in src/tolua/CMakeLists.txt and used in UseTolua.cmake (PARENT_SCOPE)
  • Fixed a bug when writing the header file inclusion in package.lua
File size: 2.9 KB
Line 
1-- Generate binding code
2-- Written by Waldemar Celes
3-- TeCGraf/PUC-Rio
4-- Jul 1998
5-- Last update: Apr 2003
6-- $Id: $
7
8
9-- This code is free software; you can redistribute it and/or modify it.
10-- The software provided hereunder is on an "as is" basis, and
11-- the author has no obligation to provide maintenance, support, updates,
12-- enhancements, or modifications.
13
14function parse_extra()
15
16    for k,v in ipairs(_extra_parameters or {}) do
17       
18        local b,e,name,value = string.find(v, "^([^=])=(.*)$")
19        if b then
20            _extra_parameters[name] = value
21        else
22            _extra_parameters[v] = true
23        end
24    end
25end
26
27function doit ()
28    -- define package name, if not provided
29    if not flags.n then
30        if flags.f then
31            flags.n = gsub(flags.f,"%..*$","")
32            _,_,flags.n = string.find(flags.n, "([^/\\]*)$")
33        else
34            error("#no package name nor input file provided")
35        end
36    end
37
38    -- parse table with extra paramters
39    parse_extra()
40
41    -- get potential working directory
42    if not flags.w then
43        flags.w = ''
44    end
45
46    -- do this after setting the package name
47    if flags.L then
48        if string.sub(flags.L, 1, 1) == '/' or string.sub(flags.L, 1, 1) == '\\' then
49            dofile(flags.L)
50        else
51            dofile(flags.w..'/'..flags.L)
52        end
53    end
54
55    -- add cppstring
56    if not flags.S then
57        _basic['string'] = 'cppstring'
58        _basic['std::string'] = 'cppstring'
59        _basic_ctype.cppstring = 'const char*'
60    end
61
62    -- proccess package
63        local file
64        if flags.f then
65        if string.sub(flags.f, 1, 1) == '/' or string.sub(flags.f, 1, 1) == '\\' then
66            file = flags.f
67        else
68            file = flags.w..'/'..flags.f
69        end
70    else
71        file = flags.f
72    end
73    local p  = Package(flags.n, file)
74
75    if flags.p then
76        return        -- only parse
77    end
78
79    if flags.o then
80            local file
81        if string.sub(flags.o, 1, 1) == '/' or string.sub(flags.o, 1, 1) == '\\' then
82            file = flags.o
83        else
84            file = flags.w..'/'..flags.o
85        end
86        local st,msg = writeto(file)
87        if not st then
88            error('#'..msg)
89        end
90    end
91
92    p:decltype()
93    if flags.P then
94        p:print()
95    else
96        p:preamble()
97        p:supcode()
98        p:register()
99        push(p)
100        post_output_hook(p)
101        pop()
102    end
103
104    if flags.o then
105        writeto()
106    end
107
108    -- write header file
109    if not flags.P then
110        if flags.H then
111                local file
112            if string.sub(flags.H, 1, 1) == '/' or string.sub(flags.H, 1, 1) == '\\' then
113                file = flags.H
114            else
115                file = flags.w..'/'..flags.H
116            end
117            local st,msg = writeto(file)
118            if not st then
119                error('#'..msg)
120            end
121            p:header()
122            writeto()
123        end
124    end
125end
126
Note: See TracBrowser for help on using the repository browser.