X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/44aaf7dad88fa3e8fa2945d2a4ce739bdb9828f9..2c25de3ff6ab9495acdca5b04d360f75da0e1a24:/docs/tech/tn0016.txt diff --git a/docs/tech/tn0016.txt b/docs/tech/tn0016.txt index 3e42e5ab5d..88fbebcf59 100644 --- a/docs/tech/tn0016.txt +++ b/docs/tech/tn0016.txt @@ -1,57 +1,49 @@ - 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 Python on Windows. Once you have installed Bakefile, you can easily regenerate the makefiles using -the makefile in $(wx)/build/bakefiles directory. The makefile uses Unix make -syntax and works on Unix or using either Borland Make or GNU Make (including -native Win32 port called mingw32-make from http://www.mingw.org) on Windows. -It is possible that other Windows make utilities work as well, but it wasn't -tested. "make clean" only works on Unix or Cygwin or MSYS emulation layer on -Windows. - -You can use following commands when generating the makefiles (must be run from -$(wx)/build/bakefiles directory): - -make generates one makefile (e.g. "make ../makefile.gcc") -make all regenerates all makefiles that are out of date -make library only makefiles for the main library -make only makefiles for given compiler; possible values - are "borland", "watcom", "mingw", "autoconf", "msvc" - and "mvsc6prj" (Visual C++ project files) -make clean deletes all generated files (Unix shell only) +the bakefile_gen tool. Run it from $(wx)/build/bakefiles directory and it will +regenerate all outdated makefiles. See $(wx)/build/bakefiles/README for more +details. Note that it generates makefiles for samples and contrib libraries, too. -IMPORTANT NOTE: Don't forget to run autoconf in wxWindows root directory 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. +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. You can use Bakefile to generate makefiles or projects customized to your -needs, too. See Makefile for details on bakefile commands used to generate -makefiles. For example, you can use this command to generate VC++ project -files without wxUniversal configurations: +needs, too. See Bakefiles.bkgen for details on bakefile commands used to +generate makefiles. For example, you can use this command to generate +VC++ project files without wxUniversal configurations: bakefile -v -fmsvc6prj -o../wxmy.dsw -DRUNTIME_LIBS=dynamic - -DOFFICIAL_BUILD=0 -DUSE_HTML=1 -DUSE_OPENGL=1 + -DDEBUG_INFO=default -DDEBUG_FLAG=default + -DOFFICIAL_BUILD=0 -DUSE_HTML=1 -DUSE_OPENGL=1 -DUSE_ODBC=1 -DMONOLITHIC=0 -DUSE_GUI=1 -DWXUNIV=0 wx.bkl Or monolithic instead of multilib (the default): bakefile -v -fmsvc6prj -o../wxmono.dsw -DRUNTIME_LIBS=dynamic - -DOFFICIAL_BUILD=0 -DUSE_HTML=1 -DUSE_OPENGL=1 + -DDEBUG_INFO=default -DDEBUG_FLAG=default + -DOFFICIAL_BUILD=0 -DUSE_HTML=1 -DUSE_OPENGL=1 -DUSE_ODBC=1 -DMONOLITHIC=1 -DUSE_GUI=1 wx.bkl Or monolithic wxBase: bakefile -v -fmsvc6prj -o../wxBase.dsw -DRUNTIME_LIBS=dynamic - -DOFFICIAL_BUILD=0 -DUSE_HTML=0 -DUSE_OPENGL=0 + -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 and directives +and use bakefile_gen instead of running bakefile directly. 2. Bakefile files organization @@ -70,6 +62,7 @@ Support files are: common_samples.bkl common_contrib.bkl - shared definitions and templates config.bkl - user-configurable build options + make_dist.mk - implementation of "make dist" on Unix Files used to build the library are: wx.bkl - main file @@ -90,11 +83,11 @@ All files used by main libraries are listed in files.bkl. The file is 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 @@ -123,8 +116,9 @@ in the sample's bakefile (see e.g. samples/image/image.bkl for an example). Make sure to add 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 -and commit $(wx)/build/bakefiles/Makefile. +Run bakefile_gen in $(wx)/build/bakefiles to regenerate the bakefiles. + +Finally commit $(wx)/build/bakefiles/Makefile and all the other modified files. 5. Adding contrib library @@ -141,8 +135,8 @@ the library should use WXDLLIMPEXP_FOO defined in wxFoo's headers analogically 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 @@ -167,7 +161,9 @@ a) Add files to files.bkl: Finally, define FOO_SRC and FOO_HDR to contain both FOO_PLATFORM_{SRC,HDR} and FOO_{SRC,HDR} (see NET_SRC definition for an example). - * Add FOO_HDR to ALL_HEADERS + * Add FOO_HDR to ALL_GUI_HEADERS or ALL_BASE_HEADERS. + * If wxFoo is wxBase library (doesn't use GUI), add FOO_SRC to + ALL_BASE_SOURCES. (You can apply different approaches to HDR and SRC variables, if e.g. headers are all common but sources are not.) @@ -176,8 +172,9 @@ a) Add files to files.bkl: native make tools. b) Modify bakefile system in build/bakefiles/ to recognize wxFoo: - * Add 'foo'to MAIN_LIBS and LIBS_NOGUI or LIBS_GUI (depending on whether + * 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 EXTRALIBS in wxwin.py * Add WXLIB_FOO definition to common.bkl (into the "Names of component libraries" section). It looks like this: @@ -193,18 +190,18 @@ d) Add files to multilib build: add foolib and foodll targets. Don't use e) Regenerate all makefiles (don't forget to run autoconf) -f) Update wx-config.in to contain information about the library and needed - linker flags: - * Add "foo" to either CORE_BASE_LIBS or CORE_GUI_LIBS so that wxFoo is - not treated as contrib library in monolithic build. - * If wxFoo links against additional libraries, add neccessary linker - flags and libraries to ldflags_foo and ldlibs_foo variables (both are - optional). - -g) Update defs.h to define WXMAKINGDLL_FOO if WXMAKINGDLL is defined (add - #define WXMAKINGDLL_FOO inside first "#ifdef WXMAKINGDLL" block in defs.h) - and to define WXDLLIMPEXP_FOO and WXDLLIMPEXP_DATA_FOO. You can copy - e.g. WXDLLIMPEXP_NET definition, it is something like this: +f) Update configure.in and wx-config.in to contain information about + 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 necessary linker + flags and libraries to ldflags_foo and ldlibs_foo variables in + wx-config.in (both are optional). + +g) Update dlimpexp.h to define WXMAKINGDLL_FOO if WXMAKINGDLL is defined (add + #define WXMAKINGDLL_FOO inside first "#ifdef WXMAKINGDLL" block in + dlimpexp.h) and to define WXDLLIMPEXP_FOO and WXDLLIMPEXP_DATA_FOO. You + can copy e.g. WXDLLIMPEXP_NET definition, it is something like this: #ifdef WXMAKINGDLL_NET #define WXDLLIMPEXP_NET WXEXPORT #define WXDLLIMPEXP_DATA_NET(type) WXEXPORT type @@ -217,6 +214,11 @@ g) Update defs.h to define WXMAKINGDLL_FOO if WXMAKINGDLL is defined (add #endif Use WXDLLIMPEXP_FOO when declaring wxFoo classes and functions. +h) Add this code to one of wxFoo's files (the more often used, the better): + // DLL options compatibility check: + #include "wx/app.h" + WX_CHECK_BUILD_OPTIONS("wxFoo") + i) Add information about wxFoo to the manual ("Libraries list" section in libs.tex).