+Symantec & DigitalMars C++ Compilation
+----------------------------------------------------------------
+
+The DigitalMars compiler is a free successor to the Symantec compiler
+and can be downloaded from http://www.digitalmars.com/
+
+1. You need to download and unzip in turn (later packages will overwrite
+ older files)
+ Digital Mars C/C++ Compiler Version 8.40 or later
+ Basic utilities
+ from http://www.digitalmars.com/download/freecompiler.html
+
+2. Change directory to build\msw and type 'make -f makefile.dmc' to
+ make the wxWidgets core library.
+
+3. Change directory to samples\minimal and type 'make -f makefile.dmc'
+ to make this sample. Most of the other samples also work.
+
+
+Note that if you don't have the files makefile.dmc you may create them yourself
+using bakefile tool according to the instructions in build\bakefiles\README:
+
+ cd build\bakefiles
+ bakefile_gen -f dmars -b wx.bkl
+ bakefile_gen -f dmars -b ../../samples/minimal/minimal.bkl
+
+
+Note that wxUSE_STD_STRING is disabled in wx/string.h for Digital Mars as this
+compiler doesn't come with standard C++ library headers by default. If you
+install STLPort or another STL implementation, you'll need to edit wx/string.h
+and remove the check for Digital Mars in it (search for __DMC__).
+
+
+16-bit compilation is no longer supported.
+
+Configuring the Build
+================================================================
+
+So far the instructions only explain how to build release DLLs of wxWidgets
+and did not cover any configuration. It is possible to change many aspects of
+the build, including debug/release and ANSI/Unicode settings. All makefiles in
+build\msw directory use same options (with a few exceptions documented below)
+and the only difference between them is in object files and library directory
+names and in make invocation command.
+
+Changing the Settings
+----------------------------------------------------------------
+
+There are two ways to modify the settings: either by passing the values as
+arguments when invoking make or by editing build\msw\config.$(compiler) file
+where $(compiler) is same extension as the makefile you use has (see below).
+The latter is good for setting options that never change in your development
+process (e.g. GCC_VERSION or VENDOR). If you want to build several versions of
+wxWidgets and use them side by side, the former method is better. Settings in
+config.* files are shared by all makefiles (samples, contrib, main library),
+but if you pass the options as arguments, you must use same arguments you used
+for the library when building samples or contrib libraries!
+
+Examples of invoking make in Unicode debug build (other options described
+below are set analogically):
+
+Visual C++:
+ > nmake -f makefile.vc BUILD=debug UNICODE=1
+
+Borland C++:
+ > make -f makefile.bcc -DBUILD=debug -DUNICODE=1
+ (Note that you have to use -D to set the variable, unlike in other make
+ tools!)
+
+Watcom C/C++:
+ > wmake -f makefile.wat BUILD=debug UNICODE=1
+
+MinGW using native makefiles:
+ > mingw32-make -f makefile.gcc BUILD=debug UNICODE=1
+
+MinGW using configure:
+ > ./configure --enable-debug --enable-unicode
+ (see ./configure --help on details; configure is not covered in this
+ section)
+
+Cygwin using configure:
+ > ./configure --disable-precomp-headers --enable-debug --enable-unicode
+ (use --disable-precomp-headers if Cygwin doesn't support precompiled
+ headers)
+
+Brief explanation of options and possible values is in every
+build\msw\config.* file; more detailed description follows.
+
+Basic Options
+----------------------------------------------------------------
+
+BUILD=release
+ Builds release version of the library. It differs from default 'debug' in
+ lack of appended 'd' in name of library and uses the release CRT libraries
+ instead of debug ones. Notice that even release builds do include debug
+ information by default, see DEBUG_FLAG for more information about it.
+
+SHARED=1
+ Build shared libraries (DLLs). By default, DLLs are not built
+ (SHARED=0).
+
+UNICODE=0
+ To build ANSI versions of the libraries, add UNICODE=0 to make invocation
+ (default is UNICODE=1). If you want to be able to use Unicode version on
+ Windows9x, you will need to set MSLU=1 as well.
+
+ This option affect name of the library ('u' is appended) and the directory
+ where the library and setup.h are store (ditto).
+
+WXUNIV=1
+ Build wxUniversal instead of native wxMSW (see
+ http://www.wxwidgets.org/wxuniv.htm for more information).
+
+Advanced Options
+----------------------------------------------------------------
+
+MONOLITHIC=1
+ Starting with version 2.5.1, wxWidgets has the ability to be built as
+ several smaller libraries instead of single big one as used to be the case
+ in 2.4 and older versions. This is called "multilib build" and is the
+ default behaviour of makefiles. You can still build single library
+ ("monolithic build") by setting MONOLITHIC variable to 1.
+
+USE_GUI=0
+ Disable building GUI parts of the library, build only wxBase components used
+ by console applications. Note that if you leave USE_GUI=1 then both wxBase
+ and GUI libraries are built. If you are building monolithic library, then
+ you should set wxUSE_GUI to 1 in setup.h.
+
+USE_OPENGL=1
+ Build wxmsw29_gl.lib library with OpenGL integration class wxGLCanvas.
+ You must also modify your setup.h to #define wxUSE_GLCANVAS 1. Note that
+ OpenGL library is always built as additional library, even in monolithic
+ build!
+
+USE_HTML=0
+ Do not build wxHTML library. If MONOLITHIC=1, then you must also
+ #define wxUSE_HTML 1 in setup.h.
+
+USE_XRC=0
+ Do not build XRC resources library. If MONOLITHIC=1, then you must also
+ #define wxUSE_HTML 1 in setup.h.
+
+RUNTIME_LIBS=static
+ Links static version of C and C++ runtime libraries into the executable, so
+ that the program does not depend on DLLs provided with the compiler (e.g.
+ Visual C++'s msvcrt.dll or Borland's cc3250mt.dll).
+ Caution: Do not use static runtime libraries when building DLL (SHARED=1)!
+
+MSLU=1
+ Enables MSLU (Microsoft Layer for Unicode). This setting makes sense only if
+ used together with UNICODE=1. If you want to be able to use Unicode version
+ on Windows9x, you will need MSLU (Microsoft Layer for Unicode) runtime DLL
+ and import lib. The former can be downloaded from Microsoft, the latter is
+ part of the latest Platform SDK from Microsoft (see msdn.microsoft.com for
+ details). An alternative implementation of import library can be downloaded
+ from http://libunicows.sourceforge.net - unlike the official one, this one
+ works with other compilers and does not require 300+ MB Platform SDK update.
+
+DEBUG_FLAG=0
+DEBUG_FLAG=1
+DEBUG_FLAG=2
+ Specifies the level of debug support in wxWidgets. Notice that
+ this is independent from both BUILD and DEBUG_INFO options. By default
+ always set to 1 meaning that debug support is enabled: asserts are compiled
+ into the code (they are inactive by default in release builds of the
+ application but can be enabled), wxLogDebug() and wxLogTrace() are available
+ and __WXDEBUG__ is defined. Setting it to 0 completely disables all
+ debugging code in wxWidgets while setting it to 2 enables even the time
+ consuming assertions and checks which are deemed to be unsuitable for
+ production environment.
+
+DEBUG_INFO=0
+DEBUG_INFO=1
+ This option affects whether debugging information is generated. If
+ omitted or set to 'default' its value is determined the value of
+ the BUILD option.
+
+TARGET_CPU=X64|IA64
+ (VC++ only.) Set this variable to build for x86_64 systems. If unset, x86
+ build is performed.
+
+VENDOR=<your company name>
+ Set this to a short string identifying your company if you are planning to
+ distribute wxWidgets DLLs with your application. Default value is 'custom'.
+ This string is included as part of DLL name. wxWidgets DLLs contain compiler
+ name, version information and vendor name in them. For example
+ wxmsw290_core_bcc_custom.dll is one of DLLs build using Borland C++ with
+ default settings. If you set VENDOR=mycorp, the name will change to
+ wxmsw290_core_bcc_mycorp.dll.
+
+CFG=<configuration name>
+ Sets configuration name so that you can have multiple wxWidgets builds with
+ different setup.h settings coexisting in same tree. See "Object and library
+ directories" below for more information.
+
+COMPILER_PREFIX=<string>
+ If you build with multiple versions of the same compiler, you can put
+ their outputs into directories like "vc6_lib", "vc8_lib" etc. instead of
+ "vc_lib" by setting this variable to e.g. "vc6". This is merely a
+ convenience variable, you can achieve the same effect (but different
+ directory names) with the CFG option.
+
+
+Compiler-Specific Options
+----------------------------------------------------------------
+
+* MinGW
+
+If you are using gcc-2.95 instead of gcc3, you must set GCC_VERSION to
+2.95. In build\msw\config.gcc, change
+> GCC_VERSION = 3
+to
+> GCC_VERSION = 2.95
+
+* Visual C++
+
+DEBUG_RUNTIME_LIBS=0
+DEBUG_RUNTIME_LIBS=1
+ If set to 1, msvcrtd.dll is used, if to 0, msvcrt.dll is used. By default
+ msvcrtd.dll is used only if the executable contains debug info and
+ msvcrt.dll if it doesn't. It is sometimes desirable to build with debug info
+ and still link against msvcrt.dll (e.g. when you want to ship the app to
+ customers and still have usable .pdb files with debug information) and this
+ setting makes it possible.
+
+Fine-tuning the Compiler
+----------------------------------------------------------------
+
+All makefiles have variables that you can use to specify additional options
+passed to the compiler or linker. You won't need this in most cases, but if you
+do, simply add desired flags to CFLAGS (for C compiler), CXXFLAGS (for C++
+compiler), CPPFLAGS (for both C and C++ compiler) and LDFLAGS (the linker).
+
+Object and Library Directories
+----------------------------------------------------------------
+
+All object files produced during a library build are stored in a directory under
+build\msw. Its name is derived from the build settings and CFG variable and from
+the compiler name. Examples of directory names:
+
+ build\msw\bcc_msw SHARED=0
+ build\msw\bcc_mswdll SHARED=1
+ build\msw\bcc_mswunivd SHARED=0, WXUNIV=1, BUILD=debug
+ build\msw\vc_mswunivd ditto, with Visual C++
+
+Libraries and DLLs are copied into a subdirectory of the lib directory with a
+name derived from the compiler and a static/DLL setting and setup.h into a
+directory with a name that contains other settings:
+
+ lib\bcc_msw
+ lib\bcc_lib\msw\wx\setup.h
+ lib\bcc_dll
+ lib\bcc_dll\msw\wx\setup.h
+ lib\bcc_lib
+ lib\bcc_lib\mswunivd\wx\setup.h
+ lib\vc_lib
+ lib\vc_lib\mswunivd\wx\setup.h
+
+Each lib\ subdirectory has wx subdirectory with setup.h as seen above.
+This file is copied there from include\wx\msw\setup.h (and if it doesn't exist,
+from include\wx\msw\setup0.h) and this is the copy of setup.h that is used by
+all samples and should be used by your apps as well. If you are doing changes
+to setup.h, you should do them in this file, _not_ in include\wx\msw\setup.h.
+
+If you set CFG to something, the value is appended to directory names. E.g.
+for CFG=MyBuild, you'll have object files in
+
+ build\msw\bcc_mswMyBuild
+ build\msw\bcc_mswdllMyBuild
+ etc.
+
+and libraries in
+
+ lib\bcc_libMyBuild
+ lib\bcc_dllMyBuild
+ etc.
+
+By now it is clear what CFG is for: builds with different CFG settings don't
+share any files and they use different setup.h files. For example, this allows
+you to have two static debug builds, one with wxUSE_SOCKETS=0 and one with sockets
+enabled (without CFG, both of them would be put into same directory and there
+would be conflicts between the files).
+
+
+Building Applications Using wxWidgets
+=====================================
+
+NB: The makefiles and project files provided with wxWidgets samples show which
+ flags should be used when building applications using wxWidgets so in case
+ of a problem, e.g. if the instructions here are out of date, you can always
+ simply copy a makefile or project file from samples\minimal or some other
+ sample and adapt it to your application.
+
+Independently of the compiler and make/IDE you are using you must do the
+following to use wxWidgets:
+
+* Add $WXWIN/include to the
+ - compiler
+ - resource compiler
+ include paths.
+* Define the following symbols for the preprocessor:
+ - __WXMSW__ to ensure you use the correct wxWidgets port.
+ - _UNICODE unless you want to use deprecated ANSI build of wxWidgets.
+ - NDEBUG if you want to build in release mode, i.e. disable asserts.
+ - WXUSINGDLL if you are using DLL build of wxWidgets.
+* Add $WXWIN/lib/prefix_lib-or-dll to the libraries path. The prefix depends
+ on the compiler, by default it is "vc" for MSVC, "gcc" for g++ and so on.
+* Add the list of libraries to link with to the linker input. The exact list
+ depends on which libraries you use and whether you built wxWidgets in
+ monolithic or default multlib mode and basically should include all the
+ relevant libraries from the directory above, e.g. "wxmsw29ud_core.lib
+ wxbase29ud.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexud.lib
+ wxexpatd.lib" for a debug build of an application using the core library only
+ (all wxWidgets applications use the base library).
+
+
+Microsoft Visual C++ users can simplify the linker setup by prepending the
+directory $WXWIN/msvc to the include path (it must come before $WXWIN/include
+directory!) and omitting the last step: the required libraries will be linked
+in automatically using the "#pragma comment(lib)" feature of this compiler.