]> git.saurik.com Git - wxWidgets.git/blobdiff - docs/tech/tn0016.txt
Added Bakefile conditions used by recently updated samples/dialogs/Makefile.in
[wxWidgets.git] / docs / tech / tn0016.txt
index 86ddfccf2d31f7d938ca2d66c5e049a075258694..22fea999ad88fe3d6d96f9446c74ce40970f15ee 100644 (file)
@@ -1,41 +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 <filename>           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 <compiler>           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 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 -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
+             -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
+             -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
@@ -54,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
@@ -107,8 +116,9 @@ 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.
 
-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
@@ -125,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
@@ -151,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.)
@@ -160,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 DEPS_TABLE 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">
@@ -177,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.
+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 neccessary linker
-     flags and libraries to ldflags_foo and ldlibs_foo variables (both are
-     optional).
+     flags and libraries to ldflags_foo and ldlibs_foo variables in
+     wx-config.in (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:
+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
@@ -201,8 +214,13 @@ g) Update defs.h to define WXMAKINGDLL_FOO if WXMAKINGDLL is defined (add
         #endif
    Use WXDLLIMPEXP_FOO when declaring wxFoo classes and functions.
 
-i) Add information about wxFoo to the manual
-   FIXME - where exactly
+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).
 
 
 === EOF ===