| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 | 
							-          How to add new files and libraries to wxWidgets build system
 
-          ============================================================
 
- 1. Regenerating makefiles
 
- -------------------------
 
- 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 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, too.
 
- 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 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
 
-              -DDEBUG_INFO=default -DDEBUG_FLAG=default
 
-              -DOFFICIAL_BUILD=0 -DUSE_HTML=1 -DUSE_OPENGL=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
 
-              -DDEBUG_INFO=default -DDEBUG_FLAG=default
 
-              -DOFFICIAL_BUILD=0 -DUSE_HTML=1 -DUSE_OPENGL=1
 
-              -DMONOLITHIC=1 -DUSE_GUI=1 wx.bkl
 
- Or monolithic wxBase:
 
-     bakefile -v -fmsvc6prj -o../wxBase.dsw -DRUNTIME_LIBS=dynamic
 
-              -DDEBUG_INFO=default -DDEBUG_FLAG=default
 
-              -DOFFICIAL_BUILD=0 -DUSE_HTML=0 -DUSE_OPENGL=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
 
- ------------------------------
 
- Makefile are generated from .bkl files ("bakefiles") from two places:
 
-   - $(wx)/build/bakefiles directory
 
-   - samples directories
 
- $(wx)/build/bakefiles contains bakefiles for main library and support files
 
- that simplify writing bakefiles for samples.
 
- Support files are:
 
-   wxwin.py                - helper functions
 
-   common.bkl
 
-   common_samples.bkl
 
-   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
 
-   files.bkl               - lists of source files
 
-   monolithic.bkl          - targets for wxWin built as single big library
 
-   multilib.bkl            - targets for multilib build
 
-   opengl.bkl              - GL library with wxGLCanvas (this one is not
 
-                             included in monolithic library for historical
 
-                             reasons, so "monolithic" really means "two libs")
 
-   {expat,jpeg,png,tiff,
 
-    regex,zlib,odbc}.bkl   - 3rd party libraries makefiles
 
- 3. Adding files to existing library
 
- -----------------------------------
 
- 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 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 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
 
- sources on all platforms (e.g. wxXml or wxXML) -- simply add the file to e.g.
 
- HTML_SRC or HTML_HDR.
 
- If the file is used only on one platform and is part of wxBase, add it to
 
- BASE_{platform}_SRC/HDR. If it is used on all platforms, add it to BASE_CMN.
 
- If it is built on more than one platform but not on all of them, add the file
 
- to *all platforms that use it*!
 
- If a file is not wxBase file, but GUI file, then the variables are named after
 
- toolkits/ports, not platforms. Same rules as for wxBase files apply
 
- (substitute "platform" with "toolkit"). Make sure you correctly choose between
 
- {port}_LOWLEVEL_SRC and {port}_SRC -- the former is for files used by
 
- wxUniversal, e.g. GDI classes. Files shared by all X Window System ports
 
- should be put into XWIN_LOWLEVEL_SRC.
 
- 4. Adding sample
 
- ----------------
 
- Copy the bakefile from another sample, change the ID and files accordingly.
 
- If the sample uses some data files, make sure to have <wx-data> node
 
- in the sample's bakefile (see e.g. samples/image/image.bkl for an example).
 
- Make sure to add <wx-lib> statements for all libraries from multilib build
 
- that are required by the sample.
 
- The Windows resource specification should use the central .rc file:
 
-         <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 new core library
 
- --------------------------
 
- When adding new library to the core set of libraries, the files must be
 
- added to both a newly added library in multilib build and into the single
 
- library built in monolithic mode. We will assume that the new library is
 
- called wxFoo.
 
- a) Add files to files.bkl:
 
-    * If wxFoo builds from same files on all platforms (e.g. wxNet),
 
-      add FOO_SRC and FOO_HDR variables with lists of sources and headers.
 
-    * If wxFoo have no files in common (e.g. wxGL), add FOO_SRC and FOO_HDR
 
-      with toolkit or platform conditions. Have a look at OPENGL_SRC for an
 
-      example.
 
-    * Otherwise add FOO_CMN_SRC and FOO_CMN_HDR for common files and
 
-      FOO_{platform}_{SRC,HDR} or FOO_{toolkit}_{SRC,HDR} as appropriate. Add
 
-      FOO_PLATFORM_{SRC,HDR} into "Define sources for specific libraries"
 
-      section that is conditionally set to one of FOO_xxx_{SRC,HDR} based on
 
-      target platform/toolkit (see NET_PLATFORM_SRC definition for an example).
 
-      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_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.)
 
-    Note that the conditions can only test for equality, due to limitations of
 
-    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
 
-      the library depends on wxCore or not) to wxwin.py file.
 
-    * 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) 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) 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)
 
- f) Update configure.in and wx-config.in to contain information about
 
-    the library and needed linker flags:
 
-    * Add "foo" to either STD_BASE_LIBS or STD_GUI_LIBS in configure.in.
 
-    * 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
 
-         #elif defined(WXUSINGDLL)
 
-             #define WXDLLIMPEXP_NET WXIMPORT
 
-             #define WXDLLIMPEXP_DATA_NET(type) WXIMPORT type
 
-         #else // not making nor using DLL
 
-             #define WXDLLIMPEXP_NET
 
-             #define WXDLLIMPEXP_DATA_NET(type) type
 
-         #endif
 
-    Don't forget to add WXDLLIMPEXP_FWD_FOO definitions too.
 
-    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) 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 ===
 
 
  |