4 <!-- Original source: http://wiki.wxwidgets.org/wiki.pl?Bakefile -->
5 <!-- Modified by: Francesco Montorsi <frm@users.sourceforge.net> -->
6 <!-- Vaclav Slavik <vslavik@fastmail.fm> to better fit
7 into Bakefile's presets -->
8 <!-- Creation date: 6/9/2004 -->
9 <!-- Last revision: 22/1/2005 off-CVS -->
15 FIXME: this template has (at least) the following bugs:
17 * it's MSW-only, the port is assumed to be wxMSW unconditionally
19 * multiple wx configurations (CFG variable set when building the
20 library) are not supported
24 <!-- makefile tag signifies the beginning of the bakefile -->
27 <requires version=
"0.1.5"/>
31 <!-- These are essentially the configurations you -->
32 <!-- want in bakefile. -->
34 <!-- In MSVC these are the different build -->
35 <!-- configurations you can have (in the build menu), -->
36 <!-- and in autoconf is enabled with enable-xxx=xx. -->
37 <!-- For other compilers a separate configuration -->
38 <!-- file is created (such as config.gcc on gcc) -->
39 <!-- which has several options a user can modify. -->
41 <!-- Note that the above only happens if an option -->
42 <!-- is not constant, i.e. if it cannot be determined -->
43 <!-- by bakefile itself. -->
45 <!-- this is a temporary variable until there is non general -->
46 <!-- function in bakefiles for returning native markup for -->
47 <!-- reading envrionment variables -->
49 <if cond=
"FORMAT=='watcom'">%
</if>
50 <if cond=
"FORMAT!='watcom'"></if>
54 <!-- Presets for limited dmars make.exe format: -->
55 <if cond=
"FORMAT=='dmars'">
56 <set var=
"WX_UNICODE">0</set>
57 <set var=
"WX_DEBUG">1</set>
58 <set var=
"WX_SHARED">0</set>
62 <!-- The directory where wxWidgets is installed: -->
63 <if cond=
"not isdefined('WX_DIR')">
64 <set var=
"WX_DIR_DEFAULT" overwrite=
"0">$(DOLLAR)($(ENV_VAR)WXWIN)
</set>
65 <option name=
"WX_DIR" category=
"path">
66 <default-value>$(WX_DIR_DEFAULT)
</default-value>
68 The directory where wxWidgets library is installed
73 <!-- This is a standard option that determines -->
74 <!-- whether the user wants to build this library as -->
75 <!-- a dll or as a static library. -->
76 <if cond=
"not isdefined('WX_SHARED')">
77 <set var=
"WX_SHARED_DEFAULT" overwrite=
"0">0</set>
78 <option name=
"WX_SHARED">
80 <values-description>,DLL
</values-description>
81 <default-value>$(WX_SHARED_DEFAULT)
</default-value>
83 Use DLL build of wx library to use?
88 <!-- Configuration for building the bakefile with -->
89 <!-- unicode strings or not (unicode or ansi). -->
90 <if cond=
"not isdefined('WX_UNICODE')">
91 <set var=
"WX_UNICODE_DEFAULT" overwrite=
"0">0</set>
92 <option name=
"WX_UNICODE">
94 <values-description>,Unicode
</values-description>
95 <default-value>$(WX_UNICODE_DEFAULT)
</default-value>
97 Compile Unicode build of wxWidgets?
102 <if cond=
"not isdefined('WX_DEBUG')">
103 <set var=
"WX_DEBUG_DEFAULT" overwrite=
"0">1</set>
104 <option name=
"WX_DEBUG">
106 <values-description>Release,Debug
</values-description>
107 <default-value>$(WX_DEBUG_DEFAULT)
</default-value>
109 Use debug build of wxWidgets (define __WXDEBUG__)?
114 <if cond=
"not isdefined('WX_VERSION')">
115 <set var=
"WX_VERSION_DEFAULT" overwrite=
"0">27</set>
116 <option name=
"WX_VERSION">
117 <default-value>$(WX_VERSION_DEFAULT)
</default-value>
119 Version of the wx library to build against.
124 <if cond=
"not isdefined('WX_MONOLITHIC')">
125 <set var=
"WX_MONOLITHIC_DEFAULT" overwrite=
"0">0</set>
126 <option name=
"WX_MONOLITHIC">
128 <values-description>Multilib,Monolithic
</values-description>
129 <default-value>$(WX_MONOLITHIC_DEFAULT)
</default-value>
131 Use monolithic build of wxWidgets?
137 <!-- HELPER VARIABLES -->
141 <!-- The unicode define we want. By default bakefile -->
142 <!-- makes variables an empty string, so if unicode -->
143 <!-- is not defined $(UNICODE_DEFINE) would expand -->
144 <!-- to nothing (literally). -->
145 <set var=
"WXUNICODE_DEFINE">
146 <if cond=
"WX_UNICODE=='1'">_UNICODE
</if>
149 <!-- The debug define we need with win32 compilers -->
150 <!-- (on Linux, the wx-config program is used). -->
151 <set var=
"WXDEBUG_DEFINE">
152 <if cond=
"WX_DEBUG=='1'">__WXDEBUG__
</if>
155 <!-- These are handy ways of dealing with the -->
156 <!-- extensions in the library names of the -->
157 <!-- wxWindows library. -->
158 <set var=
"WXLIBPOSTFIX">
159 <if cond=
"WX_DEBUG=='1' and WX_UNICODE=='1'">ud
</if>
160 <if cond=
"WX_DEBUG=='1' and WX_UNICODE=='0'">d
</if>
161 <if cond=
"WX_DEBUG=='0' and WX_UNICODE=='1'">u
</if>
163 <set var=
"WX3RDPARTYLIBPOSTFIX">
164 <if cond=
"WX_DEBUG=='1'">d
</if>
168 <if cond=
"FORMAT=='msevc4prj'">_$(CPU)
</if>
171 <set var=
"WXLIBPATH">
172 <if cond=
"WX_SHARED=='0'">$(DIRSEP)lib$(DIRSEP)$(COMPILER)$(WXCPU)_lib
</if>
173 <if cond=
"WX_SHARED=='1'">$(DIRSEP)lib$(DIRSEP)$(COMPILER)$(WXCPU)_dll
</if>
177 <if cond=
"FORMAT=='msevc4prj'">wince
</if>
178 <if cond=
"FORMAT!='msevc4prj'">msw
</if>
180 <set var=
"WXLIBINCLUDE">$(WXLIBPATH)$(DIRSEP)$(WXPORT)$(WXLIBPOSTFIX)
</set>
183 <!-- All the possible mixes for the wx library names -->
184 <set var=
"WXLIB_BASE_NAME">
185 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='0'">wxbase$(WX_VERSION)
</if>
186 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='1'">wxbase$(WX_VERSION)d
</if>
187 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='0'">wxbase$(WX_VERSION)u
</if>
188 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='1'">wxbase$(WX_VERSION)ud
</if>
191 the trick used to support monolithic builds is here: when the
192 <wx-lib>base</wx-lib> tag is found, and user selected
193 WX_MONOLITHIC=1, then the base library is translated to the
196 <if cond=
"WX_MONOLITHIC=='1' and WX_UNICODE=='0' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)
</if>
197 <if cond=
"WX_MONOLITHIC=='1' and WX_UNICODE=='0' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)d
</if>
198 <if cond=
"WX_MONOLITHIC=='1' and WX_UNICODE=='1' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)u
</if>
199 <if cond=
"WX_MONOLITHIC=='1' and WX_UNICODE=='1' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)ud
</if>
202 <!-- Libraries whose name is prefixed with 'wxbase' -->
203 <set var=
"WXLIB_NET_NAME">
204 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='0'">wxbase$(WX_VERSION)_net
</if>
205 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='1'">wxbase$(WX_VERSION)d_net
</if>
206 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='0'">wxbase$(WX_VERSION)u_net
</if>
207 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='1'">wxbase$(WX_VERSION)ud_net
</if>
209 <set var=
"WXLIB_XML_NAME">
210 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='0'">wxbase$(WX_VERSION)_xml
</if>
211 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='1'">wxbase$(WX_VERSION)d_xml
</if>
212 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='0'">wxbase$(WX_VERSION)u_xml
</if>
213 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='1'">wxbase$(WX_VERSION)ud_xml
</if>
215 <set var=
"WXLIB_ODBC_NAME">
216 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='0'">wxbase$(WX_VERSION)_odbc
</if>
217 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='1'">wxbase$(WX_VERSION)d_odbc
</if>
218 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='0'">wxbase$(WX_VERSION)u_odbc
</if>
219 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='1'">wxbase$(WX_VERSION)ud_odbc
</if>
222 <!-- Libraries whose name is prefixed with 'wx' only -->
223 <set var=
"WXLIB_CORE_NAME">
224 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)_core
</if>
225 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)d_core
</if>
226 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)u_core
</if>
227 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)ud_core
</if>
229 <set var=
"WXLIB_MEDIA_NAME">
230 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)_media
</if>
231 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)d_media
</if>
232 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)u_media
</if>
233 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)ud_media
</if>
235 <set var=
"WXLIB_XRC_NAME">
236 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)_xrc
</if>
237 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)d_xrc
</if>
238 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)u_xrc
</if>
239 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)ud_xrc
</if>
241 <set var=
"WXLIB_HTML_NAME">
242 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)_html
</if>
243 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)d_html
</if>
244 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)u_html
</if>
245 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)ud_html
</if>
247 <set var=
"WXLIB_ADV_NAME">
248 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)_adv
</if>
249 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)d_adv
</if>
250 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)u_adv
</if>
251 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)ud_adv
</if>
253 <set var=
"WXLIB_QA_NAME">
254 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)_qa
</if>
255 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)d_qa
</if>
256 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)u_qa
</if>
257 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)ud_qa
</if>
259 <set var=
"WXLIB_DBGRID_NAME">
260 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)_dbgrid
</if>
261 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)d_dbgrid
</if>
262 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)u_dbgrid
</if>
263 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)ud_dbgrid
</if>
265 <set var=
"WXLIB_GL_NAME">
266 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)_gl
</if>
267 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='0' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)d_gl
</if>
268 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='0'">wx$(WXPORT)$(WX_VERSION)u_gl
</if>
269 <if cond=
"WX_MONOLITHIC=='0' and WX_UNICODE=='1' and WX_DEBUG=='1'">wx$(WXPORT)$(WX_VERSION)ud_gl
</if>
280 <!-- While not required, templates make your -->
281 <!-- bakefiles much more readable. Templates, in -->
282 <!-- essence, are abstract classes like c++. -->
284 <!-- Your build targets "inherit" the template, -->
285 <!-- along with the info associated with the template -->
288 <!-- wxWidgets LIBRARY/APP TEMPLATE -->
290 <!-- The "base class" of all our build targets -->
291 <!-- This links with the appropriate native -->
292 <!-- libraries required by the platform, the libraries -->
293 <!-- we want for our stuff, and the wxWindows libs. -->
296 <!-- list of known libraries used by wx-lib tag below -->
297 <set var=
"LIB_LIST">base core net xml odbc xrc html adv media gl dbgrid qa
</set>
299 <!-- NOTE: refer to the NET contrib using NETUTILS instead of NET
300 (which is already in LIB_LIST) -->
301 <set var=
"CONTRIBLIB_LIST">animate applet deprecated fl foldbar gizmos mmedia netutils ogl plot stc svg
</set>
302 <set var=
"ALLLIB_LIST">$(LIB_LIST) $(CONTRIBLIB_LIST)
</set>
304 <!-- this tag is used to include wx libraries: -->
305 <define-tag name=
"wx-lib" rules=
"exe,dll,module">
306 <if cond=
"value=='base'"><sys-lib>$(WXLIB_BASE_NAME)
</sys-lib></if>
307 <if cond=
"value=='core'"><sys-lib>$(WXLIB_CORE_NAME)
</sys-lib></if>
309 <if cond=
"value=='net'"><sys-lib>$(WXLIB_NET_NAME)
</sys-lib></if>
310 <if cond=
"value=='xml'"><sys-lib>$(WXLIB_XML_NAME)
</sys-lib></if>
311 <if cond=
"value=='odbc'"><sys-lib>$(WXLIB_ODBC_NAME)
</sys-lib></if>
313 <if cond=
"value=='media'"><sys-lib>$(WXLIB_MEDIA_NAME)
</sys-lib></if>
314 <if cond=
"value=='xrc'"><sys-lib>$(WXLIB_XRC_NAME)
</sys-lib></if>
315 <if cond=
"value=='html'"><sys-lib>$(WXLIB_HTML_NAME)
</sys-lib></if>
316 <if cond=
"value=='adv'"><sys-lib>$(WXLIB_ADV_NAME)
</sys-lib></if>
317 <if cond=
"value=='gl'"><sys-lib>$(WXLIB_GL_NAME)
</sys-lib></if>
318 <if cond=
"value=='dbgrid'"><sys-lib>$(WXLIB_DBGRID_NAME)
</sys-lib></if>
319 <if cond=
"value=='qa'"><sys-lib>$(WXLIB_QA_NAME)
</sys-lib></if>
321 <!-- wx-lib can be used also to link against contrib libraries
322 (which always have the same name, regardless of WX_MONOLITHIC value) -->
323 <if cond=
"value in CONTRIBLIB_LIST.split()">
324 <sys-lib>wx$(WXPORT)$(WX_VERSION)$(WXLIBPOSTFIX)_$(value)
</sys-lib>
327 <if cond=
"value not in ALLLIB_LIST.split()">
328 <error>Unknown wxWidgets library given in the wx-lib tag
</error>
332 <!-- just a placeholder to mark the place where <wx-lib> will be placed,
333 thanks to the order precedence declaration below it: -->
334 <define-tag name=
"__wx-libs-point" rules=
"exe,dll,module"/>
335 <tag-info name=
"wx-lib"
336 position=
"before:__wx-libs-point"/>
337 <tag-info name=
"__wx-syslibs"
338 position=
"after:__wx-libs-point"/>
341 <!-- template for static wx libraries: -->
342 <template id=
"wx-lib">
343 <!-- MISCELLANEOUS -->
344 <if cond=
"FORMAT=='mingw'">
345 <define>HAVE_W32API_H
</define>
346 <ldflags>-mthreads
</ldflags>
349 <define>$(WXUNICODE_DEFINE)
</define>
350 <define>$(WXDEBUG_DEFINE)
</define>
351 <define>__WXMSW__
</define>
353 <include>$(WX_DIR)$(WXLIBINCLUDE)
</include>
354 <include>$(WX_DIR)/include
</include>
358 <!-- this ugly tag contains all sys-lib tags used by "wx" template,
359 in order to make sure they are not reorder when wx-lib is moved
360 after __wx-libs-point: -->
361 <define-tag name=
"__wx-syslibs" rules=
"exe,dll,module">
362 <!-- wx 3rd party libs, always use them: -->
363 <sys-lib cond=
"FORMAT!='msevc4prj'">wxtiff$(WX3RDPARTYLIBPOSTFIX)
</sys-lib>
364 <sys-lib>wxjpeg$(WX3RDPARTYLIBPOSTFIX)
</sys-lib>
365 <sys-lib>wxpng$(WX3RDPARTYLIBPOSTFIX)
</sys-lib>
366 <sys-lib>wxzlib$(WX3RDPARTYLIBPOSTFIX)
</sys-lib>
367 <!-- For regex we won't use the WX3RDPARTYLIBPOSTIX postfix:
368 unliked tiff, jpeg, png, zlib, expat, when building
369 in Unicode mode, the "u" suffix is appended to regex -->
370 <sys-lib cond=
"FORMAT!='msevc4prj'">wxregex$(WXLIBPOSTFIX)
</sys-lib>
371 <sys-lib>wxexpat$(WX3RDPARTYLIBPOSTFIX)
</sys-lib>
373 <!-- link-in system libs that wx depends on: -->
374 <!-- If on borland, we don't need to do much -->
375 <if cond=
"FORMAT=='borland'">
376 <sys-lib>ole2w32
</sys-lib>
377 <sys-lib>odbc32
</sys-lib>
380 <!-- Non-borland, on the other hand... -->
381 <if cond=
"FORMAT not in ['borland','msevc4prj']">
382 <sys-lib>kernel32
</sys-lib>
383 <sys-lib>user32
</sys-lib>
384 <sys-lib>gdi32
</sys-lib>
385 <sys-lib>comdlg32
</sys-lib>
386 <sys-lib>winspool
</sys-lib>
387 <sys-lib>winmm
</sys-lib>
388 <sys-lib>shell32
</sys-lib>
389 <sys-lib>comctl32
</sys-lib>
390 <sys-lib>ole32
</sys-lib>
391 <sys-lib>oleaut32
</sys-lib>
392 <sys-lib>uuid
</sys-lib>
393 <sys-lib>rpcrt4
</sys-lib>
394 <sys-lib>advapi32
</sys-lib>
395 <sys-lib>wsock32
</sys-lib>
396 <sys-lib>odbc32
</sys-lib>
399 <!-- Libs common to both borland and MSVC -->
400 <if cond=
"FORMAT=='msvc' or FORMAT=='msvc6prj' or FORMAT=='borland'">
401 <sys-lib>oleacc
</sys-lib>
405 <!-- template for wx executables/dlls: -->
406 <template id=
"wx" template=
"wx-lib">
407 <lib-path>$(WX_DIR)$(WXLIBPATH)
</lib-path>
409 <!-- wx libs must come before 3rd party and sys libs, this is
410 the place where the hack explained above is carried on: -->