- How to add new files and libraries to wxWindows build system
+ How to add new files and libraries to wxWidgets build system
============================================================
1. Regenerating makefiles
-------------------------
-wxWindows now uses Bakefile (http://bakefile.sourceforge.net) to generate
+wxWidgets now uses Bakefile (http://bakefile.sourceforge.net) to generate
native makefiles. You must have bakefile installed if you want to regenerate
the makefiles. Bakefile currently runs on Unix and Windows systems. You will
need Python >= 2.2 installed on Unix and either use Bakefile installer or have
Note that it generates makefiles for samples and contrib libraries, too.
-IMPORTANT NOTE: Don't forget to run autoconf in wxWindows root directory
+IMPORTANT NOTE: Don't forget to run autoconf in wxWidgets root directory
(after running Bakefile) if you changed any conditional
variable or target condition in .bkl files! You will know that
this happened if $(wx)/autoconf_inc.m4 content changed.
-DDEBUG_INFO=default -DDEBUG_FLAG=default
-DOFFICIAL_BUILD=0 -DUSE_HTML=0 -DUSE_OPENGL=0 -DUSE_ODBC=0
-DMONOLITHIC=1 -DUSE_GUI=0 wx.bkl
+It is, however, recommended to modify Bakefiles.bkgen (or
+Bakefiles.local.bkgen) by means of <add-flags> and <del-flags> directives
+and use bakefile_gen instead of running bakefile directly.
2. Bakefile files organization
organized into variables for toolkits, platforms and libraries. The variables
come in pairs: there's always FOO_SRC for source files and FOO_HDR for header
files. Platform or toolkit specific files are grouped together in variable
-with platform or tookit name in them, e.g. BASE_WIN32_SRC, BASE_UNIX_SRC,
+with platform or toolkit name in them, e.g. BASE_WIN32_SRC, BASE_UNIX_SRC,
GTK_SRC, MOTIF_SRC.
Note: A side effect of this toolkit-centric organization is that one file may
- be present several times in files.bkl in different contenxt.
+ be present several times in files.bkl in different contexts.
When you are adding a file, you must put it into appropriate variable. This is
easy if you are adding the file to library that is always built from same
Make sure to add <wx-lib> statements for all libraries from multilib build
that are required by the sample.
-Run Python script regenMakefile.py in $(wx)/build/bakefiles to update Makefile
-then run "make" in $(wx)/build/bakefiles directories.
+The Windows resource specification should use the central .rc file:
-Finally commit $(wx)/build/bakefiles/Makefile and all the other modified files.
+ <win32-res>../sample.rc</win32-res>
+
+Run bakefile_gen in $(wx)/build/bakefiles to regenerate the bakefiles.
+
+Finally commit $(wx)/build/bakefiles/make_dist.mk and all the other modified files.
+
+Currently we commit the generated makefiles except .dms, .vcp.
5. Adding contrib library
to WXDLLIMPEXP_{BASE,CORE,HTML,...} in the main library (see 5g below for
additional details).
-Run Python script regenMakefile.py in $(wx)/build/bakefiles to update Makefile
-and commit $(wx)/build/bakefiles/Makefile.
+Run bakefile_gen in $(wx)/build/bakefiles to regenerate makefiles
+then commit $(wx)/build/bakefiles/Makefile.
6. Adding new core library
b) Modify bakefile system in build/bakefiles/ to recognize wxFoo:
* Add 'foo' to MAIN_LIBS and LIBS_NOGUI or LIBS_GUI (depending on whether
the library depends on wxCore or not) to wxwin.py file.
- * Add the library to DEPS_TABLE in wxwin.py
+ * Add extra libraries needed by wxFoo (if any) to EXTRALIBS in wxwin.py
* Add WXLIB_FOO definition to common.bkl (into the "Names of component
libraries" section). It looks like this:
<set var="WXLIB_FOO">
<if cond="MONOLITHIC=='0'">$(mk.evalExpr(wxwin.mkLibName('foo')))</if>
</set>
-c) Add files to monolithic build: it's enough to add FOO_SRC to MONOLIB_GUI_SRC
- or MONOLIB_SRC, depending on whether wxFoo uses GUI or not.
+c) Modify monolithic.bkl to add files to monolithic build: it's enough to add
+ FOO_SRC to MONOLIB_GUI_SRC or MONOLIB_SRC, depending on whether wxFoo uses
+ GUI or not.
-d) Add files to multilib build: add foolib and foodll targets. Don't use
- wxBase targets as the template, use e.g. wxXML or wxHTML. Make sure
- WXMAKINGDLL_FOO is defined in foodll.
+d) Modify multilib.bkl to add files to multilib build: add foolib and foodll
+ targets. Don't use wxBase targets as the template, use e.g. wxXML or wxHTML.
+ Make sure WXMAKINGDLL_FOO is defined in foodll.
e) Regenerate all makefiles (don't forget to run autoconf)
the library and needed linker flags:
* Add "foo" to either CORE_BASE_LIBS or CORE_GUI_LIBS in configure.in so
that wxFoo is not treated as contrib library in monolithic build.
- * If wxFoo links against additional libraries, add neccessary linker
+ * If wxFoo links against additional libraries, add necessary linker
flags and libraries to ldflags_foo and ldlibs_foo variables in
wx-config.in (both are optional).
WX_CHECK_BUILD_OPTIONS("wxFoo")
i) Add information about wxFoo to the manual ("Libraries list" section
- in libs.tex).
+ in libs.tex) and update docs/latex/wx/libs.dia (you need Dia for this)
+ to show the dependencies of the new library.
+j) Also please add 4 #pragma comment(lib, "foo") (for Unicode/ANSI
+ Release/Debug combinations) to the file include/msvc/wx/setup.h and
+ add a check for WXMAKINGDLL_FOO to the test whether we're building a DLL at
+ the end of include/wx/msw/chkconf.h.
=== EOF ===